努力成为linux kernel hacker的人李万鹏原创作品,为梦而战。转载请标明出处
http://blog.csdn.net/woshixingaaa/archive/2011/05/15/6422862.aspx
每次写驱动都要手动创建设备文件过于麻烦,使用设备管理文件系统则方便很多。在2.6的内核以前一直使用的是devfs,但是它存在许多缺陷。它创建了大量的设备文件,其实这些设备更本不存在。而且设备与设备文件的映射具有不确定性,比如U盘即可能对应sda,又可能对应sdb。没有足够的主/辅设备号。2.6之后的内核引入了sysfs文件系统,它挂载在/sys上,配合udev使用,可以很好的完成devfs的功能,并弥补了那些缺点。(这里说一下,当今内核已经使用netlink了,由于我才疏学浅这里暂不介绍)。
udev是用户空间的一个应用程序,在嵌入式中用的是mdev,mdev在busybox中。mdev是udev的精简版。
首先在busybox中添加支持mdev的选项:
最后修改/etc/fstab:
然后修改/etc/init.d/rcS:
执行mdev -s :以‘-s’为参数调用位于 /sbin目录写的mdev(其实是个链接,作用是传递参数给/bin目录下的busybox程序并调用它),mdev扫描 /sys/class 和 /sys/block 中所有的类设备目录,如果在目录中含有名为“dev”的文件,且文件中包含的是设备号,则mdev就利用这些信息为这个设备在/dev 下创建设备节点文件。一般只在启动时才执行一次 “mdev -s”。
热插拔事件:由于启动时运行了命 令:echo /sbin/mdev > /proc/sys/kernel/hotplug ,那么当有热插拔事件产生时,内核就会调用位于 /sbin目录的mdev。这时mdev通过环境变量中的 ACTION 和 DEVPATH,来确定此次热插拔事件的动作以及影响了/sys中的那个目录。接着会看看这个目录中是否“dev”的属性文件,如果有就利用这些信息为 这个设备在/dev 下创建设备节点文件
重新打包文件系统,这样/sys目录,/dev目录就有东西了。
如下是我的PWM驱动程序的初始化函数。调用create_class在/sys目录下创建类,调用device_create在/dev目录下创建设备节点。
下面是create_class的原型:
class_destroy的原型如下:
device_create的原型如下:
device_destroy的原型如下:
现在简单说一下mdev的基本原理:
执行mdev -s
以'-s'为参数调用位于/sbin目录下的mdev(其实是个链接,作用是传递参数给/bin目录下的busybox程序并调用它),mdev扫描/sys/class和/sys/block中所有的类设备目录,如果在目录中含有名为“dev”的文件,且文件中包含的是设备号,则mdev就利用这些为这个设备在/dev下创建设备节点文件。一般只在启动时才执行一次“mdev -s”;
热插拔事件:由于启动运行了命令:echo /sbin/mdev > proc/sys/kernel/hotplug,那么当有热插拔事件产生时,内核就会调用位于/sbin目录的mdev。这时mdev通过环境变量中的ACTION和DEVPATH,(这两个变量是系统自带的)来确定此次热插拔事件的动作以及影响了/sys中的那个目录。接着会看看这个目录中是否有"dev"的属性文件,如果有就利用这些信息为这个设备在/dev下创建设备节点文件。
下边是我写的PWM程序:
用户程序:
分享到:
相关推荐
就是由内核来启动一个用户进程,通过filter判断kset中的内核对象状态改变是否需要通知到用户层
使用mdev来实现arm linux自动识别并挂载sd卡,添加对热插拔事件的响应,实现U盘和SD卡的自动挂载。
Linux设备驱动程序学习(15)-Linux设备模型(热插拔、mdev 与 firmware) - Linux设备驱动程序
使用udev监测usb摄像头状态,并在终端进行显示add和remove,add为添加设备,remove为移除设备。
该文件详细讲述了嵌入式mdev的配置及用法
Linux设备驱动程序学习(1)-字符设备驱动程序 ·Linux设备驱动程序学习(0)-Hello, world!模块 ·Linux设备驱动程序学习(2)-...·Linux设备驱动程序学习(15)-Linux设备模型(热插拔、mdev 与 firmware) 等等
在 Linux的嵌入式系统中我们经常用到U盘、tf卡的挂载,而每次都手动挂载或卸载非常麻烦,我们可以使用mdev来实现自动挂载或卸载U盘、tf卡。 mdev是busybox自带的一个简化版的udev,适合于嵌入式的应用场合
·Linux设备驱动程序学习(15)-Linux设备模型(热插拔、mdev 与 firmware) ·Linux设备驱动程序学习(16)-USB 驱动程序(一) ·Linux设备驱动程序学习(17)-USB 驱动程序(二) ·Linux设备驱动程序学习(18...
Linux最小根文件系统支持自动挂载U盘TF卡。通过 mdev 工具实现 U 盘和 SD/TF 卡的自动挂载。
在linux中。busybox是一个必不可少的好工具, 而他mdev确实创建设备文件的利器,特此对busybox下的mdev进行了翻译,写了他使用说明中文版
linux启动优化:mdev -s.docx
里面是Linux的4个根文件系统,对应4个子目录: ① 最小的根文件系统fs_mini; ② 使用mdev机制的最小根文件系统fs_mini_mdev; ③ 含有qtopia图形程序的根文件系统fs_qtopia; ④ 含有X Window图形程序的根文件...
适用于TQ2440的yaffs2文件系统
介绍linux设备驱动模型概念中的设备篇
里面是Linux的4个根文件系统,对应4个子目录: ① 最小的根文件系统fs_mini; ② 使用mdev机制的最小根文件系统fs_mini_mdev; ③ 含有qtopia图形程序的根文件系统fs_qtopia; ④ 含有X Window图形程序的根文件...
busybox附带的mdev使用说明的中文译本,网上收集到的。在此共享。非常适合用于嵌入式linux,我的实际工作项目中,就是这样用的。
备文件的方式,UDEV/MDEV 是运行在用户态的程序,可以动态管理设备文件,包 括创建和删除设备文件,运行在用户态意味着系统要运行之后。那么在系统启动 期间还有 devfs 创建了设备文件。一共有三种方式可以创建设备...
linux下的设备模型包括几个主要的概念sysfs (dev是用户空间接口,根据sysfs下的class目录由mdev负责建立)bus总线,linux下的设备都是建立在总线上的,platform总线是一个虚拟的总线,所有的的片上设备基本上都接在...
稍微简便一点的根文件系统,短小精悍,很强大。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
配合博客文章使用的yaffs文件系统,验证可用。