OSDev http://osdev.su/ |
|
Самопальные загрузчики http://osdev.su/viewtopic.php?f=18&t=543 |
Страница 1 из 8 |
Автор: | DJ PhoeniX [ 03 май 2012, 19:30 ] |
Заголовок сообщения: | Самопальные загрузчики |
Вот читаю я форумы, мануалы, и не понимаю одной вещи: Народ, а откуда столько желания писать загрузчики? Свои собственные, со своими багами и своими недоработками? Взять ту же Малинку Станислава (чувак, не в обиду). В инструкции - "запишите бинарник на флешку". У меня флешка всего одна, на 32 гигабайта, данных на ней - довольно много, и терять всё это ради одного теста - это как-то... ну, нелогично что ли? А потестить хочется, скриншоты сочные. Так о чём это я... Загружаемый образ можно сделать очень легко - написать несколько строк на ассемблере: Код: format binary org 0x200000 public _start section '.text' _start: jmp _multiboot_entrypoint align 4 _multiboot_header: dd 0x1BADB002 dd 0x00010003 dd -(0x1BADB002 + 0x00010003) dd _multiboot_header dd _start dd _end dd _end dd _multiboot_entrypoint align 4 _multiboot_entrypoint: ; Код операционки _end: И ваша операционка будет спокойно загружаться любым multiboot-совместимым загрузчиком (будь то lilo, grub, syslinux), а управление вы будете получать уже в защищённом режиме на _multiboot_entrypoint. Причём установка любого такого загрузчика не ломает текущую файловую систему, и флешка сохраняет своё прямое назначение. Если немного подумать, то можно и разбить код операционки на много-много файлов, и собирать линковщиком (как сделал я). Так вопрос... Нафига создавать свои загрузчики? |
Автор: | grindars [ 03 май 2012, 19:37 ] |
Заголовок сообщения: | Re: Самопальные загрузчики |
Тот же вопрос. У меня ядро 64-битное, и 32-битный мультибутовый стаб его бы несколько уродовал, поэтому я использую syslinux. Гружу им бутстрап в формате com32, который с помощью syslinux-ового же API загружает ядро в ELF64, подготавливает данные для него, строит начальные таблицы страниц и запускает. |
Автор: | DJ PhoeniX [ 03 май 2012, 19:41 ] |
Заголовок сообщения: | Re: Самопальные загрузчики |
grindars, я бы всё таки грузился в х32, дёргал cpuid на предмет поддержки лонгмода, и только после этого прыгал в него. Так у тебя будет хотя бы шанс намекнуть юзеру, что пора апгрейдиться. |
Автор: | grindars [ 03 май 2012, 19:43 ] |
Заголовок сообщения: | Re: Самопальные загрузчики |
Так бутстрап и грузится в x32, дергает CPUID и сообщает юзеру. Он вообще юзер-френдли ![]() |
Автор: | Bargest [ 03 май 2012, 20:46 ] |
Заголовок сообщения: | Re: Самопальные загрузчики |
У самопальных загрузчиков есть один несомненный плюс. Старт происходит в х16, поэтому можно использовать функции биоса для установки видеорежимов, чтения с диска и получения карты памяти без всяких v86 и эмуляторов. А копаться в творениях сообщества опенсорца чтобы выполнить такие операции не всегда есть желание. У меня загрузчик заключается в ~350-байтовой MBR-ке, которая грузит первый файл FAT32. До того момента, когда понадобится нормальный загрузчик, будет эта затычка. А когда понадобится - уже подумаю, что стоит делать: брать мультибут (и какой из них) или же написать небольшой загрузчик только с необходимыми функциями. Благо в килобайте кода в х16 сложно допустить какие-то фатальные ошибки. |
Автор: | grindars [ 03 май 2012, 20:50 ] |
Заголовок сообщения: | Re: Самопальные загрузчики |
У syslinux есть API. Задаете номер прерывания, входные регистры, вызываете его функцию, он выходит в реальный режим, вызывает биос, возвращается в защищенный и вы получаете выходные. Достаточно удобно, и при этом можно работать в 32-битном режиме и не заморачиваться ограничениями на размер, что актуально, если загрузчик сложный. И да, всё это описано в документации, так что копаться нигде не надо. И его собственное API для работы с ФС позволяет работать одинаково где угодно - хоть с жесткого диска, хоть с флешки, хоть по сети. |
Автор: | Bargest [ 03 май 2012, 20:56 ] |
Заголовок сообщения: | Re: Самопальные загрузчики |
Всё равно любой мультибут накладывает ограничения. Грузит только выше определенного адреса, стартует в х32 и делает ещё большую кучу лишней работы. Как по мне, система должна стоять на своём разделе диска. Одна система - один раздел. Ставить десяток систем на один раздел - имхо фича бесполезная. Если использовать такой подход, то смысл в мультибуте почти полностью отпадает. Выбор раздела с лихвой умещается в MBR, а на разделах уже свои бутсекторы, которые могут делать что угодно. Поэтому я не хочу лишний раз накладывать на себя ограничения. |
Автор: | grindars [ 03 май 2012, 21:03 ] |
Заголовок сообщения: | Re: Самопальные загрузчики |
Грузит в первое свободное место в ОЗУ, режим - на выбор: есть 16 бит и 32 бита. |
Автор: | Bargest [ 03 май 2012, 21:05 ] |
Заголовок сообщения: | Re: Самопальные загрузчики |
А сколько сам в памяти занимает? В смысле где находится это первое свободное место? |
Автор: | grindars [ 03 май 2012, 21:08 ] |
Заголовок сообщения: | Re: Самопальные загрузчики |
Зависит от варианта. Полный сетевой - кил 30, наверное. Адреса не определены: 16-битные исполняемые файлы - формата COM, т.е. грузятся по смещению 0x100 в любой сегмент, а 32-битные должны быть самоперемещаемыми. |
Страница 1 из 8 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |