OSDev

для всех
Текущее время: 24 апр 2024, 18:49

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 79 ]  На страницу 1, 2, 3, 4, 5 ... 8  След.
Автор Сообщение
 Заголовок сообщения: Самопальные загрузчики
СообщениеДобавлено: 03 май 2012, 19:30 
Аватара пользователя

Зарегистрирован: 06 мар 2012, 20:05
Сообщения: 130
Откуда: Санкт-Петербург
Вот читаю я форумы, мануалы, и не понимаю одной вещи:

Народ, а откуда столько желания писать загрузчики? Свои собственные, со своими багами и своими недоработками?

Взять ту же Малинку Станислава (чувак, не в обиду). В инструкции - "запишите бинарник на флешку". У меня флешка всего одна, на 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. Причём установка любого такого загрузчика не ломает текущую файловую систему, и флешка сохраняет своё прямое назначение. Если немного подумать, то можно и разбить код операционки на много-много файлов, и собирать линковщиком (как сделал я).
Так вопрос... Нафига создавать свои загрузчики?

_________________
We are back with a hard even better than before [D-Block & S-Te-Fan – Evolutionz {Ran-D remix}]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самопальные загрузчики
СообщениеДобавлено: 03 май 2012, 19:37 

Зарегистрирован: 22 май 2007, 15:29
Сообщения: 283
Тот же вопрос. У меня ядро 64-битное, и 32-битный мультибутовый стаб его бы несколько уродовал, поэтому я использую syslinux. Гружу им бутстрап в формате com32, который с помощью syslinux-ового же API загружает ядро в ELF64, подготавливает данные для него, строит начальные таблицы страниц и запускает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самопальные загрузчики
СообщениеДобавлено: 03 май 2012, 19:41 
Аватара пользователя

Зарегистрирован: 06 мар 2012, 20:05
Сообщения: 130
Откуда: Санкт-Петербург
grindars, я бы всё таки грузился в х32, дёргал cpuid на предмет поддержки лонгмода, и только после этого прыгал в него. Так у тебя будет хотя бы шанс намекнуть юзеру, что пора апгрейдиться.

_________________
We are back with a hard even better than before [D-Block & S-Te-Fan – Evolutionz {Ran-D remix}]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самопальные загрузчики
СообщениеДобавлено: 03 май 2012, 19:43 

Зарегистрирован: 22 май 2007, 15:29
Сообщения: 283
Так бутстрап и грузится в x32, дергает CPUID и сообщает юзеру. Он вообще юзер-френдли :).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самопальные загрузчики
СообщениеДобавлено: 03 май 2012, 20:46 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
У самопальных загрузчиков есть один несомненный плюс. Старт происходит в х16, поэтому можно использовать функции биоса для установки видеорежимов, чтения с диска и получения карты памяти без всяких v86 и эмуляторов. А копаться в творениях сообщества опенсорца чтобы выполнить такие операции не всегда есть желание.
У меня загрузчик заключается в ~350-байтовой MBR-ке, которая грузит первый файл FAT32. До того момента, когда понадобится нормальный загрузчик, будет эта затычка. А когда понадобится - уже подумаю, что стоит делать: брать мультибут (и какой из них) или же написать небольшой загрузчик только с необходимыми функциями. Благо в килобайте кода в х16 сложно допустить какие-то фатальные ошибки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самопальные загрузчики
СообщениеДобавлено: 03 май 2012, 20:50 

Зарегистрирован: 22 май 2007, 15:29
Сообщения: 283
У syslinux есть API. Задаете номер прерывания, входные регистры, вызываете его функцию, он выходит в реальный режим, вызывает биос, возвращается в защищенный и вы получаете выходные. Достаточно удобно, и при этом можно работать в 32-битном режиме и не заморачиваться ограничениями на размер, что актуально, если загрузчик сложный.

И да, всё это описано в документации, так что копаться нигде не надо. И его собственное API для работы с ФС позволяет работать одинаково где угодно - хоть с жесткого диска, хоть с флешки, хоть по сети.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самопальные загрузчики
СообщениеДобавлено: 03 май 2012, 20:56 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
Всё равно любой мультибут накладывает ограничения. Грузит только выше определенного адреса, стартует в х32 и делает ещё большую кучу лишней работы.
Как по мне, система должна стоять на своём разделе диска. Одна система - один раздел. Ставить десяток систем на один раздел - имхо фича бесполезная.
Если использовать такой подход, то смысл в мультибуте почти полностью отпадает. Выбор раздела с лихвой умещается в MBR, а на разделах уже свои бутсекторы, которые могут делать что угодно. Поэтому я не хочу лишний раз накладывать на себя ограничения.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самопальные загрузчики
СообщениеДобавлено: 03 май 2012, 21:03 

Зарегистрирован: 22 май 2007, 15:29
Сообщения: 283
Грузит в первое свободное место в ОЗУ, режим - на выбор: есть 16 бит и 32 бита.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самопальные загрузчики
СообщениеДобавлено: 03 май 2012, 21:05 

Зарегистрирован: 31 окт 2011, 18:20
Сообщения: 230
А сколько сам в памяти занимает? В смысле где находится это первое свободное место?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Самопальные загрузчики
СообщениеДобавлено: 03 май 2012, 21:08 

Зарегистрирован: 22 май 2007, 15:29
Сообщения: 283
Зависит от варианта. Полный сетевой - кил 30, наверное. Адреса не определены: 16-битные исполняемые файлы - формата COM, т.е. грузятся по смещению 0x100 в любой сегмент, а 32-битные должны быть самоперемещаемыми.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 79 ]  На страницу 1, 2, 3, 4, 5 ... 8  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB