2016-03-18 16 views
5

Tôi đã sử dụng Yocto để tạo một hình ảnh linux nhỏ cho Beaglebone Black. Tôi nghĩ rằng tôi có hầu hết mọi thứ làm việc như tôi muốn, ngoại trừ tôi cần truy cập vào UART 2 và 4. Khi tôi đang sử dụng hình ảnh Debian chuẩn, tôi đã làm điều này với lớp phủ thiết bị và capemgr. Tuy nhiên, tôi thấy rằng hạt nhân được xây dựng với Yocto không có capemgr.Sửa đổi cây thiết bị cho Beaglebone Black

lựa chọn của tôi dường như là:

  1. có được hạt nhân để xây dựng với capemgr, hoặc
  2. sửa đổi các tập tin cây thiết bị với những thay đổi cần thiết.

Tùy chọn 2 có vẻ dễ dàng hơn nhiều.

Lớp phủ cây thiết bị cho UART là herehere. Tôi đã cố gắng để bao gồm những người trong một vài cách.

  1. Tôi đã biên dịch blob cây thiết bị mà tôi đã sử dụng và cố gắng bao gồm các tệp này từ đó.
  2. Tôi đã tải xuống the full set of dts files và cố gắng đưa các lớp phủ cây thiết bị UART vào am335x-boneblack.dts.

Cả hai phương pháp mang lại một cái gì đó lỗi như thế này:

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

Tuy nhiên, tôi nhận thấy rằng tôi nhận được một lỗi tương tự khi cố gắng biên dịch am335x-boneblack.dts thậm chí không có sửa đổi nó, vì vậy tôi có thể thậm chí không làm điều đó đúng. (Sử dụng lệnh dtc -I dts -O dtb -o result.dtb am335x-boneblack.dts)

Rõ ràng là tôi không biết mình đang làm gì. Tôi nghi ngờ các lớp phủ cây thiết bị phải được sửa đổi theo một cách nào đó để được sử dụng theo cách tôi đang cố gắng sử dụng chúng. Hoặc có thể tôi không thực hiện quyền bao gồm (chỉ cần thêm #include vào đầu tệp).

Có ai có ý tưởng gì về việc tôi có thể làm sai không? Là những gì tôi đang cố gắng làm thậm chí có thể?

+2

Bạn có thể muốn bao gồm tệp "lớp phủ" ở đầu * * của tệp **. Dts **, đó là sau khi mọi thứ khác đã được khai báo. Các tệp **. Dtsi ** bình thường không sử dụng 'fragment @ 0 { \t \t target = <&x>; \t \t __overlay__ {...}}', vì vậy chúng phải được chỉnh sửa. – sawdust

+0

Để biên dịch DTB trên Yocto: 'bitbake -f -c deploy your_kernel_recipe', ví dụ: 'bitbake -f -c triển khai linux-imx' – LPs

Trả lời

3

Vì vậy, tôi đã làm việc này bằng cách lấy blob cây thiết bị, giải mã nó và hợp nhất trong các phần từ tệp lớp phủ cây thiết bị và biên dịch lại. Tôi nhận ra tôi cần uarts 1 và 2 thay vì 2 và 4, vì vậy điều này hơi khác so với vấn đề ban đầu của tôi.

Để biên soạn lại các blob cây thiết bị:

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

tôi đã sử dụng hiện UART0 làm ví dụ để chỉ cho tôi các phần quyền làm việc trong

tôi đã thêm một phần dành cho uart1 và uart2 trong. phần pinmux trong phần cho uart0. Nó bây giờ trông giống như sau:

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

Sau đó, các phần nối tiếp cần phải được bật và cho biết sử dụng ghim nào.Tôi sửa đổi phần UART đang tồn tại, và nó bây giờ trông như thế này:

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

Để biên dịch lại cây thiết bị:

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

Nói tóm lại, tôi cố gắng làm việc này mặc dù có ít hoặc không có ý tưởng như thế nào thiết bị cây cối hoạt động.

Tôi cũng cần tắt hdmi mà tôi đã làm bằng cách đặt trạng thái bằng "bị tắt" trong phần hdmi.

Các vấn đề liên quan