linux – 修改Beaglebone Black的设备树

前端之家收集整理的这篇文章主要介绍了linux – 修改Beaglebone Black的设备树前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我使用Yocto为Beaglebone Black创建一个小的linux映像.我想我的大部分工作都像我想要的那样,除了我需要访问UART 2和4.当我使用标准的Debian图像时,我用设备树覆盖和capemgr做了这个.但是,我发现使用Yocto构建的内核没有capemgr.

我的选择似乎是:

>使用capemgr构建内核,或者
>使用必要的更改修改设备树文件.

选项2似乎更容易.

UART的设备树覆盖是herehere.我已经尝试将它们包含在几个方面.

>我反编译了我一直在使用的设备树blob并尝试过
从那里包含这些文件.
>我下载了the full set of dts files并试图包括
am335x-boneblack.dts中的UART设备树覆盖.

这两种方法都会产生如下错误

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

但是,我注意到在尝试编译am335x-boneblack.dts时我得到了类似的错误,即使没有修改它,所以我可能甚至没有做到这一点. (使用命令dtc -I dts -O dtb -o result.dtb am335x-boneblack.dts)

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

有没有人有任何想法我可能做错了什么?我正在努力做甚么可能吗?

最佳答案
所以我通过获取设备树blob,反编译它,并从设备树覆盖文件中合并并重新编译来实现这一点.我意识到我需要uarts 1和2而不是2和4,所以这与我原来的问题略有不同.

要反编译设备树blob:

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

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

我在uart0部分的pinmux部分添加了uart1和uart2的部分.它现在看起来像这样:

  1. pinmux_uart0_pins {
  2. pinctrl-single,pins = <0x170 0x30 0x174 0x0>;
  3. linux,phandle = <0x27>;
  4. phandle = <0x27>;
  5. };
  6. bb_uart1_pins: pinmux_bb_uart1_pins {
  7. pinctrl-single,pins = <
  8. 0x184 0x20 /* P9.24 uart1_txd.uart1_txd OUTPUT */
  9. 0x180 0x20 /* P9.26 uart1_rxd.uart1_rxd INPUT */
  10. >;
  11. };
  12. bb_uart2_pins: pinmux_bb_uart2_pins {
  13. pinctrl-single,pins = <
  14. 0x150 0x21 /okay* spi0_sclk.uart2_rxd | MODE1 */
  15. 0x154 0x01 /* spi0_d0.uart2_txd | MODE1 */
  16. >;
  17. };

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

  1. serial@44e09000 {
  2. compatible = "ti,omap3-uart";
  3. ti,hwmods = "uart1";
  4. clock-frequency = <0x2dc6c00>;
  5. reg = <0x44e09000 0x2000>;
  6. interrupts = <0x48>;
  7. status = "okay";
  8. dmas = <0x26 0x1a 0x26 0x1b>;
  9. dma-names = "tx","rx";
  10. pinctrl-names = "default";
  11. pinctrl-0 = <0x27>;
  12. };
  13. serial@48022000 {
  14. compatible = "ti,hwmods = "uart2";
  15. clock-frequency = <0x2dc6c00>;
  16. reg = <0x48022000 0x2000>;
  17. interrupts = <0x49>;
  18. status = "okay";
  19. dmas = <0x26 0x1c 0x26 0x1d>;
  20. dma-names = "tx","rx";
  21. pinctrl-names = "default";
  22. pinctrl-0 = <&bb_uart1_pins>;
  23. };
  24. serial@48024000 {
  25. compatible = "ti,hwmods = "uart3";
  26. clock-frequency = <0x2dc6c00>;
  27. reg = <0x48024000 0x2000>;
  28. interrupts = <0x4a>;
  29. status = "okay";
  30. dmas = <0x26 0x1e 0x26 0x1f>;
  31. dma-names = "tx","rx";
  32. pinctrl-names = "default";
  33. pinctrl-0 = <&bb_uart2_pins>;
  34. }

要重新编译设备树:

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

简而言之,尽管几乎不知道设备树是如何工作的,但我设法让它工作.

我还需要通过在hdmi部分中将状态设置为“disabled”来禁用hdmi.

猜你在找的Linux相关文章