2016-03-18 35 views
5

Ich habe Yocto verwendet, um ein kleines Linux-Image für das Beaglebone Black zu erstellen. Ich denke, ich habe fast alles funktioniert, wie ich es will, außer ich brauche Zugriff auf UARTs 2 und 4. Wenn ich das Standard-Debian-Image verwendet habe, habe ich dies mit Device-Tree-Overlays und Capemgr. Allerdings habe ich festgestellt, dass der mit Yocto gebaute Kernel keinen Capemgr hat.Ändern des Gerätebaums für den Beaglebone Black

scheinen Meine Optionen zu sein:

  1. den Kernel mit capemgr zu bauen bekommen, oder
  2. die Gerätebaum-Datei mit den notwendigen Änderungen ändern.

Option 2 scheint viel einfacher.

Die Gerätebaum-Overlays für die UARTs sind here und here. Ich habe versucht, diese auf ein paar Arten einzuschließen.

  1. Ich dekompilierte den Gerätebaum Blob, den ich verwendet hatte und versuchte, diese Dateien von aufzunehmen.
  2. Ich habe the full set of dts files heruntergeladen und versucht, die UART-Gerätebaum-Overlays in am335x-boneblack.dts einzuschließen.

Beide Ansätze ergeben einen Fehler etwas wie folgt aus:

Error: am335x-boneblack.dts:1.1-2 syntax error 
FATAL ERROR: Unable to parse input tree 

Allerdings habe ich bemerkt, dass ich einen ähnlichen Fehler beim Versuch AM335x-boneblack.dts zu kompilieren, selbst ohne es zu ändern, also bin ich wahrscheinlich nicht einmal richtig. (Mit dem Befehl dtc -I dts -O dtb -o result.dtb am335x-boneblack.dts)

Offensichtlich weiß ich nicht, was ich tue. Ich vermute, dass die Gerätebaum-Overlays in irgendeiner Weise modifiziert werden müssen, um sie so zu verwenden, wie ich sie benutze. Oder vielleicht mache ich das Include-Recht nicht (fügen Sie einfach einen # include zum Anfang der Datei hinzu).

Hat jemand irgendwelche Ideen, was ich falsch machen könnte? Ist das, was ich versuche, überhaupt möglich?

+2

Wahrscheinlich möchten Sie Ihre "Overlay" -Datei am * Ende * der ** .dts ** -Datei einfügen, also nachdem alles andere deklariert wurde. Gewöhnliche **. DTSI ** Dateien nicht verwenden 'Fragment @ 0 { \t \t target = <&x>; \t \t __overlay__ {...}}', so die haben herausgeschnitten werden. – sawdust

+0

Um DTB auf Yocto zu kompilieren: 'bitbake -f-c deploy your_kern_recipe', z. 'bitbake -f -c deploy linux-imx' – LPs

Antwort

3

Also funktionierte ich, indem ich meinen Gerätebaum-Blob nahm, ihn dekompilierte und in Abschnitten aus den Gerätebaum-Overlay-Dateien zusammenfügte und neu kompilierte. Mir wurde klar, dass ich anstelle von 2 und 4 die Uarts 1 und 2 brauchte, also ist das etwas anders als mein ursprüngliches Problem.

den Gerätebaum Blob decompile:

dtc -I dtb -O dts -o am335x-boneblack.dts am335x-boneblack.dtb 

I verwendet die bestehende UART0 als Beispiel mir die richtigen Abschnitte zu zeigen, in arbeiten

ich einen Abschnitt für UART1 und UART2 in der addierte. Pinmux Abschnitt unter dem Abschnitt für Uart0. Es sieht nun wie folgt aus:

pinmux_uart0_pins { 
    pinctrl-single,pins = <0x170 0x30 0x174 0x0>; 
    linux,phandle = <0x27>; 
    phandle = <0x27>; 
}; 

bb_uart1_pins: pinmux_bb_uart1_pins { 
    pinctrl-single,pins = < 
     0x184 0x20 /* P9.24 uart1_txd.uart1_txd OUTPUT */ 
     0x180 0x20 /* P9.26 uart1_rxd.uart1_rxd INPUT */ 
    >; 
}; 

bb_uart2_pins: pinmux_bb_uart2_pins { 
    pinctrl-single,pins = < 
     0x150 0x21 /okay* spi0_sclk.uart2_rxd | MODE1 */ 
     0x154 0x01 /* spi0_d0.uart2_txd | MODE1 */ 
    >; 
}; 

Dann später die Serienschnitte freigegeben werden müssen und gesagt, was Stifte zu verwenden.Ich veränderte uart Abschnitte vorhanden, und es sieht nun wie folgt aus:

[email protected] { 
    compatible = "ti,omap3-uart"; 
    ti,hwmods = "uart1"; 
    clock-frequency = <0x2dc6c00>; 
    reg = <0x44e09000 0x2000>; 
    interrupts = <0x48>; 
    status = "okay"; 
    dmas = <0x26 0x1a 0x26 0x1b>; 
    dma-names = "tx", "rx"; 
    pinctrl-names = "default"; 
    pinctrl-0 = <0x27>; 
}; 

[email protected] { 
    compatible = "ti,omap3-uart"; 
    ti,hwmods = "uart2"; 
    clock-frequency = <0x2dc6c00>; 
    reg = <0x48022000 0x2000>; 
    interrupts = <0x49>; 
    status = "okay"; 
    dmas = <0x26 0x1c 0x26 0x1d>; 
    dma-names = "tx", "rx"; 
    pinctrl-names = "default"; 
    pinctrl-0 = <&bb_uart1_pins>; 
}; 

[email protected] { 
    compatible = "ti,omap3-uart"; 
    ti,hwmods = "uart3"; 
    clock-frequency = <0x2dc6c00>; 
    reg = <0x48024000 0x2000>; 
    interrupts = <0x4a>; 
    status = "okay"; 
    dmas = <0x26 0x1e 0x26 0x1f>; 
    dma-names = "tx", "rx"; 
    pinctrl-names = "default"; 
    pinctrl-0 = <&bb_uart2_pins>; 
} 

den Gerätebaum neu zu kompilieren:

dtc -I dts -O dtb -o am335x-boneblack.dtb am335x-boneblack.dts 

Kurz gesagt, konnte ich diese Arbeit bekommen trotz wenig zu müssen, ohne zu wissen, wie Vorrichtung Bäume arbeiten.

Ich musste auch hdmi deaktivieren, die ich getan habe, indem ich den Status gleich "deaktiviert" in der HDMI-Abschnitt gesetzt.

Verwandte Themen