Как запустить ядро FreeDOS-32 (используя GRUB или X.exe eXtender)

Готовые решения для многих вопросов, которые очень часто задаются снова и снова.

Модератор: Модераторы разделов

Аватара пользователя
Juliette
Сообщения: 5058
Статус: ROSA Lab
ОС: Ubuntu LTS, Mandriva 2011

Как запустить ядро FreeDOS-32

Сообщение Juliette » 06.07.2007 01:03

Этот документ объясняет, как запустить ядро FreeDOS-32 используя GRUB или X.exe eXtender.


Ядро FreeDOS-32 представляет из себя совместимую с мультизагрузкой исполняемую программу (подробнее о мультизагрузке см. офф.сайт GRUB: http://www.gnu.org/software/grub ); и, соответственно, оно может быть загружено с помощью совместимого с мультизагрузкой загрузчика, такого, каким является GNU GRUB, или же оно может быть запущено из системы DOS посредством специальной DOS-программы eXtender (x.exe).

Чтобы запустить FreeDOS-32 средствами eXtender, загрузитесь в DOS (это может быть MS-DOS или же FreeDOS) и напечатайте:

Код: Выделить всё

x -m <module1> -m <module2> ... -m <modulen> <kernel>

Например, находясь в директории fd32 (относительно корня) напечатайте:

Код: Выделить всё

x -m drivers\dpmi\dpmi.o -m ..\tests\empty.exe fd32.bin

(важно: x.exe должна быть записана в path или же находиться в директории fd32)
Для того, чтобы загрузить ядро с помощью GRUB, создайте загрузочную дискету с GRUB (подробнее см. документацию по GRUB), скопируйте на неё ядро и модули и загрузитесь с неё.
Далее, войдите в ком. строку GRUB (нажав клавишу 'c'), и напечатайте:

Код: Выделить всё

kernel (fd0)/<kernel>
 module (fd0)/<module1>
 module (fd0)/<module2>
 ...
 module (fd0)/<modulen>
 boot

Например, используйте:

Код: Выделить всё

kernel (fd0)/fd32.bin
 module (fd0)/dpmi.o
 module (fd0)/empty.out
 boot


Загрузочные модули
Теперь, прежде чем рассмотреть, какие модули мы можем загрузить, давайте прежде рассмотрим, что модули из себя представляют. Модуль может быть или объектным файлом (и тогда он будет динамически слинкован с ядром), реализующим какой-то драйвер или нативное приложение, или же он может быть исполняемым файлом (например COFF, ELF, или же DJGPP несущий в себе EXE), который будет запущен ядром во время загрузки. Некоторые программы, предназначенные к исполнению в виде модулей, находятся в CVS-модуле tests, в то время как объектно-ориентированные драйверы могут быть найдены в CVS-модуле drivers. Драйвер DPMI -- особенный, потому что он не предназначен к тому, чтобы быть портированным, поэтому он размещается в директории drivers CVS-модуля fd32.
Например, tests/empty.exe (или же, что одно и тоже, его невыкорчеванная версия, empty.out) - это очень простая програма, использующая драйвер DPMI, а именно fd32/drivers/dpmi/dpmi.o .
Теперь давайте посмотрим, какие модули мы будем загружать. Прежде всего, если вы хотите протестироварь ядро, не запуская никаких программ, вам не понадобится загружать никаких модулей. Просто используйте:

Код: Выделить всё

x fd32.bin

или же, в определениях для GRUB:

Код: Выделить всё

kernel (fd0)/fd32.bin
 boot

Используем драйвер DPMI
Если вы хотите запустить DPMI сервер, вам необходимо сначала загрузить DPMI драйвер для того, чтобы обеспечить для сервера стандартные DOS и DPMI интерфейсы (API) (21й и 31 прерывания). По умолчанию, ядро FD32 не предоставляет этих интерфейсов. Вам необходимо сначала загрузить драйвер DPMI, и только потом саму программу DPMI.
Так образом объясняется, почему для того, чтобы запустить тест empty.exe, нам надо сделать (предполагая, что все файлы находятся в текущем каталоге):

Код: Выделить всё

x -m dpmi.o -m empty.exe fd32.bin

или же, используя GRUB (предполагая, что все файлы находятся в корневом каталоге загрузочной дискеты):

Код: Выделить всё

kernel (fd0)/fd32.bin
 module (fd0)/dpmi.o
 module (fd0)/empty.exe
 boot


Драйверы клавиатуры и консоли
Если вам понадобится запустить программу, для которой нужен ввод с клавиатуры, вам понадобится загрузить ещё два драйвера. Драйвер клавиатуры предоставляет низкоуровневый доступ к клавиатуре, в то время как дравер консоли предоставляет "помеченный" доступ к клавиатурному вводу, таким образом обеспечивая рабочий stdin. Вообще-то, драйвер консоли также предоставляет консольный вывод, реализуя поток stdout, но вы можете обойтись и без него: ядро обеспечивает отказоустойчивый stdout и без установленного драйвера консоли.
Чтобы запустить тестовую программу с использованием клавиатуры, такую как get.exe, попробуйте следущее:

Код: Выделить всё

kernel (fd0)/fd32.bin
 module (fd0)/dpmi.o
 module (fd0)/keybdrv.o
 module (fd0)/consdrv.o
 module (fd0)/get.exe
 boot


NB1: Здесь не указан синтаксис для использования x.exe, но вы легко можете сами его вывести для себя.
NB2: драйвер клавиатуры должен быть загружен раньше драйвера консоли, так как последний нуждается в сервисных функциях первого.
NB3: порядок, в котором вы загружаете dpmi.o и keybdrv.o или consdrv.o не так важен; просто загрузите их все ДО тестовой программы.
Вы можете заметить, что некоторые клавиши работают не совсем корректно. Это происходит как раз потому, что консольный драйвер в основном ещё не доделан... Взгляните на его исходники, и вы поймёте, что имеется в виду :)

Используем драйвер FAT
Теперь немного расширим и углубим наши возможности: давайте пользоваться файловой системой FAT. Тестовая программа filetest.exe проверяет на файле очерёдность fopen/fread/fclose.

Код: Выделить всё

kernel (fd0)/fd32.bin
 module (fd0)/biosdisk.o
 module (fd0)/clockdrv.o
 module (fd0)/fat.o
 module (fd0)/dpmi.o
 module (fd0)/filetest.exe
 boot

BIOSDisk (biosdisk.o) -- это драйвер диска, предоставляющий низкоуровневый (секторный) доступ к дисковым компонентам. Драйвер FAT (fat.o) должен быть загружен после драйвера BIOSDisk, потому что зависит от низкоуровневых сервисов, которые тот предоставляет. В сущности, вы должны загружать драйвер файловой системы после драйвера диска, потому что, фиксируя драйвер файловой системы, ядро FD32 заставляет его задействовать буквенные значения носителей. В будущем, возможно, будет не так.
Заметьте, что драйвер часов CMOS (clockdrv.o) грузится ДО драйвера FAT, для того, чтобы обеспечить его системной датой и временем для файловых меток времени. Загрузка clockdrv.o не обязательна, но, если вы его не загрузите, драйвер FAT сохранит пустые метки времени.
И ещё раз, загружайте dpmi.o тогда, когда вам захочется, но ДО filetest.exe.
Ну вот, теперь вы, в общем, в курсе происходящего... Теперь можете применить фантазию и попробовать новые комбинации драйверов и программ (заметьте, что после выполнения одной программы, вы можете запустить другую...).


Оригинал статьи: http://freedos-32.sourceforge.net/showdoc....page=howto-boot
Спасибо сказали:

Вернуться в «Важные и частые темы»