linux设备驱动模型

本文介绍了Linux设备驱动模型,强调了设备、总线和驱动之间的关系。设备通过虚拟或实际总线连接,如/dev目录下的设备文件。sysfs虚拟文件系统用于管理设备,设备驱动在匹配时由bus_match函数决定。在驱动注册时会尝试找到匹配的设备,并通过probe函数进行交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

所有驱动都在 设备 总线 驱动 三个模型中

遇到一些看门狗等没有对应总线类型的需要使用虚拟总线


/dev,设备文件存储目录,应用程序通过对这些文件的读写和控制,可以访问实际的设备;


/sys/devices 目录,按照设备挂接的总线类型,组织成层次结构,保存了系统所有的设备;是文件系统管理设备的最重要的目录结构;这是内核设备按总线类型分层放置的目录结构, devices 中的所有设备都是连接于某种总线之下,在这里的每一种具体总线之下可以找到每一个具体设备的符号链接,它也是构成 Linux 统一设备模型的一部分;


/sys/dev 下有两个子目录,block和char,存放的是块设备和字符设备的主次号码,形式为(major:minor),它指向 /sys/devices 目录下的设备。


1. sysfs的挂载点是/sys目录, sysfs是一个虚拟的文件系统(还有其它的虚拟文件系统,例如usbfs和procfs),sysfs导出了内核的数据结构。
2. /sys/dev/ 和/sys/devices是sysfs按面向对象管理的思想来组织,sysfs最主要是用来描绘Linux kernel 2.6中的设备驱动模型,用户态的后台程序会动态地周期性的扫描/sys目录中的属性项来自动管理设备文件(也称为设备节点),从而在/dev目录会建立或者删除对应的设备文件。




总线处理器设备间的通道,所有设备都通过总线相连。

bus_type描述,

注册:bus_register,出现在sysfs下的sys/bus目录下面

删除:bus_unregister


当一个新的驱动或者设备添加到总线的时候, match(driver, device)被调用,来比较驱动和设备是否匹配


uevent产生热插拔事件之前,允许总线事件

总线属性:bus_attribute


1.注册总线,bus_register,包括.name和.match

2.创建属性文件,bus_create_file,包含bus_type和属性操作bus_attr_version


BUS_ATTR是个什么东西,可以变出bus_attr_version


设备 struct device

.bus  对应的总线

.parent

.release


注册device_register

注销device_unregister


创建属性文件device_create_file

删除属性文件device_remove_file


1.注册总线,bus_register,包括.name和.match

2.创建属性文件,bus_create_file,包含bus_type和属性操作bus_attr_version

3.注册总线设备

初始化设备  my_dev.bus_id

注册设备  device_register

创建属性文件  device_create_file


驱动  struct device_driver

当找到与之匹配的设备的时候会调用probe函数指针

.name

.bus  指明总线

.probe 找到设备后调用

.remove 删除时调用


1.注册驱动 driver_register

2.创建属性文件  driver_create_file


问题:

1.什么时候去找对应的设备

driver_register时寻找


2.找到的标准是什么

总线的match函数来完成,定义了匹配标准,比如my_match(){return !strcmp(dev->busid, driver->name, strlen(driver->name)}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值