当前位置: 首页 > article >正文

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片段:

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

感谢点赞关注收藏!


http://www.kler.cn/a/381185.html

相关文章:

  • 单臂路由技术,eNSP实验讲解
  • 深度学习基础知识-损失函数
  • 使用wordcloud与jieba库制作词云图
  • 砥砺十年风雨路,向新而行创新程丨怿星科技十周年庆典回顾
  • 【用Java学习数据结构系列】泛型上界与通配符上界
  • 全面解析:容器化技术及其应用
  • 滑动窗口习题篇(下)
  • FreeRTOS学习8——开启任务调度器API函数简介
  • 【运维项目经历|046】Jenkins自动化部署与持续集成优化项目
  • MySQL秘密武器:索引与事务
  • 【51单片机】DS1302实时时钟
  • RabbitMQ最全教程-Part1(基础使用)
  • 活着就好20241106
  • 人脸检测之MTCNN算法网络结构
  • VUE+Vite之环境文件配置及使用环境变量
  • 全面解析:区块链技术及其应用
  • 轴承故障全家桶更新 | 基于时频图像的分类算法
  • 科技改变阅读习惯:最新研究揭示电子阅读器的普及趋势
  • WonderWorld: Interactive 3D Scene Generation from a Single Image 论文解读
  • 【go从零单排】在 Go 语言中,:= 是什么意思?
  • TOEIC 词汇专题:旅游计划篇
  • ClickHouse数据库SSL配置和SSL连接测试
  • C语言 | Leetcode C语言题解之第540题有序数组中的单一元素
  • MySQL详细安装教程
  • 【机器学习】25. 聚类-DBSCAN(density base)
  • 云计算Openstack 虚拟机调度策略