Budu to muset vyzkoušet až budu mít čas, ale momentálně mně smysl device tree trochu uniká.
Jsou motivací periférie, které nelze detekovat pomocí PnP mechanismů třeba na PCI(na těchto deskách nebývá), USB atd??
Proč se ale v případě jednoduchého počítače jako je Raspberry trápit s vytvářením fragmentů device tree, když můžu modul ovladače zavést prostě ručně?
Znamená zavedení device tree nějaké problémy při práci s GPIO piny, pokud se nebudu hrabat v nastavení device tree? S přímým přístupem problém přece být nemůže a opět, pokud chci na GPIO přistupovat standardně přes /dev/... zavedu odpovídající modul(který jsem si napsal třeba sám) ručně....
Možná se ptám blbě - moc času jsem Raspberry apod. zatím nevěnoval - ale dokáže to někdo objasnit?
Ano, jde především o periferie na sběrnicích, které nepodporují enumeraci. Tam samotné zavedení modulu ovladače nestačí, ovladač neví, kde a zda je nějaké zařízení zapojeno. V některých případech se dá nové zařízení vynutit za běhu, například u I²C:
# echo pcf8583 0x50 > /sys/bus/i2c/devices/i2c-1/new_device
V jiných situacích ale nic takového udělat nejde, příkladem je třeba v článku uvedené softwarově ovládaná 1-Wire, kde je jediná možnost (bez Device Tree) překompilovat kernel.
Modulu můžu předat parametr např. s adresou pokud je napsán tak, že jej rozpozná...
Chápu to co píšete tak, že se to týká např. nějakého čipu na i2c, který je tam na nějaké adrese. Nelze jej jednoduše detekovat a tak odpovídající modul/ovladač o něm odněkud musí něco vědět.... to je jasné.
Ale jak si vysvětlit nefunkčnost vlastní i2c sběrnice o které píše autor článku?
Protože definice I²C řadiče není součástí základního Device Tree pro RPi. A to celkem záměrně, aby se zamezilo konfliktům, kdy stejný I²C řadič ovládá jak VideoCore, tak i CPU. Dříve se to řešilo poměrně nesystémově blacklistem na moduly spi-bcm2708
a i2c-bcm2708
. Samozřejmě, je možné jen povolit I²C řadič správným parametrem pro Device Tree, zapsaným do souboru config.txt
a tak obnovit chování před zavedením Device Tree.
Posledni zmeny v kernelu me zasahly uplne stejne, RTC modul na I2C nebyl dostupny, I2C sbernice nenalezeny. Tento clanek mi hodne pomohl. Krome vytvareni vlastniho dtb souboru se lze take podivat do /boot/overlays, Raspbian tam ma nekolik binarnich dtb souboru pro bezne periferie, me se treba hodil "/boot/overlays/ds1307-rtc-overlay.dtb". Do /boot/config.txt jsem pridal radku
dtoverlay=ds1307-rtc-overlay.dtb
a po rebootu byla dostupna I2C sbernice i hodiny RTC. Ale nekomu muze stacit jednodussi resene, pridani radky
dtparam=i2c1
aktivuje /dev/i2c-1, pak uz muzete pouzivat nastroje ktere znate z minulosti.
Kompilator dtb souboru je v Raspbianu v balicku device-tree-compiler; komilator "dtc" umi prekladat jak z textu do binarniho formatu tak i preklad opacnym smerem, tedy rozkodovani binarniho formatu do textu.