修改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使用详解