2016-03-18 47 views
5

Ho usato Yocto per creare una piccola immagine di Linux per Beaglebone Black. Penso di avere tutto ciò che funziona come lo voglio, tranne che ho bisogno di accedere agli UART 2 e 4. Quando usavo l'immagine standard di Debian, l'ho fatto con gli overlay dell'albero dei dispositivi e capemgr. Tuttavia, ho trovato che il kernel creato con Yocto non ha capemgr.Modifica dell'albero dei dispositivi per Beaglebone Black

mie opzioni sembrano essere:

  1. ottenere il kernel di costruire con capemgr, o
  2. modificano il file albero dei dispositivi con le modifiche necessarie.

L'opzione 2 sembra molto più semplice.

Le sovrapposizioni dell'albero del dispositivo per le UART sono here e here. Ho cercato di includerli in un paio di modi.

  1. Ho scomposto il blob dell'albero del dispositivo che stavo usando e provato a includere questi file da lì.
  2. Ho scaricato the full set of dts files e ho provato a includere gli overlay dell'albero del dispositivo UART in am335x-boneblack.dts.

Entrambi gli approcci producono un qualcosa di errore come questo:

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

Tuttavia, ho notato che ho un errore simile quando si cerca di compilare AM335x-boneblack.dts anche senza modificarlo, quindi sono probabilmente nemmeno farlo bene. (Utilizzando il comando dtc -I dts -O dtb -o result.dtb am335x-boneblack.dts)

Ovviamente non so cosa sto facendo. Sospetto che le sovrapposizioni dell'albero del dispositivo debbano essere modificate in qualche modo per essere usate nel modo in cui sto cercando di usarle. O forse non sto facendo l'inclusione giusta (basta aggiungere un #include all'inizio del file).

Qualcuno ha qualche idea su cosa potrei fare male? Quello che sto cercando di fare è anche possibile?

+2

Probabilmente si desidera includere il file "overlay" alla fine * * del file **. Dts **, ovvero dopo che è stato dichiarato tutto il resto. Ordinaria **. ** file DTSI non usano 'frammento @ 0 { \t \t target = <&x>; \t \t __overlay__ {...}}', in modo da quelli devono essere modificati fuori. – sawdust

+0

Per compilare DTB su Yocto: 'bitbake -f -c distribuisci your_kernel_recipe', ad es. 'bitbake -f -c distribuisce linux-imx' – LPs

risposta

3

Quindi ho risolto il problema portando il blob del mio dispositivo, decompilandolo e unendomi in sezioni dall'albero del dispositivo, sovrapponendo i file e ricompilando. Mi sono reso conto che avevo bisogno di uarts 1 e 2 invece di 2 e 4, quindi questo è leggermente diverso dal mio problema originale.

decompilare l'albero dei dispositivi blob:

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

Ho usato l'esistente UART0 come un esempio per mostrare me sezioni diritto di lavorare in

ho aggiunto una sezione per UART1 e UART2 nel. sezione pinmux sotto la sezione per uart0. E ora si presenta così:

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

Poi, più tardi, le sezioni seriali devono essere abilitato e detto cosa pin da usare.Ho modificato le sezioni UART esistenti, e ora si presenta così:

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

ricompilare l'albero dei dispositivi:

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

In breve, sono riuscito ad ottenere questo lavoro, pur avendo poca o nessuna idea di come dispositivo gli alberi funzionano

Avevo anche bisogno di disabilitare hdmi che ho fatto impostando lo stato uguale a "disabilitato" nella sezione hdmi.