Podívejte se na dts desky, která se nejvíce podobá vaší dev-board. Použijte to jako referenci a proveďte změny v dts podle rozdílů mezi referenční deskou a vaší dev dev.
Podívejte se také na následující:
- Projekt Device-tree Documentation na eLinuxu (má rozsáhlou sbírku odkazů, abyste mohli začít číst).
- Série článků o základech stromu zařízení.
- Návod k migraci do stromu zařízení.
Minimální reg
+ interrupt
příklad s virtuálním zařízením QEMU
Náš příklad přidá následující uzel stromu zařízení do versatilepb
strom zařízení, který bude QEMU používat kvůli -M versatilepb
:
[email protected] {
compatible = "lkmc_platform_device";
reg = <0x101e9000 0x1000>;
interrupts = <18>;
interrupt-controller;
#interrupt-cells = <2>;
clocks = <&pclk>;
clock-names = "apb_pclk";
lkmc-asdf = <0x12345678>;
};
Poté pomocí modulu linuxového jádra pro interakci se zařízením otestujeme následující funkce DTS:
- registruje adresy
- IRQ
- číst uživatelské vlastnosti z ovladače
Toto jsou hlavní součásti příkladu:
- Linux všestranný
.dts
patch na Linux forkreg
ainterrupt
odpovídající čísla pevně zakódovaná ve všestranném stroji QEMU (který představuje SoC)compatible
odpovídáplatform_driver.name
v modulu jádra a informuje jádro, který modul bude s tímto zařízením pracovat- ovladači také předáme vlastní vlastnost:
lkmc-asdf = <0x12345678>;
, který se čte pomocíof_property_read_u32
- strom zařízení je předán firmwaru QEMU s
-dtb
argument
- Rozvětvení QEMU:
- zařízení, které čte registr a generuje přerušení
- vložte zařízení do
-M versatilepb
- modul jádra Zapisuje do paměti na sondě za účelem testování věcí, což také generuje IRQ.
Stromy zařízení mají mnohem více funkcí, které jsme nepokryli, ale tento příklad by vám měl pomoci začít a snadno vám umožní pohrát si s novými funkcemi, které se objeví.
Další zdroje:
- nepostradatelný výukový program elinux:http://elinux.org/Device_Tree_Usage
- hrajte si s
dtc
pro čistě syntaktické otázky. Například ukazuje, jak jsou uzly jednoduše sloučeny podle cesty:https://unix.stackexchange.com/a/375923/32558 - https://unix.stackexchange.com/questions/118683/what-is-a-device-tree-and-a-device-tree-blob
Vezměme si příklad a každý z nich vysvětlím níže
auart0: [email protected] {
compatible = "fsl,imx28-auart", "fsl,imx23-auart";
reg = <0x8006a000 0x2000>;
interrupts = <112>;
dmas = <&dma_apbx 8>, <&dma_apbx 9>;
dma-names = "rx", "tx";
};
Požadované vlastnosti:
- kompatibilní :Mělo by být "fsl,-auart". Mezi podporované SoC patří imx23 a imx28.
- reg :Adresa a délka registru nastaveného pro zařízení
- přerušení :Mělo by obsahovat čísla přerušení auart
- dmas:DMA specifikátor, sestávající z phandle k uzlu řadiče DMA a ID kanálu AUART DMA.
- dma-names:"rx" pro kanál RX, "tx" pro kanál TX.
Poznámka:Každý port auart by měl mít správně očíslovaný alias v uzlu "aliasy".
Pro další pokročilé vlastnosti přejděte na tento odkaz, je velmi užitečný
Vysvětlení stromu zařízení
Doufám, že to pomůže!