求助!驱动如何触发程序?
一般的,都是应用程序调用驱动程序。
如果让驱动程序告诉应用程序说“设备来了,你该做点什么”,如何实现?
举例说明:
u盘插上去,让2.4.x内核自动挂载它,并ls显示它的根目录内容。(当然,2.6.x不存在此问题,为了举例,差不多这么个意思)
------解决方案--------------------驱动可以主动产生hotplug事件通知应用空间,应用空间的程序(如udev)接收到hotplug事件就可以作相应的动作。当然,用户空间也可有一些守护进程等待事件,平时睡眠,条件满足时唤醒守护进程....
------解决方案--------------------在目前最新版本的内核(2.6.20)中是这样的:
内核调用kobject_uevent函数发送netlink message给用户空间,用户空间的udev在那
接收。你可以通过udevmonitor --env命令看一看当你插入一个u盘时,内核都给用户
空间发了哪些消息。
注:
netlink是内核与用户空间的一种通信方式,可理解为内核里有个socket在那发送数据,
用户空间有个socket在那接收着。