BBB - 自动在启动时加载设备树叠加层

4

我有一个设备树覆盖层:

/dts-v1/;
/plugin/;

/ {
    compatible = "ti,beaglebone", "ti,beaglebone-black";
    part-number = "mousetraps";
    version = "00A1";

    /* https://github.com/derekmolloy/boneDeviceTree/blob/master/docs/BeagleboneBlackP9HeaderTable.pdf */
    fragment@0 {
            target = <&am33xx_pinmux>;
            __overlay__ {
                    mousetrap_pins: pinmux_mousetrap_pins {
                            pinctrl-single,pins = <
                                    0x070 0x2f /* P9_11 30 INPUT MODE7 none */
                                    0x074 0x2f /* P9_13 31 INPUT MODE7 none */
                                    0x040 0x2f /* P9_15 48 INPUT MODE7 none */
                                    0x15c 0x2f /* P9_17 05 INPUT MODE7 none */
                            >;
                    };
            };
    };

    fragment@1 {
            target = <&ocp>;
            __overlay__ {
                    test_helper: helper {
                            compatible = "bone-pinmux-helper";
                            pinctrl-names = "default";
                            pinctrl-0 = <&mousetrap_pins>;
                            status = "okay";
                    };
            };
    };
};

我可以成功加载以下内容:

echo mousetraps:00A1 >/sys/devices/bone_capemgr.8/driver/bone_capemgr.8/slots ; dmesg | grep bone

我该如何配置BBB/Angstrom使其在启动时自动加载?

更具体地说,我该如何将dtbo文件挂载到正常的设备树加载机制中?我知道我可以将echo添加到linux init脚本中,但似乎必须有某些东西触发dtbo文件的加载。

3个回答

3

您可以在uEnv.txt中添加一个参数,该参数引用您的新叠加层,如先前建议的那样。将以下字符串添加到uEnv.txt的末尾即可:

nano /mnt/boot/uEnv.txt

#add this to the end of the single line of uEnv.txt:

capemgr.enable_partno=mousetraps

这里详细介绍了整个过程


1
有一件事情你不应该忘记,当使用Debian时,我需要在capemgr文件中添加选项: nano /etc/default/capemgr 然后在你的情况下,添加: CAPE=mousetraps:00A1附:在Beaglebone上,版本通常为:“00A0”。 - Melroy van den Berg

3
一种方法是将dtbo复制到/lib/firmware中,并修改内核bootargs(在uEnv.txt中)中的capemgr.extra_override参数,使其指向dtbo文件。这种技术还需要修改/arch/arm/boot/dts/am335-bone-common.dtsi文件。详细信息请参见此讨论
请注意,在Beaglebone Black上,从文件系统加载设备树叠加层似乎是一个特定的问题,只出现在最近的内核(来自官方存储库)。为了克服这个问题,可以使用一种替代方法编译叠加层,具体描述在这里

关于在启动时加载设备树叠加层的问题,请参见FBTFT BeagleBone Black-启用启动时的叠加层 - Craig McQueen

0

这对我有用:

  • BeagleBone Black rev C
  • Debian 8.7 2017-03-19 4GB SD IoT,来自latest-images
  • Kernel 4.4.68-ti-r106

从@craig-mcqueen提供的链接中,并使用此设备树叠加示例

/boot/uboot/uEnv.txt文件中(DM-GPIO-Test是我的叠加名称):

cmdline=coherent_pool=1M cape_universal=enable bone_capemgr.enable _partno=DM-GPIO-Test noapic

创建 /etc/initramfs-tools/hooks/dtbo
#!/bin/sh
set -e
. /usr/share/initramfs-tools/hook-functions

# Copy Device Tree fragments
mkdir -p "${DESTDIR}/lib/firmware"
cp -p /lib/firmware/*.dtbo "${DESTDIR}/lib/firmware/"

将其设为可执行文件:

sudo chmod +x /etc/initramfs-tools/hooks/dtbo

备份 initrd:

sudo cp /boot/initrd.img-4.4.68-ti-r106 /boot/initrd.img-4.4.68-ti-r106.bak

更新 initrd:

/opt/scripts/tools/developers/update_initrd.sh

重新启动

sudo reboot

检查它是否已被加载:

root@beaglebone:/home/debian# cat /sys/devices/platform/bone_capemgr/slots
0: PF----  -1 
1: PF----  -1 
2: PF----  -1 
3: PF----  -1 
4: P-O-L-   0 Override Board Name,00A0,Override Manuf,DM-GPIO-Test

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接