问下device和driver的问题,我的linux笔记本插上一个新设备会自动insmod一个device文件吗?

lizh1009 2018-08-06 12:26:14
最近在学驱动开发,了解了如果在一块板子上安装一个驱动,需要加载一个device.ko和driver.ko的文件,如果device中的name和driver中的id_table数组中的成员匹配,就执行probe函数,在里面新建/dev下的设备.
我有个疑惑,我这样写驱动都是手动加载的device.ko文件和driver.ko文件,如果我linux电脑上突然插了一个新设备,难道电脑会自动给我加载一个device.ko文件和driver.ko文件吗?
...全文
776 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
melo_fang 2019-09-30
  • 打赏
  • 举报
回复
热插拔常见的就是USB和PCIE呗。
比如USB,首先是USB的HUB会监测自己下行端口的变化(插拔)
在检测到设备插入后,尝试枚举。(简单地说就是读取设备的VID PID)

对应的,USB设备的驱动匹配一般就是根据VID PID来匹配的。

probe匹配的执行时机,是在任一设备或者驱动加载时,都会尝试进行匹配。

热插拔的基础,是驱动已经被加载了。
如果某一个USB设备,对应的驱动没有加载,那么在插入时,到枚举这一步是可以的。但是驱动不会匹配。后面手动的Insmod对应驱动应该也是可以正常工作的
melo_fang 2019-09-30
  • 打赏
  • 举报
回复
热插拔常见的就是USB和PCIE呗。
Mack_liu 2019-09-29
  • 打赏
  • 举报
回复
设备驱动都是预先加载好的。你手动加载也可以做到开机自动加载。 你所谓的新设备怎么理解: 1、linux压根没有驱动,这个是设备无法使用的,在总线层面会看到,但也无法使用、 2、linux有驱动,但是之前这个设备没有插入过,现在linux内核里面设备驱动已经相当多了,这种设备得看一般可以直接使用(热插拔),或者重启使用(不支持热插拔)
  • 打赏
  • 举报
回复
楼主,你好,是否会创建一个device设备文件这个取决于具体的驱动程序是如何实现的,内核中驱动种类很多,也有很多框架,比如:USB驱动程序,MMC驱动程序,热插拔磁盘驱动程序等,这些属于热插拔设备,热插拔设备就是可以根据设备当前是否被系统检测到插入而执行总线probe函数,里面会动态创建设备结构体并注册(驱动程序是本身就有得,而且已经注册到总线上),所以新来了一个平台设备注册到了总线上面,probe函数就会动态执行,这就是热插拔设备,而其他的驱动,比如说温度检测模块,PWM模块,ADC模块等的这些驱动,需要自己手动去实现的,是否能出现设备文件也要看probe函数中有没有创建设备文件。总之,要看你的设备类型是什么设备吧,不知道这个回答是否满意
john_liqinghan 2018-12-04
  • 打赏
  • 举报
回复
驱动probe函数
bigPillow 2018-08-09
  • 打赏
  • 举报
回复
ko是加载好的,对于热拔插设备,一般driver都有有个类似检查的线程,有些可能会中断触发,有些可能有每间隔固定的时间醒来检查一下当前的设备,当有新设备插入时,就会读取一些信息,然后进行一些初始化,建立设备节点等工作。
赵4老师 2018-08-07
  • 打赏
  • 举报
回复
引用 3 楼 lizh1009 的回复:
[quote=引用 2 楼 zhao4zhong1 的回复:]
提醒:Linux是开源的。

请问是提示我看源码吗?我不知道从哪看起,无从下手啊.[/quote]
其实我也没看过Linux源代码。
不过我还真不信Linux实现即插即用相关功能对应的源代码以前没人研究和写过相关博客或纸质论文或书籍啥的。
nes-c 2018-08-06
  • 打赏
  • 举报
回复
简单理解为加一个ko或者去掉一个ok肯定是不会有这种动作的
热插拔设备有自己专门的驱动架构,
比如USB热插拔,它有自己的守护进程以及对于的硬件中断去标识对于的接口状态,然后根据具体的接口硬件信息去匹配具体的device结构,进而加载驱动
并没有你说的insmod什么ko ,ko是指内核动态加载驱动的一个窗口,来源于内核编译方式和驱动加载的方式,有没有对驱动不是有绝对有影响的
但是里面对于device_register这些接口的调用以及device_unregister的调用还是有的
lizh1009 2018-08-06
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
提醒:Linux是开源的。

请问是提示我看源码吗?我不知道从哪看起,无从下手啊.
赵4老师 2018-08-06
  • 打赏
  • 举报
回复
提醒:Linux是开源的。

1,318

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧