如果我从一个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)
下面是我的设备树覆盖的源文件:
/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加载?问题似乎与固件未加载有关.我不明白。
发布于 2014-07-08 12:54:22
这个问题有一个在链接中描述的解决方案:斗篷
我希望能帮上忙,乔治
发布于 2015-05-08 20:56:07
造成问题的原因是,当内核试图加载覆盖时,根文件系统(在我的eMMC上)还没有挂载。我通过手动修改initramfs解决了这个问题:
在下一次重新启动时,应该加载dtbo:
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发布于 2014-06-14 18:15:01
我刚刚解决了消除dtc命令中的"-b 0“子句的相同问题。我没有花太多时间来深入研究,但是-b的意思是“设置物理引导CPU”(从手动页面),而且可能是在启动过程中发生冲突。
https://stackoverflow.com/questions/24134958
复制相似问题