问题描述
u-boot 版本:2021.07-RC3
[说明]
构建并运行 u-boot:
make sandBox_defconfig
make
./u-boot -d u-boot.dtb
在命令行中输入以下内容:
=> demo hello 5
我收到以下错误:
Command 'demo' Failed: Error -22
[分析]
索引 5 是 arch/sandBox/dts/sandBox.dtsi
中定义的名为“hexagon”的设备:
hexagon {
compatible = "demo-simple";
colour = "white";
sides = <6>;
};
device_probe
将调用 of_to_plat
,最终在 demo_parse_dt
中调用 drivers/demo/demo-uclass.c
。
int demo_parse_dt(struct udevice *dev)
{
struct dm_demo_pdata *pdata = dev_get_plat(dev);
int dn = dev_of_offset(dev);
pdata->sides = fdtdec_get_int(gd->fdt_blob,dn,"sides",0);
pdata->colour = fdt_getprop(gd->fdt_blob,"colour",NULL);
if (!pdata->sides || !pdata->colour) {
debug("%s: Invalid device tree data\n",__func__);
return -EINVAL;
}
return 0;
}
这里,pdata->sides
为 0,pdata->colour
为 NULL。似乎 fdtdec_get_int
和 fdt_getprop
没有从设备树中获得正确的值。
我注意到这里的 dn
是 int 类型,但 dev->node_.of_offset
是 long 类型。所以 dn
包含一个截断的 offset 值。但是,我不确定我得到的错误是否与此有关。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)