首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的自定义披肩的设备在引导时无法加载,但可以手动加载

我的自定义披肩的设备在引导时无法加载,但可以手动加载
EN

Stack Overflow用户
提问于 2014-06-10 07:11:17
回答 5查看 9.4K关注 0票数 4

如果我从一个shell加载我自己的设备树覆盖层,它会很好地加载,但是如果我试图在引导时加载它,它就不会这样做。我遗漏了什么?

这是一个debian BeagleBone黑,我用bone 7.4-2014-04-23-2 gb.img.xz设置。

3.8.13-bone47 47 #1 SMP Fri 4月11日01:36:09 UTC 2014 armv7l GNU/Linux

下面是我对/boot/uboot/uEnv.txt所做的更改:

optargs=capemgr.enable_partno=BB-FOO-GPIO

这是dmesg \ grep bone的输出:

基板:‘A335BNLT,00A5,4049BBBBK 7400’ 兼容-基板=ti,beaglebone-黑色 开槽#0:没有找到斗篷 开槽#1:找不到斗篷 二号槽:没有找到斗篷 三号槽:没有找到斗篷 槽#4:特定覆盖 bone:在插槽4处使用覆盖eeprom数据 插槽#4:'Bone-LT-eMMC-2G,00A0,德州仪器,BB-BONE-EMMC-2G‘ 槽#5:特定覆盖 bone:使用覆盖eeprom数据的5槽 插槽5:‘骨黑-HDMI,00A0,德州仪器,BB-BONELT-HDMI’ 槽#6:特定覆盖 bone:使用覆盖eeprom数据的第6插槽 插槽#6:‘骨-黑色-HDMIN,00A0,德州仪器,BB-BONELT-HDMIN’ enabled_partno part_number‘BB-FOO’,版本'N/A',prio '0' 槽#7:泛型覆盖 bone:使用覆盖eeprom数据的第7插槽 插槽7:“覆盖板名称,00A0,重写Manuf,BB-FOO-GPIO” 装载机:前槽-4 BB-骨-EMMC-2G:00A0 (prio 1) 装载机:检查槽-4 BB-BONE-EMMC-2G:00A0 (prio 1) 装载机:前槽-5 BB-BONELT-HDMI:00A0 (prio 1) 装载机:检查槽-5 BB-BONELT-HDMI:00A0 (prio 1) 装载机:前槽-6 BB-BONELT-HDMIN:00A0 (prio 2) 装载机:检查槽-6 BB-BONELT-HDMIN:00A0 (prio 2) 初始化好了。 装载机:检查槽-4 BB-BONE-EMMC-2G:00A0 (prio 1) 装载机:检查槽-5 BB-BONELT-HDMI:00A0 (prio 1) 装载机:检查槽-6 BB-BONELT-HDMIN:00A0 (prio 2) 加载程序:前插槽-7 BB-FOO:00A0 (prio 0) 加载程序:检查槽-7 BB-FOO:00A0 (prio 0) 加载程序:后插槽-7 BB-FOO:00A0 (prio 0) 插槽#7:请求基于BB-Foo-GPIO-00A0.dtbo的部件编号/版本 插槽#7:请求固件‘BB-FOO 00A0.dtbo’的板名“重写板名”,版本'00A0' 未能加载固件BB-Foo-GPIO-00A0.dtbo‘ 加载程序:加载槽失败-7 BB-FOO:00A0 (prio 0) 装载机:检查槽-6 BB-BONELT-HDMIN:00A0 (prio 2) 装载机:检查槽-5 BB-BONELT-HDMI:00A0 (prio 1) 装载机:后槽-5 BB-BONELT-HDMI:00A0 (prio 1) 插槽5:请求固件‘cape HDMI-00A0.dtbo’的板名为“Bone-Black-HDMI”,版本为“00A0” 插槽#5:加载dtbo‘cape HDMI-00A0.dtbo’;转换为活树 槽#5:#4覆盖 装载机:检查槽-4 BB-BONE-EMMC-2G:00A0 (prio 1) 装载机:后槽-4 BB-骨-EMMC-2G:00A0 (prio 1) 插槽4:请求板名为“Bone-LT-eMMC-2G”的固件‘cape 2g-emmc1.dtbo’,版本“00A0” 插槽#4: dtbo‘斗篷-骨-2g-emmc1.dtbo’加载;转换为活树 槽#4:#2覆盖 槽#4:应用#2覆盖。 装载机:完成槽-4 BB-BONE-EMMC-2G:00A0 (prio 1) 装载机:检查槽-6 BB-BONELT-HDMIN:00A0 (prio 2) 槽#5:应用#4覆盖。 装载机:完成槽-5 BB-BONELT-HDMI:00A0 (prio 1) 装载机:检查槽-6 BB-BONELT-HDMIN:00A0 (prio 2) 装载机:后槽-6 BB-BONELT-HDMIN:00A0 (prio 2) 插槽#6:请求固件‘cape HDMIN-00A0.dtbo’的板名为“boneblack HDMIN”,版本为“00A0”。 插槽#6:加载dtbo‘cape hdmin-00A0.dtbo’;转换为活树 插槽#6: BB-BONELT-HDMIN冲突P8.45 (#5:BB-BONELT-HDMI) 槽#6:验证失败 装载机:加载槽失败-6 BB-BONELT-HDMIN:00A0 (prio 2)

下面是我的设备树覆盖的源文件:

代码语言:javascript
复制
/dts-v1/;
/plugin/;

/ {
    compatible = "ti,beaglebone", "ti,beaglebone-black";

    /* Identification */
    part-number = "BB-FOO-GPIO";
    version = "00A0";

    /* Resources required */
    exclusive-use =
        "P9.27",        /* XXX */
        "P9.23",        /* XXX */
        "gpio3_19",     /* XXX */
        "gpio1_17";     /* XXX */

    fragment@0 {
        target = <&am33xx_pinmux>;
        __overlay__ {
            foo_gpio_pins: pinmux_gpio_helper_pins {
                pinctrl-single,pins = <
                    0x1a4 0x0f      /* P9.27 GPIO3_19: MODE7 - OUTPUT */
                    0x044 0x2f      /* P9.23 GPIO1_17: MODE7 - INPUT */
                >;
            };
        };
    };

    fragment@1 {
        target = <&ocp>;    /* On-chip Peripherals */
        __overlay__ {

            foo_gpio_helper {
                compatible = "gpio-of-helper";
                pinctrl-names = "default";
                pinctrl-0 = <&foo_gpio_pins>;
                status = "okay";

                foo_test_output {
                    gpio-name = "foo_test_output";
                    gpio = <&gpio4 19 0x00>;            /* gpio4 => GPIO-3 */
                    output;
                    init-high;
                };

                foo_test_input {
                    gpio-name = "foo_test_input";
                    gpio = <&gpio2 17 0x00>;            /* gpio2 => GPIO-1 */
                    input;
                    count-rising-edge;
                    count-falling-edge;
                };
            };
        };
    };
};

~

(我是这样编译的:dtc -O dtb -o BB-FOO 00A0.dtbo -b 0 -@ BB-FOO 00A0.dts}

现在使用回波BB> $SLOTS"手动加载它,它加载得很好。

dmesg -c给了我:

bone_capemgr.9 bone_capemgr.9: part_number‘BB-FOO’,版本'N/A‘ bone_capemgr.9 bone_capemgr.9:槽#8:泛型覆盖 bone_capemgr.9 bone_capemgr.9: bone:在槽8处使用重写eeprom数据 bone_capemgr.9 bone_capemgr.9:插槽#8:‘覆盖板名称,00A0,覆盖曼纽夫,BB-FOO-GPIO’ bone_capemgr.9 bone_capemgr.9:插槽#8:请求基于BB-Foo-GPIO-00A0.dtbo的部件编号/版本 bone_capemgr.9 bone_capemgr.9:槽#8:请求固件'BB-FOO-GPIO-00A0.dtbo‘的板名“重写板名”,版本“00A0” bone_capemgr.9 bone_capemgr.9:槽#8: dtbo 'BB-FOO-GPIO-00A0.dtbo‘加载;转换为活动树 bone_capemgr.9:槽#8:#2覆盖 状态为17的of_get_named_gpio_flags退出 foo_gpio_helper.15:已分配的GPIO id=0 状态115退出的of_get_named_gpio_flags foo_gpio_helper.15:已分配的GPIO id=1 帮助程序foo_gpio_helper.15:就绪 骨- bone_capemgr.9:槽#8:应用#2覆盖。

/sys/devices/bone_capemgr.9/slots猫给了我我想要的东西:

0: 54:PF

1: 55:PF

2: 56:PF

3: 57:PF

4: ff:P-O-L骨-LT-EMMC-2G,00A0,德州仪器,BB-BONE-EMMC-2G

5: ff:P L骨-黑-HDMI,00A0,德州仪器,BB-BONELT-HDMI

8: ff:P覆盖板名称,00A0,Override,BB-FOO-GPIO

那我错过了什么?为什么它不会在启动时加载,但它会从一个shell加载?问题似乎与固件未加载有关.我不明白。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-07-08 12:54:22

这个问题有一个在链接中描述的解决方案:斗篷

我希望能帮上忙,乔治

票数 5
EN

Stack Overflow用户

发布于 2015-05-08 20:56:07

造成问题的原因是,当内核试图加载覆盖时,根文件系统(在我的eMMC上)还没有挂载。我通过手动修改initramfs解决了这个问题:

  • 按照关于例如http://backreference.org/2010/07/04/modifying-initrdinitramfs-files/的说明来解压缩文件/boot/uboot/initrd.img
  • 将文件夹/lib/固件添加到解压缩存档中,并将*.dtbo文件复制到此文件夹中
  • 再次打包并压缩initrd,并将其复制回/boot/uboot (同时保留原始文件的副本)。

在下一次重新启动时,应该加载dtbo:

代码语言:javascript
复制
 0: 54:P---L BEAGLE-GO-CAPE,00A0,FH-Aachen/FZJ,cape-beaglego
 1: 55:PF--- 
 2: 56:PF--- 
 3: 57:PF--- 
 4: ff:P-O-L Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G
 5: ff:P-O-- Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI
 6: ff:P-O-- Bone-Black-HDMIN,00A0,Texas Instrument,BB-BONELT-HDMIN
票数 2
EN

Stack Overflow用户

发布于 2014-06-14 18:15:01

我刚刚解决了消除dtc命令中的"-b 0“子句的相同问题。我没有花太多时间来深入研究,但是-b的意思是“设置物理引导CPU”(从手动页面),而且可能是在启动过程中发生冲突。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24134958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档