微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

u-boot 驱动程序模型:使用 sandbox_defconfig,“demo hello 5”得到错误“Command 'demo' failed: Error -22”

如何解决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 举报,一经查实,本站将立刻删除。