sil*_*hts 20 linux linux-device-driver linux-kernel
我很难理解其确切用法 MODULE_DEVICE_TABLE(usb, id_table)
AFAIK这将生成将在以后modprobe插入新设备时使用的映射文件,它将与这些映射文件匹配并在模块匹配时加载模块.
但我的误解是"不是模块加载了吗?"
我的意思是我已经装好了insmod module-name.还是我错过了什么?
bro*_*oot 22
它通常用于支持热插拔,如果尚未加载,则通过加载/插入设备的驱动程序.
这里有一个类似的问题:在Linux中热插拔时检测设备的存在
(来自我的ans)
它的工作原理如下:
代码中的每个驱动程序使用以下方式公开其供应商/设备ID:
MODULE_DEVICE_TABLE(of, omap_mcspi_of_match);
Run Code Online (Sandbox Code Playgroud)在编译时,构建过程从所有驱动程序中提取此信息并准备设备表.
当插入该装置时,设备表是由内核称为,并且如果发现了一个条目相匹配的添加的装置的装置/供应商ID,那么它的模块被加载并初始化.
Ale*_*lko 11
根据Linux设备驱动程序:
MODULE_DEVICE_TABLE用于按depmod程序生成地图文件;/sbin/hotplug设置适当环境变量的内核调用;/sbin/hotplug决定加载哪个模块并实际加载它.如果模块已经加载,那就没问题.我应该再次提到,这种机制只是确保在插入设备时所需的模块就位.这不会将模块与该设备或其他任何东西联系起来.只需加载模块.
要检查特定设备的驱动程序是否正常,请使用match()function from bus_type.
这是我理解事物的方式[Xbuntu 14.04兼容].
编写模块后,我们可以手动加载,也可以自动加载.
insmodmodulename.ko或modprobmodulename.ko自动 - >有多种方式.
复制到/ lib/modules /`uname -r`/kernel/modulename.ko并更新/etc/modules.系统将在启动时加载模块.
写一个脚本/命令加载module.ko一个特定harware add/ change/ remove在一个活动udev规则/etc/udev/rules.d/10-local.rules.您可以使用此方法进行加载/卸载.
MODULE_DEVICE_TABLE注册对模块进行编码.然后加载modulename.ko一次并运行depmod命令[ sudo depmod -a]将新模块添加到/lib/modules/3.16.0-34-generic/modules.alias /lib/modules/3.16.0-34-generic/modules.dep文件中.据我所知,只有在未加载模块时才会加载系统.您可以使用udev事件监视模块加载/卸载:
udevadm监视器
命令.