GNU/Linux >> Znalost Linux >  >> Linux

Proč potřebujeme bootloader ve vestavěném zařízení?

V kontextu Linuxu je zavaděč zodpovědný za některé předdefinované úlohy. Protože je tato otázka označena jako arm, myslím, že zavádění ARM by mohlo být užitečným zdrojem. Konkrétně zavaděč byl/je zodpovědný za nastavení ATAG seznam popisující množství paměti RAM, příkazový řádek jádra a další parametry. Jedním z nejdůležitějších parametrů je typ stroje . Se stromy zařízení , je předán celý popis desky. To znemožňuje zavést standardní ARM Linux bez kódu pro nastavení parametrů, jak je popsáno.

Parametry umožňují jeden generický Linux pro podporu více zařízení. Například jádro ARM Debianu může podporovat stovky různých typů desek. Uboot nebo jiný zavaděč může tyto informace dynamicky určit nebo mohou být pevně zakódovány pro desku.

Můžete se také podívat na stránku s informacemi o zavaděči zde na přetečení zásobníku.

Základní systém může být schopen nastavit ATAGS a zkopírujte NOR flash do SRAM. Obvykle je však o něco složitější. Linux potřebuje nastavení RAM, takže možná budete muset inicializovat řadič SDRAM. Pokud používáte NAND flash, musíte zvládnout špatné bloky a kopii může být o něco složitější než memcpy() .

Linux má často nějaké skryté chyby ovladače, kdy ovladač předpokládá, že jsou inicializovány hodiny. Například pokud Uboot vždy inicializuje ethernetové hodiny pro konkrétní stroj, linuxový ethernetový ovladač možná opomněl nastavit tyto hodiny. To může platit zejména u stromových hodin.

Některé systémy vyžadují formáty spouštěcích obrazů, které Linux nepodporuje; například speciální hlavička, která může okamžitě inicializovat hardware; jako je konfigurace devices pro čtení počátečního kódu. Navíc často existuje hardware, který by měl být nakonfigurován okamžitě; zavaděč může to udělat rychle, zatímco normální struktura Linuxu to může výrazně zpozdit, což vede ke konfliktům I/O atd.

Z pragmatického hlediska je jednodušší použít boot loader. Nic vám však nebrání změnit zdroj Linuxu tak, aby se z něj spouštěl přímo; i když to možná jako vložení zavaděče kód přímo do startu Linuxu.

Viz také:Coreboot, Uboot a srovnání Wikipedie. Barebox je méně známý, ale dobře strukturovaný a moderní zavaděč pro ARM. RedBoot se také používá v některých systémech ARM; Oddíly RedBoot jsou podporovány ve stromu jádra.


Bootloader je počítačový program, který po dokončení autotestů načte hlavní operační systém nebo běhové prostředí počítače.

^ Z článku Wikipedie

Bootloader tedy v podstatě dělá to, co jste chtěli - kopírování dat z flash do operační paměti. Je to opravdu tak jednoduché.

Pokud se chcete dozvědět více o boostrappingu OS, vřele doporučuji přečíst si odkazovaný článek. Boot fáze se skládá kromě testů také z kontroly periferií a některých dalších věcí. Jejich přeskakování má smysl pouze na velmi jednoduchých embedded zařízeních, a proto jsou jejich bootloadery ještě jednodušší:

Některé vestavěné systémy nevyžadují znatelnou zaváděcí sekvenci, aby mohly začít fungovat, a po zapnutí mohou jednoduše spustit operační programy, které jsou uloženy v ROM.

Stejný zdroj


Proč nemůžeme přímo načíst jádro do RAM z flash paměti bez bootloaderu? Když to načteme, co se stane? Ve skutečnosti to procesor nebude podporovat, ale proč postupujeme podle tohoto postupu?

Bartek, Artless a Felipe jsou součástí obrazu.

Každý typ vestavěného procesoru (např. 386EX, Coretex-A53, EM5200) udělá něco automaticky při resetování nebo zapnutí. Občas toněco se liší v závislosti na tom, zda je vypnuto napájení nebo je zařízení resetováno. Některé vestavěné procesory umožňují to něco změnit na základě napětí aplikovaného na různé piny, když je zařízení napájeno nebo resetováno.

Bez ohledu na to existuje omezené množství něčeho které procesor může udělat, protože fyzický prostor na procesoru je potřebný k definování toho něco ať už je to FLASH na čipu, instrukční mikrokód nebo nějaký jiný mechanismus.

Tento limit znamená, že něco je

  • pevný účel, dělá jednu věc co nejrychleji.
  • omezený rozsahem a možnostmi, obvykle se načte malý blok kódu (často několik kilobajtů nebo méně) do pevného umístění v paměti a spustí se od začátku načteného kódu.
  • neupravitelné.

Takže to, co procesor dělá v reakci na reset nebo vypnutí napájení, nelze změnit a ani toho moc nezmůže, a nechceme, aby automaticky kopíroval stovky megabajtů nebo gigabajtů do paměti, která nemusí existovat nebo nemusí být inicializována, a to může trvat dlouho.

Takže....

Nastavili jsme malý program, který je menší než nejmenší povolená velikost pro všechna zařízení, která budeme používat. Tento program je uložen všude, kde se něco potřebuje, aby to bylo.

Někdy je malý program U-Boot. Někdy je dokonce U-Boot příliš velký pro počáteční načtení, takže malý program na oplátku načte U-Boot.

Jde o to, že cokoli se načte tím něčím , je upravitelný podle potřeby pro konkrétní systém. Pokud je to U-Boot, skvělé, pokud ne, ví, kam načíst hlavní operační systém nebo kam načíst U-Boot (nebo nějaký jiný zavaděč).

U-Boot (hovoříme-li o bootloaderech obecně) pak nakonfiguruje minimální sadu zařízení, paměti, nastavení čipu atd., aby bylo možné načíst a spustit hlavní OS. Hlavní inicializace operačního systému se postará o jakoukoli další konfiguraci nebo inicializaci.

Takže sekvence je:

  • Zapnutí nebo reset procesoru
  • Něco načte počáteční spouštěcí kód (nebo vestavěný zavaděč ve stylu U-Boot)
  • Počáteční spouštěcí kód (nemusí být potřeba)
  • U-Boot (nebo jiný obecný vestavěný zavaděč)
  • Init Linux

Primární bootloader je obvykle zabudován do křemíku a provádí načtení prvního USER kódu, který bude spuštěn v systému.

Bootloader existuje, protože neexistuje žádný standardizovaný protokol pro načtení prvního kódu, protože je závislý na čipu. Někdy lze kód načíst přes sériový port, flash paměť nebo dokonce pevný disk. Je to funkce bootloaderu, která ji má najít.

Jakmile je uživatelský kód načten a spuštěn, bootloader se již nepoužívá a za správnost spuštění systému je odpovědný uživatel.

V řetězci vestavěného linuxu primární zavaděč nastaví a spustí Uboot. Poté Uboot najde linuxové jádro a načte ho.


Linux
  1. Rychlejší spouštění Linuxu

  2. Proč je při bootování potřeba MLO?

  3. Proč se pro linux doporučuje 100MB spouštěcí oddíl ext2?

  1. Proč je v Linuxu potřeba upravovat tabulky systémových volání?

  2. Jak připojit zařízení v Linuxu?

  3. Jak způsobím reset hlídacího psa na mém vestavěném linuxovém zařízení

  1. Proč je Linux zásadní pro edge computing

  2. Proces spouštění Linuxu

  3. Proč musí být zařízení raid 10 inicializováno?