修改mdev配置支持SD卡自动挂载
生活随笔
收集整理的这篇文章主要介绍了
修改mdev配置支持SD卡自动挂载
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
我们启动开发板之后,将SD卡插上会打印如下信息:
# s3c2440-sdi s3c2440-sdi: running at 0kHz (requested: 0kHz). s3c2440-sdi s3c2440-sdi: running at 196kHz (requested: 195kHz). s3c2440-sdi s3c2440-sdi: running at 196kHz (requested: 195kHz). s3c2440-sdi s3c2440-sdi: running at 196kHz (requested: 195kHz). s3c2440-sdi s3c2440-sdi: running at 196kHz (requested: 195kHz). s3c2440-sdi s3c2440-sdi: running at 196kHz (requested: 195kHz). s3c2440-sdi s3c2440-sdi: running at 196kHz (requested: 195kHz). s3c2440-sdi s3c2440-sdi: running at 196kHz (requested: 195kHz). s3c2440-sdi s3c2440-sdi: running at 25000kHz (requested: 25000kHz). s3c2440-sdi s3c2440-sdi: running at 25000kHz (requested: 25000kHz). 100ask:uevent_helper=/sbin/mdev envp[0]=HOME=/ envp[1]=PATH=/sbin:/bin:/usr/sbin:/usr/bin envp[2]=ACTION=add envp[3]=DEVPATH=/class/mmc_host/mmc0/mmc0:0002 envp[4]=SUBSYSTEM=mmc envp[5]=SEQNUM=716 envp[6]=PHYSDEVBUS=mmc mmcblk0: mmc0:0002 00000 976896KiB mmcblk0:<7>mmc0: starting CMD18 arg 00000000 flags 00000035 p1 100ask:uevent_helper=/sbin/mdev envp[0]=HOME=/ envp[1]=PATH=/sbin:/bin:/usr/sbin:/usr/bin envp[2]=ACTION=add envp[3]=DEVPATH=/block/mmcblk0 envp[4]=SUBSYSTEM=block envp[5]=SEQNUM=717 envp[6]=MINOR=0 envp[7]=MAJOR=179 envp[8]=PHYSDEVPATH=/class/mmc_host/mmc0/mmc0:0002 envp[9]=PHYSDEVBUS=mmc envp[10]=PHYSDEVDRIVER=mmcblk 100ask:uevent_helper=/sbin/mdev envp[0]=HOME=/ envp[1]=PATH=/sbin:/bin:/usr/sbin:/usr/bin envp[2]=ACTION=add envp[3]=DEVPATH=/block/mmcblk0/mmcblk0p1 envp[4]=SUBSYSTEM=block envp[5]=SEQNUM=718 envp[6]=MINOR=1 envp[7]=MAJOR=179 envp[8]=PHYSDEVPATH=/class/mmc_host/mmc0/mmc0:0002 envp[9]=PHYSDEVBUS=mmc envp[10]=PHYSDEVDRIVER=mmcblk
这说明当接上U盘之后自动创建了设备节点,它属于块设备,主次设备号分别是179、0和179、1
我们使用命令: ls -l /dev/mmcblk* 打印出如下信息: brw-rw---- 1 0 0 179, 0 Feb 3 01:28 dev/mmcblk0 brw-rw---- 1 0 0 179, 1 Feb 3 01:28 dev/mmcblk0p1 这就是我们自动创建的设备节点,主次设备号都符合。 其中mmcblk0代表整个SD卡,mmcblk0p1代表SD卡的第一个分区
但是这里只是自动创建了设备节点,并没有自动将SD卡挂载,我们要访问SD卡的话,还需要自己动手去挂载:
mount dev/mmcblk0p1 /mnt 这样我们就可以在/mnt 目录下来访问SD卡了
那么我们如果想要SD卡自动挂载应该怎么办呢?我们还得来分析mdev: make_device open("/etc/mdev.conf", O_RDONLY) 通过分析我们可以知道,如果存在 "/etc/mdev.conf"这个文件的话,就会根据这个文件来配置,否则就仅仅创建设备节点。 显然,我们想要让SD卡自动挂载的话,就需要写一个"文件!关于这个文件的规则我们可以参考: busybox-1.7.0\docs\mdev.txt 我们先来总结一下它的规则: 其一般规则是 <device regex> <uid>:<gid> <octal permissions> device regex:正则表达式,表示哪一个设备。 uid:owner gid:组ID octal permissions:以八进制表示的属性
比如:hd[a-z][0-9]* 0:3 660
当发现第一个匹配项时,就会根据这个匹配项进行配置。如果没有匹配项的话就会采用默认配置,默认的默认配置是: 0:0 660,当然我们我也可以自己定义,比如:.* 1:1 777
那么如果我们想要执行我们自己的命令应该怎么办呢?那就需要用下面的格式了:
<device regex> <uid>:<gid> <octal permissions> [<@|$|*> <command>] @ 创建了设备之后运行 $ 删除设备之前运行 * 在创建设备之后和删除设备之前运行
测试: 测试1:led驱动测试 之前我们在led4.c驱动里面自动创建4个设备节点:leds,led1,led2,led3 insmod led4.ko ls -l /dev/led* 打印如下信息: crw-rw---- 1 0 0 231, 1 Feb 3 03:06 /dev/led1 crw-rw---- 1 0 0 231, 2 Feb 3 03:06 /dev/led2 crw-rw---- 1 0 0 231, 3 Feb 3 03:06 /dev/led3 crw-rw---- 1 0 0 231, 0 Feb 3 03:06 /dev/leds
现在我们可以通过:/etc/mdev.conf这个文件来修改其属性: vi /etc/mdev.conf 添加如下信息:
led[1-3] 0:0 777 leds 0:0 777 rmmod led4 insmod led4.ko ls -l /dev/led* 打印如下信息: crwxrwxrwx 1 0 0 231, 1 Feb 3 03:15 /dev/led1 crwxrwxrwx 1 0 0 231, 2 Feb 3 03:15 /dev/led2 crwxrwxrwx 1 0 0 231, 3 Feb 3 03:15 /dev/led3 crwxrwxrwx 1 0 0 231, 0 Feb 3 03:15 /dev/leds 确实是改变了!
我们还可以添加自己的命令,比如: led[1-3] 0:0 777 @ echo creat /dev/$MDEV > /dev/console leds 0:0 777 @ echo creat /dev/$MDEV > /dev/console 上面的命令表示在创建设备节点之后将设备名显示到控制终端。其中MDEV这个环境变量就是表示变量名! rmmod led4 insmod led4.ko 打印如下信息: creat /dev/leds creat /dev/led2 creat /dev/led1 creat /dev/led3
我们也可以将命令,写成脚本的形式,然后直接添加脚本: vi /bin/add_remove_led.sh 添加如下信息: #/bin/sh if [ $ACTION = "add" ] then echo create /dev/$MDEV > /dev/console else echo remove /dev/$MDEV > /dev/console fi 保存退出
chmod 777 /bin/add_remove_led.sh //添加执行权限
vi /etc/mdev.conf 添加如下信息: led[1-3] 0:0 777 * /bin/add_remove_led.sh leds 0:0 777 * /bin/add_remove_led.sh
insmod led4.ko 打印如下信息: create /dev/leds create /dev/led1 create /dev/led2 create /dev/led3
rmmod led4.ko 打印如下信息: remove /dev/leds remove /dev/led1 remove /dev/led2 remove /dev/led3
测试2:SD卡测试 首先写个脚本文件: vi bin/add_remove_udisk.sh #!/bin/sh if [ $ACTION = "add" ]; then mount /dev/$MDEV /mnt; else umount /mnt; fi
在mdev.conf文件里面添加如下信息: mmcblk0p1 0:0 777 * /bin/ add_remove_udisk .sh 插上SD卡之后 ls /mnt 发现SD卡已经挂载上!
# s3c2440-sdi s3c2440-sdi: running at 0kHz (requested: 0kHz). s3c2440-sdi s3c2440-sdi: running at 196kHz (requested: 195kHz). s3c2440-sdi s3c2440-sdi: running at 196kHz (requested: 195kHz). s3c2440-sdi s3c2440-sdi: running at 196kHz (requested: 195kHz). s3c2440-sdi s3c2440-sdi: running at 196kHz (requested: 195kHz). s3c2440-sdi s3c2440-sdi: running at 196kHz (requested: 195kHz). s3c2440-sdi s3c2440-sdi: running at 196kHz (requested: 195kHz). s3c2440-sdi s3c2440-sdi: running at 196kHz (requested: 195kHz). s3c2440-sdi s3c2440-sdi: running at 25000kHz (requested: 25000kHz). s3c2440-sdi s3c2440-sdi: running at 25000kHz (requested: 25000kHz). 100ask:uevent_helper=/sbin/mdev envp[0]=HOME=/ envp[1]=PATH=/sbin:/bin:/usr/sbin:/usr/bin envp[2]=ACTION=add envp[3]=DEVPATH=/class/mmc_host/mmc0/mmc0:0002 envp[4]=SUBSYSTEM=mmc envp[5]=SEQNUM=716 envp[6]=PHYSDEVBUS=mmc mmcblk0: mmc0:0002 00000 976896KiB mmcblk0:<7>mmc0: starting CMD18 arg 00000000 flags 00000035 p1 100ask:uevent_helper=/sbin/mdev envp[0]=HOME=/ envp[1]=PATH=/sbin:/bin:/usr/sbin:/usr/bin envp[2]=ACTION=add envp[3]=DEVPATH=/block/mmcblk0 envp[4]=SUBSYSTEM=block envp[5]=SEQNUM=717 envp[6]=MINOR=0 envp[7]=MAJOR=179 envp[8]=PHYSDEVPATH=/class/mmc_host/mmc0/mmc0:0002 envp[9]=PHYSDEVBUS=mmc envp[10]=PHYSDEVDRIVER=mmcblk 100ask:uevent_helper=/sbin/mdev envp[0]=HOME=/ envp[1]=PATH=/sbin:/bin:/usr/sbin:/usr/bin envp[2]=ACTION=add envp[3]=DEVPATH=/block/mmcblk0/mmcblk0p1 envp[4]=SUBSYSTEM=block envp[5]=SEQNUM=718 envp[6]=MINOR=1 envp[7]=MAJOR=179 envp[8]=PHYSDEVPATH=/class/mmc_host/mmc0/mmc0:0002 envp[9]=PHYSDEVBUS=mmc envp[10]=PHYSDEVDRIVER=mmcblk
这说明当接上U盘之后自动创建了设备节点,它属于块设备,主次设备号分别是179、0和179、1
我们使用命令: ls -l /dev/mmcblk* 打印出如下信息: brw-rw---- 1 0 0 179, 0 Feb 3 01:28 dev/mmcblk0 brw-rw---- 1 0 0 179, 1 Feb 3 01:28 dev/mmcblk0p1 这就是我们自动创建的设备节点,主次设备号都符合。 其中mmcblk0代表整个SD卡,mmcblk0p1代表SD卡的第一个分区
但是这里只是自动创建了设备节点,并没有自动将SD卡挂载,我们要访问SD卡的话,还需要自己动手去挂载:
mount dev/mmcblk0p1 /mnt 这样我们就可以在/mnt 目录下来访问SD卡了
那么我们如果想要SD卡自动挂载应该怎么办呢?我们还得来分析mdev: make_device open("/etc/mdev.conf", O_RDONLY) 通过分析我们可以知道,如果存在 "/etc/mdev.conf"这个文件的话,就会根据这个文件来配置,否则就仅仅创建设备节点。 显然,我们想要让SD卡自动挂载的话,就需要写一个"文件!关于这个文件的规则我们可以参考: busybox-1.7.0\docs\mdev.txt 我们先来总结一下它的规则: 其一般规则是 <device regex> <uid>:<gid> <octal permissions> device regex:正则表达式,表示哪一个设备。 uid:owner gid:组ID octal permissions:以八进制表示的属性
比如:hd[a-z][0-9]* 0:3 660
当发现第一个匹配项时,就会根据这个匹配项进行配置。如果没有匹配项的话就会采用默认配置,默认的默认配置是: 0:0 660,当然我们我也可以自己定义,比如:.* 1:1 777
那么如果我们想要执行我们自己的命令应该怎么办呢?那就需要用下面的格式了:
<device regex> <uid>:<gid> <octal permissions> [<@|$|*> <command>] @ 创建了设备之后运行 $ 删除设备之前运行 * 在创建设备之后和删除设备之前运行
测试: 测试1:led驱动测试 之前我们在led4.c驱动里面自动创建4个设备节点:leds,led1,led2,led3 insmod led4.ko ls -l /dev/led* 打印如下信息: crw-rw---- 1 0 0 231, 1 Feb 3 03:06 /dev/led1 crw-rw---- 1 0 0 231, 2 Feb 3 03:06 /dev/led2 crw-rw---- 1 0 0 231, 3 Feb 3 03:06 /dev/led3 crw-rw---- 1 0 0 231, 0 Feb 3 03:06 /dev/leds
现在我们可以通过:/etc/mdev.conf这个文件来修改其属性: vi /etc/mdev.conf 添加如下信息:
led[1-3] 0:0 777 leds 0:0 777 rmmod led4 insmod led4.ko ls -l /dev/led* 打印如下信息: crwxrwxrwx 1 0 0 231, 1 Feb 3 03:15 /dev/led1 crwxrwxrwx 1 0 0 231, 2 Feb 3 03:15 /dev/led2 crwxrwxrwx 1 0 0 231, 3 Feb 3 03:15 /dev/led3 crwxrwxrwx 1 0 0 231, 0 Feb 3 03:15 /dev/leds 确实是改变了!
我们还可以添加自己的命令,比如: led[1-3] 0:0 777 @ echo creat /dev/$MDEV > /dev/console leds 0:0 777 @ echo creat /dev/$MDEV > /dev/console 上面的命令表示在创建设备节点之后将设备名显示到控制终端。其中MDEV这个环境变量就是表示变量名! rmmod led4 insmod led4.ko 打印如下信息: creat /dev/leds creat /dev/led2 creat /dev/led1 creat /dev/led3
我们也可以将命令,写成脚本的形式,然后直接添加脚本: vi /bin/add_remove_led.sh 添加如下信息: #/bin/sh if [ $ACTION = "add" ] then echo create /dev/$MDEV > /dev/console else echo remove /dev/$MDEV > /dev/console fi 保存退出
chmod 777 /bin/add_remove_led.sh //添加执行权限
vi /etc/mdev.conf 添加如下信息: led[1-3] 0:0 777 * /bin/add_remove_led.sh leds 0:0 777 * /bin/add_remove_led.sh
insmod led4.ko 打印如下信息: create /dev/leds create /dev/led1 create /dev/led2 create /dev/led3
rmmod led4.ko 打印如下信息: remove /dev/leds remove /dev/led1 remove /dev/led2 remove /dev/led3
测试2:SD卡测试 首先写个脚本文件: vi bin/add_remove_udisk.sh #!/bin/sh if [ $ACTION = "add" ]; then mount /dev/$MDEV /mnt; else umount /mnt; fi
在mdev.conf文件里面添加如下信息: mmcblk0p1 0:0 777 * /bin/ add_remove_udisk .sh 插上SD卡之后 ls /mnt 发现SD卡已经挂载上!
总结
以上是生活随笔为你收集整理的修改mdev配置支持SD卡自动挂载的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: I2C总线知识
- 下一篇: 命令行下的FTP使用详解