Мне казалось, что это простая и понятная задача, тяп-ляп и в дамках, но потратив два полных дня и всё свободное рабочее время, понял что не всё так просто. А самое удивительное, что нет толковых рабочих мануалов!
Наконец работающий образ, готовый к dd на флешку
В предыдущем посте я ругался на проблемы с CF-картами и сюда же наслаивается другая проблема - сложность создания рабочего образа. Чтобы отделить одно от другого, здесь буду говорить строго о создании рабочего образа (файла), который в последствии можно будет бинарно перенести на CF и всё будет работать.
Казалось бы, что может быть проще: у меня есть точно работающий образ 16 МБ флешки (обратите внимание на разницу между МБ и МиБ, я говорю о МБ и далее всё будет в МБ). Далее можно создать пустой образ CF с помощью команды dd, truncate или mkdiskimage:
dd if=/dev/zero of=4gb.img bs=1K count=3915576 status=progress
truncate --size 4009549824 4gb.img
mkdiskimage 4gb.img 7769 16 63
Все делают разное, но в сути нам пойдёт любой вариант. truncate самый быстрый. И после, казалось бы, делаем вот что:
qemu-system-i386 -hda mydos.img -hdb 4gb.img
Загружаемся с рабочего образа, fdisk под ДОС размечаем всё, и после форматируем полученный диск с переносом системных файлов, командой format d:/s .
Всё подробно описано тут.
И всё красиво, элегантно, но это НЕ РАБОТАЕТ. Файлы переносятся, но на диск загрузки потом не идёт...
Да, ограничение в 2 ГБ есть, но это прекрасно учитывает сам fdisk, он не позволяет создать раздел больше чем 2 ГБ. Поэтому там делаешь несколько разделов. Образ рабочий, файлы видны с другого диска, можно монтировать в linux. Но загрузка не идёт. Знаю про пометку диска загрузочным, но как я понимаю эту пометку ставит команда format.
Итак, рассказываю рабочий рецепт
Почему именно он рабочий я не знаю, как его повторить другим способом, тоже пока не ясно.
1. Качаем комплект установочных
дискет ДОС 6.22 отсюда. Распаковываем их в папку 622.
2. Стартуем qemu с дискетки, с возможность ввода команд.
qemu-system-i386 -fda 622/disk01.img -hda 4gb.img -boot a -monitor stdio
Для смены диска в консоли qemu вводим команду:
(qemu) change floppy0 622/disk02.img
И так для всех дискет.
После этого мы получаем работающий образ диска, на который qemu успешно грузится (команда qemu-system-i386 -hda 4gb.img).
А теперь, следите за руками! После загрузки смотрим как видит fdisk этот носитель. А видит его как 500 МБ носитель! Никаких расширенных разделов 640 килобайт 500 МБ хватит всем!
Разметить так ручками ни в DOS, ни в Linux мне не удалось. Анализ скриптов на дискетках не дал результата. Вот такая вот магия.
Осталось проверить, будет ли это работать на рельном железе (FreeDOS, таким образом установленный, не захотел запускаться).