Скорость работы с IDE дисками

Drive subsystem, filesystem drivers
  • Leency wrote:У меня система зависает с включенным пунктом b на голубом экране.
    Ещё веселее, там я вообще только переменные переместил. К тому же у меня работает, правда диск дублируется. Похоже, зависает v86. То-есть ей посылаются неправильные данные...?
  • лог VMware
    Spoiler:K : kernel SVN r5584
    K : 1 CPU detected
    K : Attach Interrupt 6 Handler 80031509
    K : Set IDE IRQ6 return code 8005BFD0
    K : IDE controller programming interface 0001018A
    K : BAR0 IDE base addr 01F0
    K : BAR1 IDE base addr 03F4
    K : BAR2 IDE base addr 0170
    K : BAR3 IDE base addr 0374
    K : BAR4 IDE controller register base addr 10C0
    K : IDE Interrupt FF
    K : Channel 1 Disk 0
    K : HD flags = 4008
    K : Dev: VMware Virtual IDE Hard Drive
    K : PIO possible modes 03
    K : PIO set mode 01
    K : Multiword DMA possible modes 07
    K : Multiword DMA set mode 00
    K : Ultra DMA possible modes 07
    K : Ultra DMA set mode 02
    K : Channel 1 Disk 1
    K : Device not found
    K : Channel 2 Disk 0
    K : Device not found
    K : Channel 2 Disk 1
    K : Device not found
    K : FS - HD timeout
    K : FS - HD read error
    K : IDE CH1 DMA enabled
    K : IDE CH2 PIO because no devices
    K : Attach Interrupt 14 Handler 800320A4
    K : Set IDE IRQ14 return code 8005BFE4
    K : Attach Interrupt 15 Handler 800320A4
    K : Set IDE IRQ15 return code 8005BFF8
    K : clear_pci_ide_interrupts: port[10C2] = 20 -> 20; port[10CA] = 00 -> 00
    K : driver /rd/1/drivers/vidintel.sys mapped to 80A88000
    K : Attach Interrupt 1 Handler 80033180
    K : IRQ1 return code 8005C00C
    K : driver /rd/1/drivers/PS2MOUSE.SYS mapped to 80B94000
    K : Attach Interrupt 12 Handler 80B94546
    L: /SYS/LOADDRV Param: RDC
    K : driver /sys/drivers/RDC.sys mapped to 80BA1000
    L: /SYS/NETWORK/NETCFG Param: A
    L: /SYS/NETWORK/@ZEROCONF Param:
    L: /SYS/MEDIA/PALITRA Param: H 007DCEDF 003C427F
    Zero-config service loaded
    L: /SYS/@VOLUME Param:
    K : driver /sys/drivers/SOUND.sys mapped to 80BB8000
    Detecting hardware...
    No compatible PCI soundcard found!
    Loading SB16
    K : driver /sys/drivers/SB16.sys mapped to 80BB9000
    detecting hardware...
    exiting... May be some problems found?
    K : destroy app object
    L: /SYS/@TASKBAR Param:
    L: /SYS/@DOCKY Param:
    L: /SYS/SETUP Param: BOOT
    L: /SYS/@ICON Param:
    L: /SYS/@SS Param: ASSM
    L: /SYS/TMPDISK Param: A0
    K : driver /sys/drivers/tmpdisk.sys mapped to 80BF4000
    Їа®Ўго ¤®Ў ўЁвм ўЁавг «м­л© ¤ЁбЄ
    ҐЈ® а §¬Ґа ­Ґ гЄ § ­, 10% бў®Ў®¤­®© Ћ‡“ Ўг¤Ґв ЁбЇ®«м§®ў ­®
    а §¬Ґа ¤ЁбЄ  Ўг¤Ґв: 101 MB
    ®ЇҐа жЁп гбЇҐи­® § ўҐа襭 
    L: /SYS/SEARCHAP Param:
    Searchap: additional partition is not found!
    L: AUTORUN.DAT processed
  • Ага, LBA48 отсутствует.
    Сделаем мир лучше!
  • У меня нет диска без LBA48, так что тестируйте.
  • У меня в QEMU и на реальном железе просто постоянный ребут после синего экрана.
    Из хаоса в космос
  • У тебя реальное железо без LBA48?
    ... а ты сжимал ядро? Оно теперь несжатое слишком большое для загрузки.
  • Не сжимал. Как определить с LBA48 или без? (в любом случае ребут не ок)
    Из хаоса в космос
  • Ага, Serge дал пинка загрузчику, теперь можно не сжимать. Без LBA48 древние диски, максимум 120 Гб, меньше 20 Гб — точно.
  • Теперь работает.
    PS. Упаковка ни чем не помогала. Данные затирались стеком после распаковки ядра.
  • У меня не грузится ни на VBox http://prntscr.com/8cpsir ни на QEMU http://prntscr.com/8cptn4
    На реальном железе не увидел смысла проверять.
    Из хаоса в космос
  • Ошибка загрузки с дискеты? Я редактировал код, который касается IDE (HDD и CD)... :? Serge, можешь что-то подсказать?
  • Скажу, что меня смущает ревизия ядра на скриншотах. Я исправил проблему со стеком в 5786, но неправильно. Поэтому лучше брать 5790+.
  • В ревизии 5578 поломали чтение файлов маленькими блоками.
    Тестовый код
    Spoiler:

    Code: Select all

    int main()
    {
        char *cache_path, *bin_path;
        uint32_t crc;
        int count;
        int offset;
        int i;
    
        cache_path = "/kolibrios/kpm/cache/mesa-9.2.5.7z";
        bin_path = "/kolibrios/kpm/test.bin";
    
        write_file(bin_path, buf, 0, 32, &count);
    
        offset = 32;
        for(i=0; i< 16; i++)
        {
            read_file(cache_path, &buf[i*1024], offset, 1024, &count);
            printf("read offset %d count %d\n",offset, count);
            offset+=count;
        }
        crc = crc32buf(buf,16384);
        printf("offset 32 size %d crc32 %x\n", 16384, crc);
        write_file(bin_path, buf, 32, 16384, &count);
    
        read_file(cache_path, buf, 32, 16384, &count);
        crc = crc32buf(buf,count);
        printf("offset 32 size %d crc32 %x\n", count, crc);
    
        return 0;
    }
    В первом случае из файла читается 16Кб блоками по 1Кб с начальным смещением 32 байта. Во втором чтение выполняется одним блоком со смещением 32 байта от начала файла. Анализ показал, что в первом случае при пересечении границы в 4096 байт последние 32 байта содержат мусор. Исходный файл http://ftp.kolibrios.org/users/Serge/ne ... a-9.2.5.7z
    Ошибка возможно связана с фрагментацией файла, потому что после изменения файла сбой происходит в другом месте.
    Attachments
    test-bin (16.03 KiB)
    дамп буфера
    Downloaded 369 times
  • Как страшно жить...
    Да, я не учёл вариант, когда в конце кусочек меньше сектора принадлежит другому фрагменту.
    Собрал новое ядро.
  • Who is online

    Users browsing this forum: No registered users and 4 guests