欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > platform device的名字是怎么生成的?

platform device的名字是怎么生成的?

2025/9/25 22:39:16 来源:https://blog.csdn.net/aspirestro/article/details/143532289  浏览:    关键词:platform device的名字是怎么生成的?

platform device的名字是怎么生成的?

Qemu ARM64启动后,可以看到,platform device的名字有两种,如两个红框所示:

根据调用堆栈,在创建platform device的过程中,会调用of_device_make_bus_id来创建唯一的名字:

static void of_device_make_bus_id(struct device *dev)

{

    //从 dev->of_node 获取设备树节点 node

    struct device_node *node = dev->of_node;

    const __be32 *reg;

    u64 addr;

    /* 构造名称,必要时使用父节点以确保唯一性;使用 while 循环遍历 node 的父节点,直到到达根节点 */

    while (node->parent) {

        /*

         * 在每个节点上,检查是否存在 reg 属性

         */

        reg = of_get_property(node, "reg", NULL);

        if (reg && (addr = of_translate_address(node, reg)) != OF_BAD_ADDR) {

            dev_set_name(dev, dev_name(dev) ? "%llx.%pOFn:%s" : "%llx.%pOFn",

                         (unsigned long long)addr, node,

                         dev_name(dev));

            return;

        }

        /* format arguments only used if dev_name() resolves to NULL */

        dev_set_name(dev, dev_name(dev) ? "%s:%s" : "%s",

                     kbasename(node->full_name), dev_name(dev));

        node = node->parent;

    }

}

使用 while 循环遍历 node 的父节点,直到到达根节点。在每个节点上,检查是否存在 reg 属性。

第一种情况:
如果存在 reg 属性,调用of_translate_address尝试将地址翻译为物理地址。如果翻译成功且地址有效(不等于 OF_BAD_ADDR),调用dev_set_name则生成唯一名称并返回。如果 dev_name(dev) 已经有值,将其附加到新生成的名称后面。

dts的片段:

生成的名字:

第二种情况:

如果到达了根节点,仍然不存在reg 属性,或者调用of_translate_address失败,使用节点的 full_name 生成名称。

dts片段:

知其所以然,不再迷惑了!

感谢点赞关注收藏!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词