美文网首页BB-black开发板[Linux arm-v8]
设备驱动模型的参数传递--Apple的学习笔记

设备驱动模型的参数传递--Apple的学习笔记

作者: applecai | 来源:发表于2020-11-15 12:21 被阅读0次

    一,前言

    我喜欢用ftrace来查看调关系。当然设备和驱动通过总线来匹配这个函数调用是比较熟悉了,但是传递的函数参数我一般没有太关心,反正都是从设备树或者driver的数组中灌入的数据。于是完成了i2c设备eeprom的驱动后,我再分析下源码。

    二,bus_foreach_dev

    此函数就是在总线上遍历匹配的,其中传递的参数device * 从哪里来呢。通过5.4kernel源码搜索bus->p->klist_devices搜索到添加节点到链表中的函数为klist_add_tail,此函数位于bus_add_device中并且为device_add调用。

    三,klist_add_tail

    此函数中传递的参数dev->p->knode_bus又是从哪里来的呢?后来找了一圈发现,我不应该问从哪里来的,这就是个设备的私有链表和节点通过链表挂载的一种方法。参考linux内核之klist链表,因为通过万能的container_of就可以找到驱动设备。kobject+keset是最底层的数据结构派生出了device和driver结构体,继续有派生出platform_device,但是我之前我忽略了dtb通过device_node转换成了platform_device这个关键内容。我做了简单的调试,把参数的来源和指针的调用关系再看清楚些,好了,我今天的阶段性驱动模型理论回顾完成咯~

    image.png
    关于device_node转换成platform_device,参考网址如下
    1.内核对设备树的处理(四)__device_node转换为platform_device
    2.调用of_platform_populate函数创建platform device
    3.论dts中的of_platform_populate如何选择性加载device node为platform device

    相关文章

      网友评论

        本文标题:设备驱动模型的参数传递--Apple的学习笔记

        本文链接:https://www.haomeiwen.com/subject/ztdnbktx.html