Produkty Novinky Články Návody Kontakty

Bootování modulu

Bootovací sekvenci, tj. sled úkonů následujících po zapnutí napájení, má na starosti monitor RomBoot, speciální program uložený do vnitřní paměti ROM mikrokontroléru AT91SAM9260. Je to tedy úplně první program, který začne CPU modulu vykonávat po připojení napájení.
Úkolem monitoru RomBoot je inicializovat CPU modulu a zavést z vnitřní nebo vnější ROM paměti uživatelský program. V případě modulu SAM9260 budeme uvažovat pouze tzv. bootstrap, což je primární zavaděč. RomBoot prohledává nejprve paměť DataFlash a pak paměť NandFlash. Jakmile je v některé z nich nalezen platný kód primárního zavaděče (bootstrapu), je tento překopírován do paměti SRAM a spuštěn.
obrázek sam9260-sdram-map
Obrázek 1.1 Mapa paměti SDRAM
V momentě svého spuštění, přebírá bootstrap plnou kontrolu nad modulem, resp. mikrokontrolérem, a vedle základní inicializace potřebných částí mikrokontroléru, provede svůj hlavní úkol - inicializuje řadič pamětí SDRAM. Bez tohoto kroku by nebylo možné s ohledem na velikost interní paměti SRAM spustit program větší jak 4kB. Jakmile je řadič SDRAM úspěšně inicializován, bootstrap zkopíruje sekundární zavaděč (obvykle odkazovaný jen jako ”zavaděč”) U-Boot z paměti DataFlash příp. NandFlash na určené místo v paměti SDRAM a předá mu řízení (= spustí jej).
Zavaděč U-Boot v této fází už žádnou další inicializaci mikrokontroléru neprovádí, pouze si ověří dostupnost a stav jednotlivých pamětí a stav CPU. Ve výchozí konfiguraci U-Boot pak po uplynutí časové prodlevy překopíruje z paměti DataFlash příp. NandFlash zkomprimovaný obraz linuxového jádra na vybrané místo v paměti SDRAM a dále případně překopíruje i obraz úvodního RAM disku jádra(initrd), je-li přítomen. U-Boot jádro rozbalí na jeho startovací adresu (kernel startup address) a předá mu řízení.
Linuxové jádro zavede ovladače jednotlivých zařízení (USB, síťové rozhraní apod.) a ke konci svého bootování připojí i zařízení, na kterém je uložen kořenový souborový systém se systémovými soubory a daty. V posledním kroku předá řízení uživatelskému inicializačnímu skriptu. Tento skript uživatelsky definovaným způsobem dokončí zavádění operačního systému a následně spustí příkazový řádek s přihlašovacím dialogem. Tím bootování modulu končí.
Rozdělení paměti SDRAM, tak jak jej předpokládají jednotlivé komponenty firmware modulu je na obrázku 1.1
obrázek sam9260-data-nandflash-map
Obrázek 1.2 Mapa pamětí DataFlash + NandFlash
Již dříve jsme zmínili, že vzhledem k tomu, že modul je standardně vybaven dvěma paměťmi typu ROM, přicházejí v úvahu dvě varianty bootování:
  1. Bootování z DataFlash, kdy bootstrap, U-Boot a linuxové jádro jsou uloženy v DataFlash a kořenový souborový systém spolu s uživatelskými data v paměti NandFlash (viz obrázek 1.2).
  2. Bootování čistě jen z paměti NandFlash, kde je pak uložen kompletní firmware a uživatelská data (viz obrázek 1.3).
První varianta má jednoznačně výhodu co se týče rychlosti i větší kapacity paměti NandFlash využitelné pro uložení uživatelských dat. Nehledě na problém při bootování z pamětí typu NandFlash kvůli existenci špatných sektorů a opotřebení paměti.
obrázek sam9260-nandflash-map
Obrázek 1.3 Mapa paměti NandFlash
Pozorný čtenář si asi říká, co se děje když RomBoot nenajde platný kód bootstrapu ani v paměti DataFlash ani v paměti NandFlash. Ano, tenhle scénář jsme zatím nezmínili. Jestliže RomBoot nenajde bootstrap ani v jedné z podporovaných externích pamětí, tak zinicializuje rozhraní USB device a sériový port DBGU a v smyčce čeká na zahájení komunikace ze strany počítače. V případě úspěšného navázání spojení umožní přenést přes jedno z uvedených rozhraní krátký program (do 4kB), který následně spustí v interní paměti SRAM mikrokontroléru. Tento mechanismus je určen především pro účely nahrání firmware do jedné z pamětí typu ROM (Data/NandFlash), kdy zkopírování dat (firmware) přenesených do paměti SDRAM přes USB či sériový port do paměti DataFlash / NandFlash provede onen krátký program, tzv. applet, přenesený po zahájení spojení.