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_intfdt_getprop 没有从设备树中获得正确的值。
我注意到这里的 dnint 类型,但 dev->node_.of_offsetlong 类型。所以 dn 包含一个截断的 offset 值。但是,我不确定我得到的错误是否与此有关。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)