GNU/Linux >> Znalost Linux >  >> Linux

Jak programovat soubory stromu zařízení Linux .dts?

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 fork
    • reg a interrupt 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!


Linux
  1. Jak komprimovat více souborů v systému Linux

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

  3. Jak vypsat strom zařízení jádra

  1. Jak šifrovat soubory pomocí gocryptfs na Linuxu

  2. Jak nainstalovat ovladač zařízení v systému Linux

  3. Jak přejmenovat soubory v Linuxu

  1. Jak si přizpůsobím výzdobu oken v Linuxu

  2. Jak najít soubory v Linuxu

  3. Jak vytvořit soubory Linux Proc v programu C pomocí LKM