LINUX.ORG.RU

Как пишется bootable программы


0

1

Посмотрел это видео. Стало интересно как вообще пишутся программы, работающие прямо «на железе», все ос? Насколько сложно написать такой хелловорлд? Насколько хорошее знание asm, C нужно? Есть ли инструменты, облегчающие этот процесс?

★★★

знать нужно не си и асм, а собственно как платформа работает, как вывести буквы на экран и как контроллер клавиатуры заюзать, как таймеры заюзать, как питанием поуправлять.

dimon555 ★★★★★
()

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

juk4windows
()

Покупаешь отладочную плату на Cortex-M3 и понеслась.

trex6 ★★★★★
()
Ответ на: комментарий от juk4windows

Ну вот чтобы разобраться в ядре, нужно сначала понять, как это работает на простом примере. Только потом можно будет пытаться делать что-то более сложное.

Xenon ★★★
() автор топика

Забить три регистра и вызвать из BIOSа int 10h, примерно весь hello word.
Ввод с клавы 9 и 16 прерывание, если живо еще такое понятие. И в сектор загрузочный засунуть.

зы. Если уж возится с железом, то с микроконтроллерами, можно что-нибудь полезное сделать. Время одиночек на писюках прошло, щас корпорации рулят.

ilovewindows ★★★★★
()

Насколько сложно написать такой хелловорлд?

Не сложно. Хоть по ссылке не ходил, могу поручиться головой что он проц в защищенный режим не переводит, а обращается к достаточно разлапистым сервисам BIOS в реальном режиме.

Есть ли инструменты, облегчающие этот процесс?

Есть. Называются виртуальные машины.

Macil ★★★★★
()
Последнее исправление: Macil (всего исправлений: 1)
Ответ на: комментарий от Xenon

Ядро пишут на C, ASM в ядре очень мало и правят его ОЧЕНЬ редко.

juk4windows
()

очень просто

в бут-сектор на дискете^Wфлешке или жестком диске пишется на ассемблере код загрузчика. Код запускается в реальном режиме процессора, ему доступны прерывания биоса в качестве системных вызовов. В конце сектора должны быть байты 55, AA для указания того, что сектор загрузочный

всё это относится к PC, x86 и BIOS

Harald ★★★★★
()
Ответ на: комментарий от ilovewindows

Забить три регистра и вызвать из BIOSа int 10h, примерно весь hello word.

можно прямо в видеопамять по адресу B8000 писать :)

Harald ★★★★★
()
Ответ на: комментарий от Harald

Можно, но даже в те добрые времена были злые люди , которые постоянно нудели что это дурной тон, что типа видео страниц несколько, что бывают и будут другие видеоадаптеры. :)

ilovewindows ★★★★★
()
Ответ на: комментарий от ilovewindows

ну допустим тогда монохромные адаптеры могли быть, с адресом видеопамяти начинающимся с A000 :) А сейчас-то все по идее цветные

Harald ★★★★★
()

На разных платфомах по-разному. Вообще, читай код всяких загрузчиков типа U-Boot или Grub.

thesame ★★★★
()

Есть ли инструменты, облегчающие этот процесс?

Есть. GRUB называется. Можно ELF-ы грузить.

kike
()
Ответ на: комментарий от Xenon

Ну вот чтобы разобраться в ядре, нужно сначала понять, как это работает на простом примере. Только потом можно будет пытаться делать что-то более сложное.

Тебе, ламеру, не дано ни первое, ни второе, не гворя уже о третьем.

anonymous
()

Видео не смотрел, ибо dial-up, но тупо загрузиться с GRUB-ом и вывести строку printf-ом несложно. printf можешь взять из ядра netbsd, он там идеально сделан для работы на голом железе. http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/arch/sandpoint/stand/netboot/Atti... Чтоб не возиться со скроллингом при выводе в видеопамять, гоняй в QEMU и печатай в serial. По-моему, оттуда и ввод можно получать просто чтением портов, без возьни с прерываниями клавиатуры.

kike
()
Ответ на: комментарий от juk4windows

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

Однозначно стоит.

blackst0ne ★★★★★
()
Ответ на: комментарий от Xenon

так ты поймешь только как работает унылый x86 и BIOS, а я например часто сталкиваюсь с различными ARM - вот что тебе должно хотеться изучать по идее - там нету BIOSов, и загрузчики типа u-boot (самый популярные наверное в мире не-x86) - работают с голым железом, и исходники в 99% случаев есть

Linux на платформе ARM вообще по сути работает на голом железе непосредственно, что мне очень нравится

но ядро реально можно загрузить даже без u-boot а лишь простой прошивочкой которая просто сначала память настроит несколько регистров, да из флэшки потянет в память - всё работает, сам свидетель как чел так и сделал без u-boot

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от blackst0ne

Однозначно стоит.

ну да, может он однажды крутое микроядро забабахает, которое можно будет подсунуть под готовую ОСь типа Genode или Hurd, а то без драйверов тоскливо

драйвера это святое, без них мало какая ОСь куда пойдет

I-Love-Microsoft ★★★★★
()

на ASM - минимум, только чтобы побыстрому организовать сегменты и передать управление C. Из инструментов достаточно инженерной платы и головы.

MKuznetsov ★★★★★
()
Ответ на: комментарий от ilovewindows

Где можно почитать о назначении различных прерываний, и об их реальном использовании?

ZenitharChampion ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.