2016-03-18 42 views
5

Użyłem Yocto do stworzenia małego obrazu linuxowego dla Beaglebone Black. Myślę, że mam wszystko co działa tak, jak chcę, z wyjątkiem tego, że potrzebuję dostępu do UART 2 i 4. Kiedy używałem standardowego obrazu Debiana, zrobiłem to z nakładkami drzewa i capemgrem urządzenia. Jednak znalazłem, że jądro zbudowane z Yocto nie ma capemgr.Modyfikowanie drzewa urządzeń dla Beaglebone Black

Moje opcje wydają się być:

  1. dostać jądro budować z capemgr lub
  2. zmodyfikować plik drzewo urządzenie z niezbędnymi zmianami.

Opcja 2 wydaje się znacznie łatwiejsza.

Nakładki drzewa urządzeń dla UART to here i here. Próbowałem włączyć je na kilka sposobów.

  1. Dekompilowałem drzewo blobu urządzenia, którego używałem i próbowałem znaleźć tam te pliki.
  2. Pobrałem the full set of dts files i próbowałem dołączyć nakładki drzewa urządzeń UART z w am335x-boneblack.dts.

Oba podejścia uzyskując coś podobnego błędu:

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

Jednak zauważyłem, że mam podobny błąd przy próbie kompilacji am335x-boneblack.dts nawet bez modyfikowania go, więc jestem prawdopodobnie nawet nie robiąc tego dobrze. (Używając polecenia dtc -I dts -O dtb -o result.dtb am335x-boneblack.dts)

Oczywiście nie wiem, co robię. Podejrzewam, że nakładki drzewa urządzeń muszą być w jakiś sposób zmodyfikowane, aby były używane w sposób, w jaki próbuję ich użyć. A może nie robię prawa do włączania (tylko dodawanie #include do początku pliku).

Czy ktoś ma jakieś pomysły, co mogę robić źle? Czy to, co próbuję zrobić, nawet możliwe?

+2

Prawdopodobnie chcesz dołączyć plik "nakładki" na * koniec * pliku **. Dts **, czyli po zadeklarowaniu wszystkiego innego. Zwykli **. Dtsi plików ** nie używać 'fragment @ 0 { \t \t target = <&x>; \t \t __overlay__ {...}}', więc te muszą być wycięte. – sawdust

+0

Aby skompilować DTB na Yocto: 'bitbake -f -c wdrożyć your_kernel_recipe', np. 'bitbake -f -c wdraża linux-imx' – LPs

Odpowiedz

3

Tak więc działałem, pobierając drzewo z blobem urządzenia, dekompilując je i łącząc w sekcje z plików nakładki drzewa urządzeń i rekompilując. Zdałem sobie sprawę, że potrzebuję uartów 1 i 2 zamiast 2 i 4, więc jest to nieco inne niż mój pierwotny problem.

dekompilować blob drzewo urządzenia:

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

użyłem istniejąca UART0 jako przykład, aby pokazać mi prawo sekcje pracować w

dodałem sekcję dla UART1 i uart2 w. sekcja pinmux w sekcji dla uart0. Teraz wygląda to tak:

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 */ 
    >; 
}; 

Później, sekcje seryjne muszą być włączone i powiedział, co szpilki w użyciu.I zmodyfikowane istniejące sekcje UART, a teraz wygląda tak:

[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>; 
} 

przekompilować drzewo urządzenia:

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

w skrócie, udało mi się uzyskać tej pracy, mimo że niewiele ma pomysł w jaki sposób urządzenie drzewa działają.

Potrzebowałem również wyłączyć hdmi, co zrobiłem, ustawiając status równy "disabled" w sekcji hdmi.