第九章 理一理驱动程序的编写-9.6-13driver注册-chrdev创建-节点获取及配置

9.6.platform_driver_register是怎么进行驱动注册的?

    设备树需要uboot传递给内核,参考设备树专题的视频,大体的流程是uboot把设备树编译成的.dtb文件的地址传递给内核,内核提取.dtb的根节点的compatible属性来匹配machine_desc,解析chosen节点、memory节点、#address-cells和#size-cells属性,为设备树分配内存。再去遍历整个.dts文件的节点将其转换成device_nodes并将properties填充到各个nodes,最终构建出device-tree。再根据compatible的转换规定将某些device_nodes转化成platform_devices,而不能转化成device_nodes的节点内核提供专门的处理函数。到这里设备树到内核的转换过程已经清楚了,回到leddrv.c中。先沿着leddrv.c的执行过程一路看下去。

    下午看了2篇连续的博客,写的很好!但是看的很是晕乎!自己把函数调用过程过了一遍就清楚了,整理出来一张执行过程。

有篇博文写的很好记录下:https://blog.csdn.net/Richard_LiuJH/article/details/45825333

    上图也解决了问题7_probe函数的形参是谁给的?

9.7.gpiod_get函数是怎么找到设备树中的led节点?

在probe函数中主要做了4件事:

   a.从leds_my节点中获取led-gpios属性;

   b.注册file_operations结构体,创建主设备;

   c.创建设备类;

   d.创建次设备;

   目前有1个相关文档:Linux-4.9.88-Docs-gpio-consumer.txt,依次看下程序是如何执行的?先追踪下gpiod_get()的执行过程:

gpiod_get()
--->gpiod_get_index()
----->of_find_gpio()
------->of_get_named_gpiod_flags()
--------->of_parse_phandle_with_args()
--------->of_find_gpiochip_by_xlate()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值