|
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
3.2
3.1
3.0
2.1
2.0
1.2
1.1
1.0
Состав пакета
ЛицензииФайлы "kernel.asm" и "kernel.sys" распространяются на условиях свободной лицензии WTFPL. Файлы "freedos.sys", "grub.sys", "grub4dos.sys" и "syslinux.sys" распространяются на условиях лицензии GNU GPL v2. Все остальные файлы этого пакета распространяются на условиях лицензионного соглашения, содержащегося в файле "eula_ru.txt". Спецификации загрузки
Описание состава пакета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 |