Valid HTML 4.01 Transitional

OS Boot Tools


Версия 3.3 Freeware Edition для некоммерческого использования: ЗАГРУЗИТЬ.

Набор инструментов, позволяющий легко организовать надёжную начальную загрузку вашей операционной системы или одной из существующих ОС в память компьютера с дискет, флеш-накопителей, жёстких дисков с разделов MBR, EBR и GPT, в том числе лежащими за пределами 2ТБ с файловыми системами FAT12/16/32, exFAT, NTFS, Minix1/2/3, Ext2/3/4, с CD/DVD-дисков с файловой системой ISO-9660 и с ISO-образов, записанных на USB-носители (USB-ISO) без процедуры установки сложных многостадийных загрузчиков.



Внимание! Некорректное или неосторожное использование данного набора может вызвать проблемы с загрузкой вашей рабочей операционной системы!

Windows 98/ME неверно работает с дисками более 128ГБ.

Для работы с дисками более 128ГБ в Windows 2K/XP должны быть установлены соответствующие пакеты обновлений и включена поддержка LBA48 в реестре.

Windows XP и предшествующие операционные системы не работают с дисками больше 2ТБ.


Введение

Несмотря на существование сложных загрузчиков и менеджеров загрузки, до сих пор не существует никакого стандарта на первичную загрузку с разных носителей и файловых систем. Поэтому разработчик операционной системы или вторичного загрузчика сталкивается с полным отсутствием программных средств, облегчающих задачу и стандартизирующих процесс и перед ним сразу же возникает задача либо разобраться с установкой и использованием сложных загрузчиков, типа GRUB2, либо разработать свой первичный загрузчик, который мог бы загрузить в память файл ядра операционной системы или вторичный загрузчик. В процессе разработки такого загрузчика возникает ряд сложностей:

  • Острая нехватка места для кода загрузчика;
  • Нехватка места в базовой памяти для образа ядра;
  • Обилие типов устройств и файловых систем;
  • Необходимость унификации способа загрузки с разных файловых систем;
  • Сложность отладки первичного загрузчика;
  • Сложность проверки работы загрузчика на разных системах;
  • Значительный риск потери данных при манипуляциях с загрузочными секторами и таблицами разделов на дисках;
  • Необходимость разбираться с тонкостями разметки дисков и функционирования файловых систем уже на ранних этапах разработки ОС;
  • Необходимость учесть в будущем такие факторы, о которых вы ещё даже не подозреваете.

Данный набор инструментов представляет собой готовое решение всех этих проблем максимально надёжным, безопасным и универсальным способом и имеет ряд уникальных функций. Так, например, ни один набор первичных загрузчиков не передаёт идентификатор раздела, не способен загружать ОС с дисков ёмкостью больше 2ТБ и не обеспечивает при этом загрузку столь больших файлов с любых поддерживаемых файловых систем. Важным достоинством набора является полная унификация загрузки независимо от используемой файловой системы и предельная простота его использования. Также сделано всё, чтобы разработчик мог немедленно приступить к разработке собственного проекта, основываясь на предоставленных заготовках. Тем не менее, со стороны пользователя предполагается знание языка ассемблера, основ функционирования ПК, разметки дисков и основ файловых систем.


История

3.3

  • Добавлена поддержка загрузчиков Microsoft Windows NT4.0, XP/64, WS2003/64, Vista, 7 утилитой mksys;
  • Добавлена загрузка с ISO-образа на USB-носителе (USB-ISO);
  • Добавлена загрузка с файловой системы exFAT;
  • Добавлена загрузка с файловой системы Ext4;
  • Добавлена загрузка с файловых систем Minix/Minix2/Minix3;
  • Добавлен обход ошибки BIOS некорректной подмены номера загрузочного диска в FAT32;
  • Устранена ошибка конвертирования ядра FreeDOS.

3.2

  • Добавлена загрузка с альтернативного раздела в MBR, EBR и GPT;
  • Загрузочный код для линейной загрузки модифицирован для установки в раздел;
  • Добавлен загрузочный код FAT32 с автоматическим выбором способа доступа;
  • Устранена ошибка загрузки с дальних секторов в разделах Ext2/Ext3 и NTFS размером больше 2ТБ;
  • Устранена ошибка загрузки на некоторых BIOS;
  • Добавлена передача загруженному ядру начала загрузочного раздела;
  • Добавлена поддержка загрузчика GRUB Legacy утилитой mksys;
  • Добавлена поддержка загрузчика GRUB4DOS утилитой mksys;
  • Добавлена поддержка загрузчика SYSLINUX утилитой mksys;
  • Добавлена поддержка ядра FreeDOS утилитой mksys;
  • Добавлено распознавание Ubuntu-версии загрузчика GRUB2 утилитой mksys;
  • Устранена ошибка флагов при создании файла Linux-версией утилиты mksys.

3.1

  • Добавлен загрузочный код для линейной загрузки секторов с диска без файловой системы;
  • Добавлена утилита конвертирования некоторых сторонних загрузчиков в формат данного набора;
  • Убрана необходимость записывать код EBR во все логические диски расширенного раздела, упрощён интерфейс MBR/EBR;
  • Увеличена надёжность распознавания родного MBR/GPT;
  • Добавлена проверка валидности номера загрузочного диска в MBR/GPT;
  • Добавлена поддержка геометрического номера загрузочного раздела;
  • kernel.asm:
    • Расширен вывод информации;
    • Добавлена правильная настройка стека в демо-ядре.

3.0

  • Добавлена поддержка Linux (утилита boot в формате ELF32);
  • Добавлена загрузка с гибридных систем MBR+FAT;
  • Добавлена загрузка с файловых систем Ext2/3;
  • Устранён ряд мелких ошибок;
  • Устранена ошибка загрузки больших файлов в FAT12/16;
  • boot.exe:
    • Полностью реорганизована внутренняя структура;
    • Добавлена возможность изменения флага активности без записи загрузочного кода;
    • Добавлена возможность удаления флага активности со всех разделов;
    • Добавлена возможность раздельной записи загрузочного кода MBR и VBR;
    • Обеспечена надёжная запись загрузочного кода в разделы, смонтированные системой;
    • В листинг добавлен подробный вывод структуры разделов с флагами и признаками;
    • Улучшено распознавание файловых систем и структуры разделов.

2.1

  • Устранён ряд ошибок в загрузке свыше границы 2ТБ в GPT и VBR;
  • Увеличено резервирование места под Extended BIOS Data Area до 12кБ в VBR;
  • Устранён ряд мелких ошибок.

2.0

  • Добавлена загрузка с файловой системы NTFS;
  • Добавлена загрузка с разделов GUID (GPT);
  • Добавлена загрузка с CD/DVD-ROM ISO-9660 в режиме No Emulation;
  • Добавлена поддержка загрузки с носителей размером более 2ТБ;
  • В MBR/EBR добавлена проверка "свой/чужой" при передаче параметров другому загрузочному сектору;
  • В VBR добавлено использование переданного значения начала раздела при наличии родного MBR/EBR;
  • boot.exe:
    • Добавлена поддержка файловой системы NTFS;
    • Добавлена поддержка таблицы разделов GUID (GPT);
    • Исправлена работа с размером сектора, отличным от 512 байт.

1.2

  • Добавлен загрузочный код расширенного раздела – EBR;
  • Добавлена поддержка загрузки с расширенных разделов в MBR;
  • Исправлено детектирование LBA в FAT12/16;
  • Все загрузочные секторы:
    • Исправлена работа с 256 головками в режиме CHS;
    • При ошибках загрузки вызывается Int 18h, в соответствии с BBS v1.01 1996.
  • boot.exe:
    • Исправлена работа с 256 головками в режиме CHS;
    • Добавлена поддержка расширенных разделов;
    • Добавлена опция выбора загрузочного раздела (включая логические диски расширенного раздела).

1.1

  • VolumeID теперь передаётся в EBX вместо CX:BX;
  • Устранена ошибка загрузки больших файлов в FAT32;
  • Все загрузочные секторы:
    • Устранена ошибка загрузки на некоторых системах;
    • Добавлен контроль верхней границы загружаемого файла в 620к;
    • Добавлено получение параметров диска BIOS для загрузки в режиме CHS независимо от способа трансляции;
    • Оптимизирован размер кода.
  • boot.exe:
    • Добавлена поддержка Vista/Windows 7;
    • Добавлена поддержка логических дисков;
    • Добавлена блокировка файла/логического диска при записи сектора;
    • Улучшено распознавание файловой системы.

1.0

  • Первый релиз.

Состав пакета

bootУтилита подготовки дисков и образов дисков для загрузки (консольный исполняемый файл Linux)
boot.exeУтилита подготовки дисков и образов дисков для загрузки (консольный исполняемый файл Windows)
ebr.binЗагрузочный код расширенного раздела
eula_en.txtЛицензионное соглашение на английском языке
eula_ru.txtЛицензионное соглашение на русском языке
exfat.binЗагрузочная запись exFAT
ext.binЗагрузочная запись Ext2/3
ext4.binЗагрузочная запись Ext4
fat12.binЗагрузочный сектор FAT12
fat16.binЗагрузочный сектор FAT16
fat32.binЗагрузочный код FAT32 с автоматическим выбором способа доступа к BIOS
fat32chs.binЗагрузочный сектор FAT32 с обращением к BIOS в режиме CHS
fat32lba.binЗагрузочный сектор FAT32 с обращением к BIOS в режиме LBA48
freedos.sysЯдро операционной системы FreeDOS
gpt.binЗагрузочный код таблицы разделов GUID (GPT)
grub.sysВторичный загрузчик GRUB Legacy
grub4dos.sysВторичный загрузчик GRUB4DOS
hybrid.binЗагрузочный код для гибридных систем MBR+FAT
iso9660.binЗагрузочный сектор CD/DVD-ROM ISO-9660 в режиме No Emulation
kernel.asmИсходный текст примера загружаемого модуля ОС
kernel.sysСкомпилированный двоичный файл примера загружаемого модуля ОС
mbr.binЗагрузочный код таблицы разделов диска
minix.binЗагрузочная запись Minix
minix2.binЗагрузочная запись Minix2
minix3.binЗагрузочная запись Minix3
mksysУтилита конвертирования загрузчиков в формат этого пакета (консольный исполняемый файл Linux)
mksys.exeУтилита конвертирования загрузчиков в формат этого пакета (консольный исполняемый файл Windows)
ntfs.binЗагрузочная запись NTFS
rawfs.binЗагрузочный код для линейной загрузки без файловой системы
readme_en.htmОписание пакета на английском языке
readme_ru.htmОписание пакета на русском языке
syslinux.sysВторичный загрузчик SYSLINUX
usbiso.binЗагрузочный сектор USB-ISO

Лицензии

Файлы "kernel.asm" и "kernel.sys" распространяются на условиях свободной лицензии WTFPL.

Файлы "freedos.sys", "grub.sys", "grub4dos.sys" и "syslinux.sys" распространяются на условиях лицензии GNU GPL v2.

Все остальные файлы этого пакета распространяются на условиях лицензионного соглашения, содержащегося в файле "eula_ru.txt".


Спецификации загрузки

  1. Максимальное упрощение процедуры установки ОС. Установка – это просто копирование файла!
  2. Поддерживается загрузка с файловых систем FAT12/16/32, NTFS, Minix1/2/3, Ext2/3/4 и ISO-9660 (как с CD/DVD-диска, так и с USB-накопителя). Поддерживаются любые допустимые параметры файловых систем FAT, NTFS, Minix и Ext2/3/4: размер сектора, размер кластера, количество скрытых секторов и копий FAT, а также другие параметры. Размер сектора, отличный от 512, не тестировался на реальном оборудовании. Возможные ограничения смотрите в описании соответствующих загрузчиков.
  3. Поддерживается загрузка с дисков, разбитых на разделы типа MBR, GUID (GPT) и гибридных систем MBR+FAT. Поддерживается загрузка с любого активного раздела, включая расширенные разделы. Количество логических дисков в расширенном разделе не ограничено.
  4. Поддерживается обращение к BIOS в режимах CHS и LBA48. Если не оговорено специально, способ доступа выбирается автоматически.
  5. Поддерживается загрузка с носителей за пределами ёмкости 2ТБ.
  6. Поддерживается загрузка с дискет, жёстких дисков, CD/DVD-дисков и USB-накопителей.
  7. Загрузчик не накладывает никаких ограничений на физическое расположение загружаемого файла на диске, расположение имени файла в директории и само имя файла. Единственное ограничение – загружаемый файл должен находиться в корневой директории. Также не рекомендуется выбирать имена файлов, содержащих более 8 символов в имени и 3 в расширении.
  8. Загрузка производится из указанного в загрузчике файла по адресу 600h в памяти ПК.
  9. Поддерживается загрузка до 620 кБ из файла. Если файл превышает этот размер, будут загружены первые 620 кБ файла. Гарантируется загрузка всего файла, если он не превышает 620 кБ.
  10. Загрузчик получает от BIOS в регистре DL номер диска, с которого произведена загрузка. Этот номер передаётся загруженной операционной системе также в регистре DL.
  11. Загруженной ОС в регистре EBX передаётся идентификатор загрузочного раздела, это требуется для корректного определения загрузочного диска/раздела для последующей подгрузки остальных компонент ОС. Расчёт идентификатора отдельно описан ниже для каждой файловой системы.
  12. Если загрузочный код MBR/EBR/GPT использован также из этого комплекта, то загруженной системе в регистре DH передаётся геометрический номер раздела, с которого произведена загрузка. Нумерация разделов MBR и GPT начинается с 1. Независимо от количества основных разделов в таблице MBR, логические диски расширенного раздела нумеруются, начиная с 5. Таким образом, если у вас, например, два основных раздела и два логических диска в расширенном разделе, они будут иметь номера 1, 2, 5 и 6, соответственно. Если произведена загрузка с диска, не разбитого на разделы или использованы сторонние загрузчики MBR/EBR/GPT, то регистр DH будет содержать 0. В силу того, что регистр DH имеет только 8 бит, при загрузке с разделов GPT с номерами 255 и более, регистр DH будет содержать неверный номер раздела, в таком случае вам необходимо ориентироваться на Boot Volume ID, переданный в регистре EBX.
  13. Загруженной системе в паре регистров ECX:EAX передаётся 64-битный номер сектора, с которого начинается загрузочный раздел. Этот номер может быть использован для последующей идентификации системного раздела или непосредственно для разбора файловой системы.
  14. Загрузчик нулевого уровня (MBR/EBR/GPT) передаёт загрузчику раздела определённый набор параметров. Регистр EAX содержит число 0x138FC3D2, по которому можно определить, что загрузчик нулевого уровня присутствует и передал валидные параметры. DL – номер загрузочного диска. DH – геометрический номер раздела в указанном выше формате. Пара регистров ECX:EBX содержит 64-битный номер сектора на диске, с которого начинается раздел. Этот номер эквивалентен количеству "скрытых секторов", которое указывается в области BPB в некоторых файловых системах.
  15. Загрузчиками нулевого уровня (MBR/EBR/GPT) обеспечивается загрузка с альтернативного раздела по удержанию клавиши Alt нажатой во время начальной загрузки. Способ указания альтернативного раздела смотрите в описании соответствующих загрузчиков и утилиты "boot".
  16. Сразу после загрузки управление передаётся на первый байт образа (по адресу 600h). Не гарантируется содержимое никаких регистров (включая ВСЕ сегментные регистры), кроме регистров EAX, EBX, ECX, DL и DH, содержимое которых описано выше.
  17. Гарантируется наличие как минимум 6.5 кБ свободной оперативной памяти для стека и данных сразу после загруженного образа. Правильную настройку стека смотрите в приложенном демо-ядре.
  18. При любых ошибках загрузки выдаётся сообщение пользователю и ожидается нажатие любой клавиши на клавиатуре. После этого осуществляется попытка загрузиться с остальных устройств по цепочке загрузки.

Описание состава пакета

kernel.asm – это исходный текст примера загружаемого образа ОС, написанного в синтаксисе NASM. Вы можете использовать этот файл в качестве исходной точки для написания своего проекта. Этот пример показывает корректную инициализацию, получение и сохранение переданных значений и отображение некоторых параметров системы. Полученные данные отображаются на экране.

kernel.sys – скомпилированный пример. Вы можете просто скопировать этот файл любым способом в корневую директорию диска, подготовленного командой boot.exe (см. далее) и затем загрузиться с этого диска.


rawfs.bin – Загрузочный код для линейной загрузки с раздела без файловой системы или с произвольной файловой системой. Для установки в раздел необходимо скорректировать в загрузочном секторе три параметра: первый сектор раздела, с которого начинать загрузку, количество байт, которое надо загрузить с диска и идентификатор раздела, который передаётся загруженному ядру в регистре EBX. Номер первого сектора занимает 8 байт (64 бита) и располагается в позиции 90…97 в формате little-endian. По умолчанию указано 1, т.е. следующий за загрузчиком сектор. Это значение отсчитывается не от начала всего диска, а от начала раздела. Количество байт для загрузки занимает 4 байта (32 бита) и располагается в позиции 98…101 в формате little-endian. Идентификатор раздела занимает 4 байта (32 бита) и располагается в позиции 102…105 в формате little-endian. По умолчанию 0. Загрузчик никак не использует байты с 2 по 89 включительно, таким образом, вы можете использовать его в тех файловых системах, которые содержат по этим адресам свои параметры.

Также этот код удобно использовать для подготовки загрузочного дискового образа с ядром операционной системы в один клик. При разработке ОС необходима частая перезагрузка компьютера с новой версией ядра, при этом каждый раз нужно создавать образ диска, который содержал бы перекомпилированное ядро. Эта задача может оказаться достаточно сложной, если вы готовите образ с полноценной файловой системой. Однако, на ранних этапах разработки ядра вам не обязательно иметь образ с файловой системой, а достаточно лишь загрузить в память скомпилированный код. При помощи этого файла вы можете предельно упростить задачу подготовки такого образа. Вам всего лишь нужно сделать образ, первый сектор которого содержит этот загрузочный код, а последующие за ним 620 кБ содержат ваше ядро. Например, для подготовки образа для виртуальной машины Bochs вы можете сделать файл hdd.asm со следующим содержимым:

	incbin	"rawfs.bin"
	incbin	"kernel.sys"
	times	630*2*512-($-$$)	db	0

затем после сборки ядра скомпилировать его ассемблером NASM:

nasm hdd.asm -o hdd.img

добавить в конфигурационный файл Bochs следующие строки:

ata0-master: type=disk, path=hdd.img, cylinders=2, heads=10, spt=63, translation=none
boot: disk

и запустить Bochs. Весь процесс можно автоматизировать при помощи make-файла. Если ваше ядро маленькое, и вы желаете оптимизировать процесс загрузки, вы можете точно указать загрузчику размер вашего ядра в байтах и вписать его в файл в позиции 98…101 в формате little-endian. В этому случае загрузочный код посчитает, сколько секторов надо загрузить и загрузит только необходимое. Соответствующий код в формате NASM будет выглядеть так:

	incbin	"rawfs.bin", 0, 98
	dd	Kend-Kstart
	incbin	"rawfs.bin", 102
Kstart:	incbin	"kernel.sys"
Kend:	times	630*2*512-($-$$)	db	0

Полученный образ "hdd.img" помимо проверки в виртуальной машине вы можете записать в первые сектора flash-диска и загрузить его на реальном оборудовании.

fat12.bin, fat16.bin – загрузочные сектора для файловых систем FAT12 и FAT16. Помните, что байты с 3 по 61 включительно являются областью параметров BIOS и файловой системы. Эта область требует коррекции при создании файловой системы. Если вы используете имя файла ОС, отличное от KERNEL.SYS (имя по умолчанию), его необходимо вписать заглавными символами в позиции 62…72 в следующем формате: короткое имя файла, дополненное пробелами до 8, затем без точки расширение, дополненное до 3. Всего 11 символов.

fat32.bin, fat32chs.bin, fat32lba.bin – загрузочные сектора для файловой системы FAT32 в автоматическом режиме доступа, а также в режимах доступа CHS и LBA48, соответственно. Помните, что байты с 3 по 89 включительно являются областью параметров BIOS и файловой системы. Эта область требует коррекции при создании файловой системы. Если вы используете имя файла ОС, отличное от KERNEL.SYS (имя по умолчанию), его необходимо вписать двоичным редактором заглавными символами в позиции 90…100 в следующем формате: короткое имя файла, дополненное пробелами до 8 символов, затем без точки расширение, дополненное пробелами до 3 символов. Всего 11 символов. Версия загрузчика fat32.bin занимает два сектора при размере сектора 512 байт, поэтому необходимо разместить второй сектор где-то в зарезервированной области файловой системы. Количество зарезервированных секторов указано в байтах 14…15, именно в этих пределах осуществляется поиск второго сектора загрузчика. Имейте ввиду, что в зарезервированной области как минимум два сектора заняты, – это сектор с дополнительной информацией о файловой системе, его номер указан в байтах 48…49, и резервная копия загрузочного сектора, номер сектора указан в байтах 50…51. Второй сектор загрузчика может располагаться в любом свободном секторе, но желательно размещать его как можно ближе к началу раздела. Обычно, резервная копия загрузочного сектора находится в 6-м секторе, а дополнительная информация о файловой системе в 1-м, соответственно, наилучшим выбором будет размещение расширения загрузчика в секторе номер 2. Если файловая система отформатирована так, что зарезервированных секторов не хватает для размещения этой версии загрузчика, необходимо использовать CHS или LBA версию загрузчика. Если сектор имеет размер 1 кБ или более, весь загрузочный код следует целиком разместить в одном секторе.

exfat.bin – загрузочная запись для файловой системы exFAT. Помните, что байты с 64 по 119 включительно являются областью параметров файловой системы. Эта область требует коррекции при создании файловой системы. Если вы используете имя файла ОС, отличное от KERNEL.SYS (имя по умолчанию), его необходимо вписать двоичным редактором в позиции 122…134 в следующем формате: имя файла до 8 символов, затем без пробелов точка, затем до 3 символов расширения. Имя должно заканчиваться нулевым байтом. Всего не более 13 символов, включая нулевой байт конца строки. Файловая система exFAT позволяет иметь кластеры большого размера, однако, в силу особенностей архитектуры процессора, загрузчиком поддерживается размер кластера не больше 32кб. Необходимо иметь ввиду, что вся загрузочная запись файловой системы exFAT защищена от изменений, и после любого изменения данных в ней необходимо пересчитать контрольную сумму в соответствии с документацией по ссылке в конце данной справки. Также необходимо обновить резервную копию загрузочной записи.

ntfs.bin – загрузочная запись для файловой системы NTFS. Помните, что байты с 3 по 83 включительно являются областью параметров BIOS и файловой системы. Эта область требует коррекции при создании файловой системы. Если вы используете имя файла ОС, отличное от KERNEL.SYS (имя по умолчанию), его необходимо вписать двоичным редактором в позиции 84…96 в следующем формате: имя файла до 8 символов, затем без пробелов точка, затем до 3 символов расширения. Имя должно заканчиваться нулевым байтом. Всего не более 13 символов, включая нулевой байт конца строки. Т.к. загрузочная запись NTFS имеет 8-байтный идентификатор раздела, он не передаётся целиком. Вместо этого, регистр EBX содержит результат операции XOR (исключающее "или") между старшей и младшей половинами идентификатора раздела. Не поддерживается загрузка сжатых и прореженных (sparse) файлов.

ext.bin, ext4.bin, minix.bin, minix2.bin, minix3.bin – загрузочные записи для файловых систем Ext2/3, Ext4 и Minix1/2/3. Байты со 2 по 11 включительно являются областью параметров загрузчика. Эта область требует коррекции при создании файловой системы. Байты 2…3 должны содержать размер сектора в байтах в формате little-endian (Intel). Байты 4…11 должны содержать 64-битное значение количества скрытых секторов (секторов, предшествующих разделу) также в формате little-endian. Количество скрытых секторов можно не вписывать, если вы используете загрузчик MBR/GPT из этого же комплекта. Если вы используете имя файла ОС, отличное от KERNEL.SYS (имя по умолчанию), его необходимо вписать двоичным редактором в позиции 12…24 в следующем формате: короткое имя файла до 8 символов, затем без пробелов точка, затем до 3 символов расширение. Имя должно заканчиваться нулевым байтом. Всего не более 13 символов, включая нулевой байт конца строки. Т.к. суперблок Ext2 версии 1.0 и старше имеет 16-байтный идентификатор раздела, он не передаётся целиком. Вместо этого, регистр EBX содержит результат операции XOR (исключающее "или") между четырьмя 32-битными словами, составляющими идентификатора раздела. В случае, если результат операции XOR равен нулю (в более ранних версиях файловой системы идентификатор раздела отсутствует), загрузочный код в регистре EBX передаёт контрольную сумму CRC32 всего суперблока (байты 1024…2047 раздела). Загрузчики Minix всегда передают контрольную сумму суперблока. Алгоритм расчёта контрольной суммы приведён ниже. Загрузчик Ext4 не поддерживает файловые системы с более, чем 2^32 блоками (больше 4ТБ при размере блока 1кБ).

mbr.bin, ebr.bin – код загрузочных секторов для основной и расширенной таблицы разделов. Если вы хотите задать альтернативный загрузочный раздел, то его номер нужно указать в нулевом секторе в байте по адресу 0x1BD (445), сразу перед таблицей разделов. Нумерация разделов для альтернативной загрузки начинается с 1. Если этот байт содержит 0, альтернативная загрузка отключена. Обратите внимание, что в нулевом секторе (MBR) для альтернативной загрузки указывается только один из основных разделов или весь расширенный раздел. Логический диск в расширенном разделе для альтернативной загрузки нужно указывать в нулевом секторе расширенного раздела (EBR) по тому же адресу 0x1BD (445). Номер альтернативного логического диска указывается, также начиная с 1.

hybrid.bin – код загрузочного сектора для первого сектора диска с гибридной файловой системой. Гибридная файловая система – это такой способ форматирования диска, при котором он одновременно и разбит, и не разбит на разделы, в зависимости от интерпретации содержимого самого первого сектора. Этот сектор одновременно имеет и таблицу разделов, и область параметров файловой системы раздела. Если мы рассматриваем диск, как разбитый на разделы, то начало раздела указывает на загрузочный сектор раздела с параметрами файловой системы. Если же мы считаем диск не разбитым, то первый сектор диска содержит копию параметров файловой системы с некоторыми изменениями, так, чтобы можно было корректно работать с данными, записанными на диске. Для корректной работы в области данных ФС увеличивается количество зарезервированных секторов, так, чтобы покрыть всю область диска до начала раздела, и, в случае системы FAT32, изменяются указатели на информационный сектор (FS info) и на резервную копию загрузочного сектора. При записи загрузочного кода в первый сектор такого диска мы теряем гибридность независимо от того, какой загрузочный код мы в него запишем – MBR или VBR. Чтобы сохранить гибридную разметку необходимо сохранить и область данных ФС, и таблицу разделов. Для этих целей и предусмотрен этот специальный загрузочный код. Чтобы его записать на диск, необходимо перенести в него байты 3…89 (область параметров BIOS и файловой системы) и 440…511 (идентификатор диска, таблица разделов и загрузочная сигнатура) из имеющегося первого сектора диска.

gpt.bin – код загрузочного сектора для таблицы разделов GUID. Код вписывается в защитную запись MBR, самый первый сектор диска. GPT разрабатывалась для поддержки дисков размером более 2ТБ. Теоретически, для работы с разделами GUID необходимо, чтобы BIOS материнской платы компьютера поддерживал технологию EFI. Однако, эта технология всё ещё недостаточно распространена. Этот код предназначен для загрузки с дисков GPT, в системах, не поддерживающих EFI. Если вы хотите задать альтернативный загрузочный раздел, то его номер нужно указать в нулевом секторе (защитный MBR) в байте по адресу 0x1BD (445), сразу перед таблицей разделов. Нумерация разделов для альтернативной загрузки начинается с 1. Если этот байт содержит 0, альтернативная загрузка отключена.

iso9660.bin – код загрузочного сектора для загрузки операционной системы непосредственно с компакт-диска без использования режимов эмуляции дисковода или жёсткого диска. Подробней о создании загрузочного компакт-диска см. ниже. Если вы используете имя файла ОС, отличное от KERNEL.SYS (имя по умолчанию), его необходимо вписать двоичным редактором в позиции 2…14 в следующем формате: имя файла, затем точка, расширение и нулевой байт признака конца строки. Всего не более 13 байт, включая нулевой байт конца строки. Пробелы и спецсимволы в имени и расширении файла не допустимы. Допустимый набор символов включает в себя буквы латинского алфавита, цифры и символ подчёркивания. Поскольку компакт-диски не имеют простого уникального значения, которое можно было бы использовать в качестве короткого идентификатора раздела, загрузочный код в регистре EBX передаёт контрольную сумму CRC32 всего первичного дескриптора раздела компакт-диска. Контрольная сумма рассчитывается в соответствии с приведённым ниже алгоритмом.

usbiso.bin – загрузочный сектор USB-ISO для загрузки ISO-образа с USB-накопителя. Для создания такого универсального ISO-образа необходимо вписать этот сектор в первые 512 байт загрузочного ISO-образа, после чего полученный образ может быть как записан на компакт-диск, так и посекторно на любой USB-накопитель. В этом случае с накопителя можно будет загружаться. Эта технология исключительно удобна для распространения установочных компакт-дисков или LiveCD в виде ISO-образов, которые можно использовать не только на компьютерах, оснащённых CD/DVD-приводами, но и на нетбуках, которые не имеют таких приводов. Данный загрузочный код не грузит ядро самостоятельно, я является вспомогательным кодом для загрузчика ISO9660. Таким образом, ISO-образ обязательно должен быть загрузочным сам по себе. Загрузочный код USB-ISO не выбирает файл, который нужно грузить и не нуждается ни в каких настройках. Вместо этого он загружает в соответствии со спецификациями El Torito загрузочный сектор ISO9660 и передаёт ему управление. Теоретически, этот загрузчик может быть использован для загрузки образов компакт-дисков имеющих чужой загрузочный код в режиме No Emulation, однако для этого сторонний код должен быть адаптирован для работы с секторами размером 512 байт. Загрузчик ISO9660 из этого комплекта полностью адаптирован для работы в этом режиме и может быть непосредственно использован. Для защиты данных на USB-носителе от случайной перезаписи загрузчик представлен как главная загрузочная запись MBR с одним скрытым разделом, который охватывает весь диск. Теоретически, на таком USB-накопителе можно сделать дополнительные разделы на свободном пространстве, но для этого необходимо сократить размер скрытого раздела до размера ISO-образа. Эта задача очень просто решается с использованием утилиты "boot.exe". Достаточно выполнить команду "boot -b -f cd.iso" и утилита автоматически впишет в файл образа cd.iso загрузочный код USB-ISO и настроит размер скрытого раздела.

Описанные выше файлы вы можете использовать в своей операционной системе в рамках лицензионного соглашения (см. eula_ru.txt) для генерации и форматирования файловых систем.


boot, boot.exe – консольные программы для Linux и Windows, предназначенные для подготовки выбранного диска или файлового образа для загрузки ОС или вторичного загрузчика, удовлетворяющего приведённым выше спецификациям. Существующие операционные системы, включая Windows и Linux, напрямую не удовлетворяет этим спецификациям, поэтому ни в коем случае не применяйте эти программы к диску с вашей рабочей системой! Описание процесса подготовки смотрите ниже.

mksys, mksys.exe – консольные программы для Linux и Windows, предназначенные для конвертирования некоторых вторичных загрузчиков в формат, поддерживаемый этим пакетом. Несмотря на то, что операционные системы Windows и Linux не могут быть непосредственно загружены этими загрузчиками, некоторые версии загрузчика GRUB2 могут быть загружены после их конвертирования в необходимый формат. Зачем это нужно? Существующие загрузчики Linux (LILO, SysLinux, GRUB, GRUB2) требуют обязательного процесса установки после любого их обновления. В процессе установки установщик определяет их физическое расположение, после чего модифицирует загрузочные записи на диске и сам файл загрузчика, чтобы он мог загрузиться. Полученный файл, будучи привязанным к определённому месту, не может быть перемещён в другое место на диске, а также такой диск не может быть пофайлово скопирован с сохранением возможности загрузки с него. Помимо этих ограничений есть риск того, что установщик по каким-либо причинам не сможет осуществить привязку новой версии загрузчика, после чего с данного диска будет невозможно загрузиться. Использование конвертированного загрузчика вместе с этим пакетом устраняет все упомянутые ограничения и позволяет безопасно обновлять загрузчик без каких-либо привязок. В данной версии пакета поддерживается конвертирование следующих загрузчиков и ОС: ядра FreeDOS сборок 2024-2041, GRUB версий 0.94-0.97, GRUB2 версий 1.96-2.00, GRUB4DOS версий 4.1-4.4 и SYSLINUX версий 4.05-4.06. Для конвертирования загрузчика GRUB2 необходимо взять исходный файл загрузчика, например, /boot/grub/core.img, и выполнить следующую команду:

% mksys -i core.img -o grub2.sys

В случае удачи утилита сообщит версию распознанного загрузчика и создаст файл "grub2.sys". Полученный файл надо поместить в корневую директорию загрузочного диска Linux и выполнить процедуру подготовки диска к загрузке утилитой "boot" с указанием имени для загрузки "grub2.sys". Процедура подготовки диска выполняется однократно и не требуется при дальнейших обновлениях загрузчика. Для дальнейшего обновления вторичного загрузчика будет достаточно только заменить файл "grub2.sys" в корне диска на новую версию.

Для семейства ОС Microsoft Windows вам необходимо конвертировать файл "ntldr" из корня загрузочного диска для операционных систем NT4.0, XP, WS2003, XP64, или файл "bootmgr" для операционных систем Vista и Windows 7.

В случае ОС FreeDOS вам необходимо конвертировать файл "kernel.sys".

В случае загрузчика GRUB Legacy вам необходимо конвертировать файл "stage2".

В случае загрузчика GRUB4DOS вам необходимо конвертировать файл "grldr" (предпочтительней) или "grub.exe".

В случае загрузчика SYSLINUX вам необходимо конвертировать файл "ldlinux.bin" из директории "core" проекта.

Внимание! Т.к. в архиве не сохранены атрибуты файлов *nix, перед использованием Linux-версии утилиты "mksys" вам необходимо добавить права доступа на исполнение, например, так:

% chmod +x mksys

Внимание! Загрузочный (boot) диск может отличаться от системного (root) диска. Этот факт необходимо учесть при размещении полученного загрузочного файла и подготовке диска к загрузке.

freedos.sys – Ядро операционной системы FreeDOS сборки 2041 с включённой поддержкой FAT32 для процессоров 386+, сконвертированное утилитой mksys и готовое к загрузке. При использовании этого файла не забудьте добавить на диск другие файлы, необходимые для работы операционной системы. Как минимум, ещё нужен файл "command.com". Ссылка на проект в конце страницы.

grub.sys – Вторичный загрузчик GRUB Legacy версии 0.97, сконвертированный утилитой mksys и готовый к загрузке. При использовании этого файла не забудьте создать файл "boot/grub/menu.lst" в соответствии с документацией GRUB. Ссылка на проект в конце страницы.

grub4dos.sys – Вторичный загрузчик GRUB4DOS версии 4.4, сконвертированный утилитой mksys и готовый к загрузке. При использовании этого файла не забудьте создать файл "boot/grub/menu.lst" в соответствии с документацией GRUB4DOS. Ссылка на проект в конце страницы.

syslinux.sys – Вторичный загрузчик SYSLINUX версии 4.06, сконвертированный утилитой mksys и готовый к загрузке. При использовании этого файла не забудьте добавить в корневую директорию необходимые модули и создать файл "syslinux.cfg" в соответствии с документацией SYSLINUX. Ссылка на проект в конце страницы.

Сконвертированные загрузчики Microsoft Windows не идут в комплекте, т.к. они являются частью ОС Windows и не являются свободно распространяемым продуктом. Вам необходимо конвертировать их самостоятельно. При конвертировании не удаляйте оригинальный файл до тех пор, пока не убедитесь, что сконвертированный загрузчик успешно грузится. Не забудьте сделать резервную копию важных данных с диска.


Подготовка дисков к загрузке

Подготовка диска или файлового образа к загрузке осуществляется при помощи утилиты "boot.exe" под ОС Windows или "boot" под ОС Linux.

Внимание! Т.к. в архиве не сохранены атрибуты файлов *nix, перед использованием Linux-версии утилиты "boot" вам необходимо добавить права доступа на исполнение, например, так:

% chmod +x boot

В процессе работы утилита "boot" определит структуру выбранного носителя, тип файловой системы, выберет и запишет на него соответствующий загрузочный код, не трогая саму файловую систему и не уничтожая на ней данные. Если диск разбит на разделы, программа выберет для загрузки активный раздел. Если активного раздела нет, вам необходимо будет явно указать, какой раздел пометить активным, этот раздел и будет подготовлен к загрузке. После того, как вы один раз подготовили раздел к загрузке, нет необходимости в повторной подготовке. Просто копируете файл операционной системы любым доступным способом в корневой каталог диска, и он будет загружен.

Использование программы в ОС Windows:

> boot [options]

В ОС Linux:

% boot [options] [devices] [files]

Доступные опции для ОС Windows:

-v       Показать версию программы
-l       Показать список доступных устройств и разделов
-d N     Открыть устройство/диск N
         N должно быть числом для физического устройства
         или буквой для флоппи-диска или логического диска
-f FILE  Открыть образ диска из файла
-a N     Сделать раздел номер N активным, счёт начинается с 1
         Задайте 0 для удаления признака активности
         Используйте дважды для задания альтернативного загрузочного раздела
-b       Записать загрузочный код раздела
-m       Записать главный загрузочный код (MBR/GPT)
-n NAME  Задать имя файла для загрузки boot-кодом. По умолчанию KERNEL.SYS

Для Linux доступны все те же опции кроме двух – -d и -f. Вместо указания устройства или файла в опциях, нужно просто написать его в командной строке. Разница обусловлена тем, что в системе Linux все устройства доступны в том же пространстве имён, что и все остальные файлы, и не возникает необходимости уточнения, работаете ли вы с файлом с именем "A", или с диском A.

Для работы с дисками сначала выведите список всех доступных устройств в системе:

> boot -l

Помните, что номера или названия дисков могут поменяться после перезагрузки операционной системы!

В выведенном списке будет представлена подробная информация обо всех разделах, о том, какой раздел является активным, какие разделы уже содержат загрузочный код и какой файл будет загружен.

Затем определите номер диска, с которым вы хотите работать и укажите дополнительные опции для конкретных действий, например:

> boot -d4 -b
для записи загрузочного кода в активный раздел диска 4 в ОС Windows. Для Linux командная строка будет выглядеть, например, так:
% boot /dev/sdd -b

Никогда не задавайте диск с вашей рабочей ОС! Помните, что настоящий загрузочный диск может отличаться от диска, куда установлена ваша копия Windows! Хорошей идеей будет сохранить системные области диска при помощи любого двоичного редактора дисков, например, DMDE. Эта операция может потребовать углублённые знания структуры дисков.

Если диск разбит на разделы, то вам, возможно, потребуется записать не только загрузочный код файловой системы, но и главный загрузочный код при помощи опции -m, а также указать активный раздел при помощи опции -a.

Помимо основного (активного) загрузочного раздела вы можете указать альтернативный раздел для загрузки. Это делается при помощи двукратного использования опции -a. Первое использование задаст основной загрузочный раздел, второе – альтернативный. В этом случае если в процессе начальной загрузки системы нажать и удерживать клавишу Alt, будет произведена загрузка с альтернативного раздела. Как основным, так и альтернативным разделом может быть указан любой раздел или логический диск без каких-либо ограничений.

Если вам необходимо загрузиться с образа диска в вашем эмуляторе или виртуальной машине, введите, например, следующую команду:

> boot -f floppy.img -b
или для ОС Linux:
% boot floppy.img -b

В самом простом случае вы можете попробовать подготовить для загрузки дискету. Это делается следующей командой:

> boot -dA -b
или для ОС Linux:
% boot /dev/fda -b

После этого скопируйте на дискету файл kernel.sys из архива и загрузитесь с дискеты.


Загрузка с компакт-диска

Для создания загрузочного компакт-диска вам потребуется скачать набор утилит для работы с CD – CDRTools. Для операционной системы Linux можно скачать непосредственно с сайта разработчика: http://cdrecord.berlios.de/. Для операционной системы Windows надо скачать Cygwin-порт, – архив скомпилированных под Windows файлов. Лучше его скачать отсюда: http://smithii.com/cdrtools, т.к. на сайте разработчика имеется порт только старой версии. Из архива вам потребуются два файла: mkisofs.exe (программа подготовки ISO-образа диска) и cygwin1.dll (POSIX-библиотека для запуска Unix-ориентированных приложений в среде Windows). Распаковываем эти файлы в директорию проекта или в любую директорию, на которую указывает путь поиска исполняемых файлов. Затем в директории проекта создаём папку с файлами образа компакт-диска, например, cdimage. В эту папку копируем загрузочный сектор iso9660.bin и файл ядра вашей операционной системы kernel.sys. Если название файла ядра ОС отличается от принятого по умолчанию, не забудьте поправить его в загрузочном секторе, в соответствии с инструкциями выше, в описании сектора. После всех подготовительных процедур запускаем создание образа диска:

> mkisofs -b iso9660.bin -no-emul-boot -o cd.iso cdimage

Это минимальная команда, позволяющая нам создать ISO-образ загрузочного диска. Здесь опция -b задаёт файл загрузочного сектора, -no-emul-boot указывает режим работы загрузочного сектора. Эти опции обязательны.

В образе диска появится дополнительный файл BOOT.CAT – это служебный файл, в соответствии со спецификацией El Torito, указывающий BIOS, где искать наш загрузочный сектор, и в каком режиме его запускать. Этот файл и загрузочный сектор совершенно не нужны конечному пользователю для просмотра и системе после загрузки, поэтому их можно скрыть при помощи дополнительных опций: -hide boot.catalog и -hide iso9660.bin. Система прекрасно будет работать без них.

Файловая система ISO-9660 накладывает жёсткие ограничения на имена файлов. Для большей свободы мы можем записать диск с расширением файловой системы Rock Ridge. Это делается при помощи опции -r. Однако, Rock Ridge больше ориентирован на Unix-системы, а Windows-системы используют расширение файловой системы Joliet. Чтобы записать диск с этим расширением, используем опцию -J. Но после добавления этой опции можно заметить, что файлы boot.catalog и iso9660.bin опять появились. Это обусловлено тем, что, в отличие от расширения Rock Ridge, в расширении Joliet имена файлов хранятся не в дополнительных полях основной структуры диска, а в отдельной структуре, специфичной только для Joliet. Для того, чтобы скрыть их из пространства имён Joliet используем опции: -hide-joliet boot.catalog и -hide-joliet iso9660.bin, соответственно. Теперь мы полностью подготовили загрузочный диск без ограничения на имена файлов и их атрибуты. Вы можете проверить полученный образ на работоспособность в PC-эмуляторе Bochs, а затем записать его на диск в любой программе, поддерживающей запись ISO-образов дисков на болванки.


Расчёт контрольной суммы CRC32

Здесь приводится оптимизированный по скорости пример кода на языке "C" для расчёта контрольной суммы CRC32 на основе примитивного полинома 0xEDB88320, принятого в качестве стандарта для сетей передачи данных.
unsigned long CRCTable[256] = {
  0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
  0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
  0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
  0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
  0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
  0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
  0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
  0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
  0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
  0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
  0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
  0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
  0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
  0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
  0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
  0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
  0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
  0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
  0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
  0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
  0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
  0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
  0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
  0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
  0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
  0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
  0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
  0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
  0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
  0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
  0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
  0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
};

unsigned long CalculateCRC (const unsigned char *buf, size_t size) {
  unsigned long  CRC=0xFFFFFFFF;
  while ( size ) {
    CRC = (CRC>>8) ^ CRCTable[(unsigned char)CRC ^ *buf];
    ++buf;
    --size;
  }
  return CRC^0xFFFFFFFF;
}

Возможные проблемы

В случае проблем с загрузкой вашей ОС...

Убедитесь, что при установке загрузчика вы указали правильное имя файла. Убедитесь, что файл, указанный для загрузки, действительно присутствует на диске и находится в корне файловой системы.

Попробуйте загрузить приложенный демо-образ. Если задано другое имя для загрузки, просто переименуйте демо-файл. Если демо-файл работает корректно, скорей всего, проблема в вашей ОС.

Если демо-файл не грузится, убедитесь, что диск действительно подготовлен для загрузки. Для этого вы можете выполнить команду листинга устройств "boot -l" и посмотреть, присутствуют ли метки "boot" и "active" на необходимом разделе. Там же можно увидеть, какой именно файл будет загружен с каждого раздела. Помимо этого, необходимо убедиться, что главная загрузочная запись имеет признак "bootable".

Если демо-файл грузится, но не грузится ваше ядро. Скорей всего, вы не настроили сегментные регистры (включая CS), не задали корректно директиву "org" или не настроили стек. Наилучшим вариантом в данном случае будет или последовательное изменение приложенного демо-ядра под ваши цели, или перенос инициализационного кода целиком из демо-ядра в ваше ядро.


Ссылки

25.09.13