Portál AbcLinuxu, 13. května 2025 21:39

Jak si napsat vlastní bootloader

iRed.team zveřejnil článek, jak si napsat vlastní bootloader. Autor k tomu používá NASM (Netwide Assembler).

2.3.2021 10:52 | Max | Zajímavý článek


Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

2.3.2021 11:09 Petr
Rozbalit Rozbalit vše Re: Jak si napsat vlastní bootloader
Odpovědět | Sbalit | Link | Blokovat | Admin
V dnešní době by spíše měli ukázat, jak si napsat EFI bootloader a né tento zastaralý způsob, který bude fungovat jen se zapnutou emulací BIOSu.
Max avatar 2.3.2021 11:20 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: Jak si napsat vlastní bootloader
Jop, jop, je to samozřejmě tak, nicméně i tak mi to přišlo celkem zajímavý :).
Zdar Max
Měl jsem sen ... :(
AraxoN avatar 2.3.2021 11:30 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: Jak si napsat vlastní bootloader
Možno pre niekoho EFI má nejakú výhodu, ale ja mám skoro všade Legacy BIOS. Práve preto, že je jednoduchší.
Jendа avatar 2.3.2021 12:58 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Jak si napsat vlastní bootloader
Mně jednodušší nepřijde - EFI znamená „hodit soubor na FAT32 oddíl“, zatímco u „klasického“ zavlékání je tu celý ten cirkus s instalací do bootsektoru a na začátek disku před první partition.
Josef Kufner avatar 2.3.2021 14:22 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Jak si napsat vlastní bootloader
Složitosti se nejde zbavit. Buď bude složitější bootloader (+firmware), nebo jeho používání.

MBR je neskutečně triviální způsob bootování. V prvním bloku (512B) je kód, který se načte do paměti a spustí. To je celé. Nic víc tam není.

EFI je v podstatě MS-DOS dodaný jako firmware, který má k dispozici key-value úložiště, kam se zapíše seznam bootovacích souborů a pár dalších věcí. V podstatě to je také docela jednoduché, ale obnáší to nějakou tu infrastrukturu navíc. Na oplátku to umožňuje firmwaru poskytovat služby dostupné z operačního systému. Takže ve výsledku se to celkem dobře používá a umí to spoustu věcí, i když je to složitější, tedy spíš právě díky tomu.
Hello world ! Segmentation fault (core dumped)
Jendа avatar 2.3.2021 14:29 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Jak si napsat vlastní bootloader
V prvním bloku (512B) je kód, který se načte do paměti a spustí. To je celé.
Nj, ale protože se do 512B (ve skutečnosti 446) nic rozumného nevejde, tak se to hackuje tak, že se buď něco zapisuje náhodně před první partition, nebo se hardcodují pozice bloků na disku (což se rozbije když nespustíte po změně lilo).
EFI je v podstatě MS-DOS dodaný jako firmware, který má k dispozici key-value úložiště, kam se zapíše seznam bootovacích souborů a pár dalších věcí.
Já doufám, že když se napíše grub-install --removable, tak to bude fungovat i bez toho zápisu do firmware, ale zatím jsem to dělal jednou.
Josef Kufner avatar 2.3.2021 14:35 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Jak si napsat vlastní bootloader
MBR pochází z dob MS-DOSu. Tehdá 512B stačilo.

Ad Grub: Já bych radši měl Live-EFI (jako Live-CD) s recovery systémem přidané rovnou v EFI boot nabídce.
Hello world ! Segmentation fault (core dumped)
AsciiWolf avatar 2.3.2021 15:38 AsciiWolf | skóre: 41 | blog: Blog
Rozbalit Rozbalit vše Re: Jak si napsat vlastní bootloader
Až tak jednoduchý to v praxi bohužel není, minimálně v případě UEFI. Viz například bootovací záznamy v efivars.
Conscript89 avatar 2.3.2021 18:08 Conscript89 | Brno
Rozbalit Rozbalit vše Re: Jak si napsat vlastní bootloader
No, celkem je, staci ho dat na fat partition do cesty "\EFI\BOOT\BOOTX64.EFI" v pripade x86_64. Pro jine architektury se bootloader soubor potom jmenuje jinak, napr. BOOTAA64.EFI v pripade aarch64 a BOOTIA32.EFI v pripade i686.
I can only show you the door. You're the one that has to walk through it.
AraxoN avatar 2.3.2021 16:00 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: Jak si napsat vlastní bootloader
dd bs=440 conv=notrunc count=1 if=/usr/share/syslinux/gptmbr.bin of=/dev/sda
Hotovo! Ťažká práca, naozaj... a oddiely si na disku spravím ako chcem, nemusím tam mať žiaden patentovaný MS-DOS oddiel a do neho nič nahrávať. Taktiež sa nemusím báť, že som nejak zmrvil podpis jadra, alebo niekam zabudol zaviesť vlastné kľúče a EFI mi preto odmietne nabootovať server tisíc kilometrov ďaleko.
Jendа avatar 2.3.2021 16:25 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Jak si napsat vlastní bootloader
A v těch 440B je co přesně? Jak to zjistí odkud to má brát třeba jádro?
Taktiež sa nemusím báť, že som nejak zmrvil podpis jadra, alebo niekam zabudol zaviesť vlastné kľúče
Nepleteš si EFI a SecureBoot?
Josef Kufner avatar 2.3.2021 18:36 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Jak si napsat vlastní bootloader
A v těch 440B je co přesně? Jak to zjistí odkud to má brát třeba jádro?
Je tam právě napsáno, kde (a jak) to má brát jádro (a případně zbytek bootloaderu).
Hello world ! Segmentation fault (core dumped)
Jendа avatar 2.3.2021 19:40 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Jak si napsat vlastní bootloader
To je tohle?
The task of the MBR (Master Boot Record) is to load boot code from an active partition of a drive.
Tím jsme problém jenom odsunuli o jeden bootsektor dál…
Josef Kufner avatar 3.3.2021 12:25 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Jak si napsat vlastní bootloader
Ano. Ten první bootsektor je totiž prťavý a moc se tam toho nevejde. Řeší se to různými způsoby. Jeden z nich je, že MBR najde bootovací partition a předá řízení bootovacímu sektoru tam. Další způsob je, že kód v MBR sáhne na sousední volné bloky, ještě před první partition. Ale nemá to smysl už moc řešit (mimo učebnic dějepisu).
Hello world ! Segmentation fault (core dumped)
k3dAR avatar 3.3.2021 02:12 k3dAR | skóre: 63
Rozbalit Rozbalit vše Re: Jak si napsat vlastní bootloader
UEFI a SecureBoot jsou 2 ruzne veci, s vypnutym SecureBoot (coz sice nepovazuju za rozumne, ale dostanes se na (podobnou) uroven jako s Legacy) UEFI samozrejme zadne podpisy ci klice neresi... jinak pokud nechces vlastni klice (coz (to nechces) povazuju opet za nerozumne) tak podepsane jadro se dodava primo v distribucnim balicku(respektive pokud nepouzivas DIY distro), tedy ty (ani tvuj system) jiz nic sam nepodepisuje ;-)
porad nemam telo, ale uz mam hlavu... nobody
AraxoN avatar 3.3.2021 09:09 AraxoN | skóre: 47 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: Jak si napsat vlastní bootloader
Používam prevažne vlastné DIY jadro, ale to nie je pointa. Ešte stále som sa nedozvedel, akú výhodu mi EFI má poskytovať. Čo získam tým, že si vlastné jadro podpíšem a nechám si pri štarte potvrdiť, že som ho naozaj podpísal? Čo získam tým, že sa nechám obmedzovať pri delení disku? Čo získam tým, že si pridám ďalšiu vrstvu zložitosti do deploymentu a bootovania?

Áno, rozumiem, že pre ľudí, čo používajú inštalátor a vanilla jadrá, to nepredstavuje žiadnu námahu navyše. Ale ani oni tým nič nezískali. Je to zmena len preto, aby bola nejaká zmena.
Josef Kufner avatar 3.3.2021 12:45 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Jak si napsat vlastní bootloader
EFI Services. Ovladače tím získávají informace a lepší přístup k hardwaru, resp. jeho konfiguraci. Mám zkušenost, že při zapnutém EFI mi mnohem lépe funguje KMS a grafické ovladače k Intel kartě.

Tato přidaná vrstva naopak deployment i bootování zjednodušuje. Problematický kód, který byl v MBR a všude kolem, se přesunul do firmwaru a poskytuje celkem hezké API pro zavedení operačního systému. Reálně to vypadá tak, že instalátor operačního systému nahraje jádro na EFI oddíl jako běžný soubor a do EFI proměnných nastaví, ze ten soubor je bootovací a má takový popisek a pořadí. Když přijde druhý operační systém, tak si tam přidá svůj záznam a nerozbije ten první. Různé recovery nástroje se tam také mohou přidat (notebooky s Windows tam mají např. schovanou instalačku).

Z pohledu hardwaru je situace jen minimálně složitější. Hlavně jde o to, že firmware musí implementovat netriviální standardizované API. Fyzicky to však znamená jen trochu větší ROM pro "BIOS" a trochu větší NVRAM (v dobách BIOSu zvaná CMOS) pro EFI proměnné.

Když si ale uvědomíš, že uvnitř Intel CPU ti běží Minix, na desce je firmware s EFI a teprve někde daleko nad tím běží Linux, …
Hello world ! Segmentation fault (core dumped)
Jendа avatar 3.3.2021 13:11 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Jak si napsat vlastní bootloader
Čo získam tým, že sa nechám obmedzovať pri delení disku?
Fun fact: BIOSy jsou tak zabugované, že bez partition table s označenou jednou partition jako bootovací taky nenajedou. Takže ani v případě „ancient“ booting si nemůžeš disk rozdělit libovolně.
Čo získam tým, že si pridám ďalšiu vrstvu zložitosti do deploymentu a bootovania?
Jak jsem psal výše, mně to naopak přijde jednodušší.
Logout avatar 2.3.2021 11:44 Logout | Praha
Rozbalit Rozbalit vše Re: Jak si napsat vlastní bootloader
Odpovědět | Sbalit | Link | Blokovat | Admin
Je až kupodivu, že o tom ještě píše někdo dneska. Tyhle věci byly popsány už v minulém století, kdy se tím assembleristi bavili. Ale chápu, že každá generace si musí své poznání vybojovat a sama objevit - věřit nějakým dědkům, pche! :-)

http://mircosoft.mzf.cz/int21h/044-programovani-os.htm
"Zmáčkni Alt-F4 a pak Viva powerpc!" říká Technomorous.
2.3.2021 15:55 USC
Rozbalit Rozbalit vše Re: Jak si napsat vlastní bootloader
Stačilo by tam hodit zmínku o Windows 10 a odstranit rok 2006 na konci a mohou to vydávat každý rok jako novinku :-D
2.3.2021 12:12 Meh
Rozbalit Rozbalit vše Re: Jak si napsat vlastní bootloader
Odpovědět | Sbalit | Link | Blokovat | Admin
Pekne svinstvo. Pokud ten web nema pristup ke canvasu, nacte se cela stranka a pak vse zmizne a zustane jen "something went wrong".
Takze otazka neni, jak si napsat vlastni bootloader, ale zda jeste nekdo umi udelat web bez fingerprintingu.
Jendа avatar 2.3.2021 13:00 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Jak si napsat vlastní bootloader
Já mám NoScript, nemám v něm nic povoleného, a stránka vypadá normálně načtená (včetně animovaného gifu).

Založit nové vláknoNahoru


ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.