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 是定义在 'hexagon' 的设备arch/sandbox/dts/sandbox.dtsi
:
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, dn, "colour", NULL);
if (!pdata->sides || !pdata->colour) {
debug("%s: Invalid device tree data\n", __func__);
return -EINVAL;
}
return 0;
}
在这里,我得到 0pdata->sides
和 NULL pdata->colour
。似乎fdtdec_get_int
并fdt_getprop
没有从设备树中获得正确的值。
我注意到dn
这里是int类型,但是dev->node_.of_offset
是long类型。所以dn
包含一个截断的偏移值。但是,我不确定我得到的错误是否与此有关。