nemesis icon indicating copy to clipboard operation
nemesis copied to clipboard

Дискета nemizida.img виснет при попытке загрузки из coreboot.rom для QEMU

Open informer2016 opened this issue 6 years ago • 3 comments

(продолжение прошлой issue #2 https://github.com/coderaiser/nemesis/issues/2 )

Собранный образ coreboot.rom для QEMU, с добавленной в него дискетой nemizida.img, находится внутри этого архива: coreboot.rom.zip (+ там много других интересных дискет, можешь поиграть с ними :wink: ) . Запускаю командой qemu-system-x86_64 -L . -m 768 -localtime -vga vmware -net nic,model=rtl8139 -net user -soundhw ac97 -bios ./coreboot.rom -boot menu=on -serial stdio (qemu-system-x86_64 - потому что некоторые дискетные ОС 64 битные) .

nemizida первая в списке и грузится автоматически, т.е. необязательно открывать boot menu клавишей Escape и выбирать 1. При попытке загрузки вижу следующее:

Nemesis loader
kernel find
kernel load successfully
hello from Nemizida =)!!!
_ <--- мигающий символ подчёркивания, зависло здесь...

При этом на вашей странице с эмулятором bosch эта дискета (или скорее её предыдущая версия) - успешно грузится до командной строки. Надеюсь вам интересна эта тема и вы захотите попробовать собрать новую дискету, которая решает эту проблему или показывает отладочную информацию полезную для её отладки.

Чтобы вам не пришлось качать весь репозиторий coreboot для получения cbfstool - утилиты для добавления/удаления дискет (необходима для замены старой дискеты на новую) - предлагаю вам скрипт cbfstool.sh - https://github.com/informer2016/shr/files/2728466/cbfstool.zip . Распакуйте этот архив, затем cd ./cbfstool и ./cbfstool.sh При помощи wget этот небольшой скрипт скачает только нужные файлы (в сумме меньше 2 мегабайт), затем скомпилит их и появится исполняемый файл ./cbfstool/util/cbfstool/cbfstool - при помощи которого можно добавлять/удалять дискеты:

1) Добавить дискету: ./cbfstool/util/cbfstool/cbfstool ./coreboot.rom add -f ./nemizida.img -n floppyimg/nemizida.lzma -t raw -c lzma

2) Удалить дискету: ./cbfstool/util/cbfstool/cbfstool ./coreboot.rom remove -n floppyimg/nemizida.lzma

3) Распечатать карту памяти CBFS: ./cbfstool/util/cbfstool/cbfstool ./coreboot.rom print

informer2016 avatar Apr 11 '19 09:04 informer2016

Не знаю даже в чем может быть проблема, в virtualbox все загружается. hello from Nemizida =)!!! выводится из kernel.asm, судя по всему потом происходит что-то, к чему coreboot оказывается неготов.

Вы можете аналогичным способом добавить своих отладочных сообщений:

mov    al,_printf
mov    bx,hi
int    0xff

С помощью скрипта scripts/make.sh можно пересобрать образ дискеты.

На сколько я понимаю shell не загружается, в образе доступном на v0.2.0 в файле nemizida-v0.2.0.zip он есть. Возможно есть проблема с чтением с дискеты, когда-то была похожая ситуация с bochs. Но я в итоге добился адекватной работы в bochs, vmware и на железе, незнаю может qemu работает иначе? Образ немизиды работает в qemu сам по себе?

coderaiser avatar Apr 11 '19 11:04 coderaiser

@coderaiser Да, образ немезиды работает в qemu сам по себе, но при этом БИОСом виртуальной машины QEMU является coreboot. Большинство дискетных ОС в такой конфигурации работают успешно; у некоторых возникли проблемы с их ramdisk'ом (например Fiwix) но эти проблемы были исправлены авторами ОС. К сожалению у меня недостаточно времени/навыков для самостоятельной отладки, зато могу помочь запуском ваших сборок и различными инструкциями - вроде той что выше, благодаря которой вы можете не пересобирать coreboot а просто обновить дискету.

informer2016 avatar Apr 14 '19 11:04 informer2016

Судя по всему проблема в запуске shell: https://github.com/coderaiser/nemesis/blob/12a9470293e90e4ff7af67eb95fe92748b21953a/kernel/kernel.asm#L87-L89

И нужно смотреть файл kernel/int/exec.inc, как он перед запуском вычитывает из файловой системы данные, а потом переходит на адрес загруженных данных.

coderaiser avatar Aug 08 '23 10:08 coderaiser