欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

修改mdev配置支持SD卡自动挂载

发布时间:2025/4/16 编程问答 37 豆豆
生活随笔 收集整理的这篇文章主要介绍了 修改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卡已经挂载上!

总结

以上是生活随笔为你收集整理的修改mdev配置支持SD卡自动挂载的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。