Udev具体实现

 

udev是一种工具,它能够根据系统中的硬件设备的状态动态更新设备文件,包括设备文件的创建,删除等。

udev是一个用户模式程序。它的配置文件是/etc/udev/udev.conf。这个文件一般缺省有这样几项:

udev_root="/dev" ; udev产生的设备文件的根目录是/dev udev_db="/dev/.udevdb" ; 通过udev产生的设备文件形成的数据库udev_rules="/etc/udev/rules.d" ;用于指导udev工作的规则所在目录udev_log="err" ;当出现错误时,用syslog记录错误信息。

当内核检测到在系统中出现了新设备后,内核会在sysfs文件系统中为该新设备生成一项新的记录(sysfs是linux 2.6内核的一种新型文件系统,它提供了当前设备的基本信息),一般sysfs文件系统会被mount到 /sys目录中。新记录是以一个或多个文件或目录的方式来表示。每个文件都包含有特定的信息。

udev在系统中是以守护进程的方式udevd在运行,它通过某种途径(到底什么途径,目前还没搞懂)检测到新设备的出现,通过查找设备对应的sysfs中的记录得到设备的一些信息。

udev会根据/etc/udev/udev.conf文件中的udev_rules指定的目录,逐个检查该目录下的文件,这个目录下的文件都是针对某类或某个设备应该施行什么措施的规则文件,我们的系统规则文件命名为“10_usb.rules”。udev读取文件是按照文件名的ASCII字母顺序来读取的,如果udev一旦找到了与新加入的设备匹配的规则,udev就会根据规则定义的措施对新设备进行配置。同时不再读后续的规则文件。

 

UDEV实现U盘SD卡自动挂载/卸载并且拷贝数据

1.编译UDEV源码,执行arm-softfloat-linux-gnu-strip udev udevd udevstart udevinfo udevtest ,进行瘦身,并且拷贝这些文件到rootfs/bin文件夹下。

 

2.修改rootfs/etc/init.d/rcS 脚本,添加如下命令:

/bin/mount  -t  sysfs  sysfs /sys

/bin/mount  -t  tmpfs  tmpfs /dev

/bin/udevd  –-daemon              //创建udev的守护进程

/bin/udevstart                         //启动

 

3.在 /etc/udev/rules.d 目录下创建文件 10_usb.rules规则文件,他的语法是每个规则分成一个或多个“匹配”和“赋值”部分, 其内容如下

KERNEL=="sda1", SUBSYSTEM=="block", RUN+="/sbin/usbmount.sh"

KERNEL SUBSYSTEM 为匹配,RUN就是赋值,意为执行usbmount.sh这个脚本。

 

4.然后, 在 /sbin 目录中创建脚本文件 usbmount.sh, 其内容为

#!/bin/sh

if [ “$ACTION” = “add” ]

then

    mount -t vfat  /dev/sda1 /tmp/udisk

mv   /mnt/yaffs/web_picture/*.jpg  /tmp/udisk

mv   /mnt/yaffs/collect_picture/*.jpg  /tmp/udisk

elif [ “$ACTION” = "remove" ]

then

    umount -l /tmp/udisk

fi

注:udisk、web_piture、collect_picture文件需自己建立

把该文件属性设置为可执行 chmod 777 usbmount.sh

有一点需要注意的是指定的脚本解析器是sh,如果指定bash正常情况是无法解析这个脚本的,我们的嵌入式系统都没有bash。

 

插入U盘或者SD卡,触发add事件,执行10_usb.rules指定的/sbin/usbmount.sh脚本,因为是add ACTION,所以执行mount -t vfat  /dev/sda1 /tmp/udisk 。

拔出时,触发remove事件,执行10_usb.rules指定的/sbin/usbmount.sh脚本,因为是 ACTION 这时为remove,所以执行umount –l /tmp/udisk 。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值