如何解决u-boot 驱动程序模型:使用 sandbox_defconfig,“demo hello 5”得到错误“Command 'demo' failed: Error -22”
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 举报,一经查实,本站将立刻删除。