修改Beaglebone Black的设备树

我用Yocto为Beaglebone Black创build了一个小型的Linux映像。 我想我拥有的所有东西都像我想要的那样工作,除了我需要访问UART 2和4.当我使用标准的Debian镜像时,我使用设备树覆盖和capemgr进行了这一操作。 但是,我发现用Yocto构build的内核没有capemgr。

我的select似乎是:

  1. 让内核与capemgr构build,或者
  2. 修改设备树文件进行必要的更改。

选项2似乎更容易。

UART的器件树覆盖在这里和这里 。 我已经试图将这些包括在一起。

  1. 我反编译我一直使用的设备树blob,并试图从那里包括这些文件。
  2. 我下载了全套的dts文件,并试图在am335x-boneblack.dts中包含UART设备树覆盖图。

两种方法都会产生这样的错误:

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

但是,我注意到在尝试编译am335x-boneblack.dts时,即使没有修改,也得到类似的错误,所以我很可能不会这样做。 (使用命令dtc -I dts -O dtb -o result.dtb am335x-boneblack.dts)

显然我不知道我在做什么。 我怀疑设备树覆盖必须以某种方式进行修改,以便以我尝试使用它们的方式使用。 或者,也许我没有做包括权利(只是添加一个#包括文件的顶部)。

有没有人有任何想法我可能做错了? 我正试图做甚至可能吗?

所以我通过把我的设备树blob,反编译它,并从设备树覆盖文件合并部分,并重新编译。 我意识到我需要飞镖1和2而不是2和4,所以这是比我原来的问题略有不同。

反编译设备树blob:

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

我以现有的uart0为例,向我展示了正确的部分。

我在uart0的章节下面的pinmux部分为uart1和uart2添加了一个部分。 现在看起来像这样:

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

然后,串行部分需要启用并告诉使用什么引脚。 我修改了现有的uart部分,现在看起来像这样:

 serial@44e09000 { 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>; }; serial@48022000 { 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>; }; serial@48024000 { 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>; } 

重新编译设备树:

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

简而言之,尽管不知道设备树是如何工作的,但我仍然设法做到这一点。

我还需要通过在hdmi部分设置等于“disabled”的状态来禁用hdmi。