ARM firmware
Jak jsme již zmínili dříve, na systémech ARM bohužel neexistuje
standard pro systémový firmware a proto se různé systémy, které
nominálně používají stejný firmware, mohou chovat zcela odlišně.
To pramení z faktu, že se ARM architektura používá hlavně v embeded
zařízeních, pro které výrobci vytváří vlastní upravené firmwary
a přidávají záplaty pro konkrétní zařízení. Výrobci bohužel často
zapomenou zaslat své úpravy zpět vývojářům původního firmwaru, takže
se jejich změny neobjeví v novějších verzích daného firmwaru.
Výsledkem je, že i nové systémy často používají firmware, který je
založený na nějaké prehistorické verzi firmwaru, kterou si výrobce
kdysi upravil, přičemž vývoj původního firmwaru mezitím pokračoval
a nyní nabízí nové vlastnosti, nebo v některých ohledech jiné chování.
Výrobci upravených firmwarů navíc nepojmenovávají integrovaná zařízení
konzistentně, takže i když se jedná o stejný základní firmware, je na
platformě ARM téměř nemožné poskytnout obecně platné informace.
Obrazy U-Bootu poskytované &debian;em
Na &armmp-uboot-img; poskytuje &debian; obrazy U-Bootu pro nejrůznější
armhf systémy, které umí nahrát U-Boot z SD karty. U-Boot je nabízen
ve dvou variantách: surové komponenty U-Bootu a předpřipravený obraz
pro jednoduché zapsání na SD kartu. Surové komponenty jsou zamýšleny
pro pokročilé uživatele, doporučenou cestou jsou předpřipravené obrazy
pro SD karty. Obrazy se jmenují
<systém>.sdcard.img.gz a na SD kartu se dají
zapsat například tímto příkazem:
zcat <systém>.sdcard.img.gz > /dev/SD_KARTA
Jako vždy, zkontrolujte si, zda zapisujete na správné zařízení,
protože tím smažete veškerý obsah daného zařízení!
Pokud pro svůj systém naleznete obraz U-Bootu jak u &debian;u, tak
u výrobce systému, doporučujeme použít verzi z &debian;u, jelikož tato
bývá novější a mívá více vlastností.
Nastavení ethernetové MAC adresy v U-Bootu
MAC adresa každého ethernetového rozhraní by měla být celosvětově
unikátní, resp. musí být unikátní minimálně v rámci dané ethernetové
broadcastovací domény. Výrobce si pro sebe obvykle alokuje blok MAC
adres z centrálně spravované zásoby (za což zaplatí nějaký poplatek)
a pak příslušně nakonfiguruje každé vyrobené zařízení tak, aby mělo
unikátní adresu.
V případě vývojářských desek se chce někdy výrobce vyhnout placení
poplatků a proto unikátní MAC adresu na ethernetové zařízení
nenastaví. V takových případech musí MAC adresu nastavit uživatel.
Některé ovladače síťových karet, když zjistí, že MAC adresa není
přiřazena, vygenerují náhodnou MAC adresu, která se může při každém
restartu měnit. Pro uživatele to pak vypadá, že síťování v zásadě
funguje, ale některé služby nemusí být zrovna spolehlivé, jako třeba
přiřazování semi-statických IP adres pomocí DHCP na základě MAC adresy.
Aby se předešlo konfliktům se stávajícími, oficiálně přiřazenými MAC
adresami, existuje blok adres, které je rezervován pro takzvaně
místně spravované
adresy. Blok je definován hodnotou
dvou konkrétních bitů v prvním bajtu adresy. V praxi to znamená, že se
jako lokálně spravovaná adresa dá použít například libovolná adresa
začínající hexadecimálním ca (jako třeba
ca:ff:ee:12:34:56.
Na systémech používajících jako firmware U-Boot je ethernetová MAC
adresa umístěna v proměnné prostředí ethaddr.
Adresu můžete zkontrolovat v promptu U-Bootu příkazem
printenv ethaddr a nastavit příkazem
setenv ethaddr ca:ff:ee:12:34:56.
Po nastavení proměnné můžete hodnotu trvale uložit příkazem
saveenv.
Problémy s přesunem jádra/initrd/stromu zařízení v U-Bootu
Na některých systémech se starší verzí U-Bootu se mohou objevit
problémy s korektním přesunem linuxového jádra, úvodního ramdisku
a binárky se stromem zařízení během zavádění. Projevuje se to tak, že
U-Boot vypíše hlášku
Starting kernel ..., ale systém
dál zamrzne bez jakéhokoliv výstupu. Problém byl vyřešen v novějších
verzích U-Bootu, tj. od verze v2014.07 dále.
Problém se může projevit i v případě, že systém původně používal verzi
U-Bootu starší než v2014.07 a teprv následně byl aktualizován.
Aktualizace U-Bootu totiž obvykle nemění stávající proměnné prostředí
a oprava problému vyžaduje, aby se nastavila nová proměnná prostředí
bootm_size, což U-Boot provádí automaticky pouze
u nových instalací v čistém prostředí. Ručně tuto novou proměnnou
nastavíte v promptu U-Bootu příkazem
env default bootm_size; saveenv.
Jinou možností, jak obejít problém s přesunem, je v promptu U-Bootu
spustit příkaz
setenv fdt_high ffffffff; setenv initrd_high 0xffffffff; saveenv,
kterým zcela zakážete přesun úvodního ramdisku a binárky se stromem
zařízení.