原标题:全面掌握Linux驱动框架——字符设备驱动、I2C驱动、总线设备驱动、NAND FLASH驱动
字符设备驱动
哈~ 这几天都在发图,通过这种方式,我们希望能帮大家梳理学过的知识,全局的掌握Linux驱动框架,今天带来的是字符设备驱动,制图者是很久以前的答疑助手兰天王,原贴2012年5月20日发布于论坛(www.100ask.org)。
众所周知,字符设备是Linux驱动基础也是重点,还没学到字符设备那章的同学当做预习,已经学完了的可以很好复习,试想一下,关掉书和视频,你能参考内核自带的驱动写出LED字符设备驱动来吗?
以下是Linux字符设备驱动框架图:
总线设备驱动
总线设备驱动模型,做了一点小笔记,大牛略过。
一、Linux系统的驱动框架的基础很大一部分是围绕着总线设备驱动模型展开的。
二、涉及3个重要结构体:
struct bus_type:总线
struct device :设备
struct device_driver:驱动
三、结构体核心代码分析(2.6.38内核)
其中,struct subsys_private包含一个设备链表(struct klist klist_devices)和一个驱动链表( struct klist klist_drivers)
任何建立在平台总线设备驱动模型基础上的驱动代码(如平台驱动,PCI驱动,USB驱动,I2C驱动,SPI驱动等),它们的设备结构体(如platform_device, pci_dev,usb_device,i2c_device, spi_device等)都包含一个struct device结构体,当这些驱动向内核注册各式各样的设备时,其实最终都会调用到:
同理,任何建立在平台总线设备驱动模型基础上的驱动代码(如平台驱动,PCI驱动,USB驱动,I2C驱动,SPI驱动等),它们的驱动结构体(如platform_driver, pci_driver,usb_driver,i2c_driver, spi_driver等)都包含一个struct device_driver结构体,当这些驱动向内核注册各式各样的驱动时,最终都会调用到:
int driver_register(struct device_driver *drv)
{
// 将驱动绑定在对应的总线上,主要工作把驱动(device_driver)添加到总线(bus_type)的klist_drivers链表中去
ret = bus_add_driver(drv);
}
无论是调用driver_register()注册驱动, 还是用device_register注册设备, 内核都会调用总线的match函数来探测是否有合适device_driver的device或者是否有合适device的device_driver,如果match成功,则会调用device_driver的probe函数进行更进一步的探测。
这样我们就可以站在一个新的高度上看驱动了
更具体的内容比如怎么探测设置probe请看韦东山2期驱动大全相关视频。
I2C驱动框架
学习《韦东山---第二期《深入LINUX驱动》第24/32课:I2C 驱动时,按东山大哥的思路画了一张框架图:
想要I2C驱动框架高清图,添加“工程师助理2号”(微信号:gongchengshizhuli2)聊天窗口回复关键字“linux驱动”,稍后会给你提供百度云下载地址。
NAND FLASH驱动
学习《韦东山---第二期《深入LINUX驱动》第20课:NAND FLASH 驱动时,按东山大哥的思路画了一张框架图:
想要NAND FLASH驱动框架高清图,添加“工程师助理2号”(微信号:gongchengshizhuli2)聊天窗口回复关键字“linux驱动”,稍后会给你提供百度云下载地址。
想系统学习嵌入式Linux课程吗,想成为一名合格的嵌入式工程师吗?
百问科技联合发烧友网推出最新嵌入式Linux工程师训练营活动,从Linux基础知识入门、到Linux驱动设计、Linux项目实战,带您一步步成为优秀的Linux工程师。
加入Linux工程师训练营,即可与讲师学员们互相交流Linux学习过程中遇到的问题、学习心得,获得课程学习效果及时反馈。全程专属qq群答疑+不定期直播答疑+测试作业,不怕学不会,零基础也能学好嵌入式Linux开发!
立即报名
韦东山嵌入式Linux工程师训练营!
责任编辑: