修改mdev配置支持SD卡自动挂载
生活随笔
收集整理的這篇文章主要介紹了
修改mdev配置支持SD卡自动挂载
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
我們啟動(dòng)開發(fā)板之后,將SD卡插上會(huì)打印如下信息:
# 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
這說明當(dāng)接上U盤之后自動(dòng)創(chuàng)建了設(shè)備節(jié)點(diǎn),它屬于塊設(shè)備,主次設(shè)備號(hào)分別是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 這就是我們自動(dòng)創(chuàng)建的設(shè)備節(jié)點(diǎn),主次設(shè)備號(hào)都符合。 其中mmcblk0代表整個(gè)SD卡,mmcblk0p1代表SD卡的第一個(gè)分區(qū)
但是這里只是自動(dòng)創(chuàng)建了設(shè)備節(jié)點(diǎn),并沒有自動(dòng)將SD卡掛載,我們要訪問SD卡的話,還需要自己動(dòng)手去掛載:
mount dev/mmcblk0p1 /mnt 這樣我們就可以在/mnt 目錄下來訪問SD卡了
那么我們?nèi)绻胍猄D卡自動(dòng)掛載應(yīng)該怎么辦呢?我們還得來分析mdev: make_device open("/etc/mdev.conf", O_RDONLY) 通過分析我們可以知道,如果存在 ? "/etc/mdev.conf"這個(gè)文件的話,就會(huì)根據(jù)這個(gè)文件來配置,否則就僅僅創(chuàng)建設(shè)備節(jié)點(diǎn)。 顯然,我們想要讓SD卡自動(dòng)掛載的話,就需要寫一個(gè)"文件!關(guān)于這個(gè)文件的規(guī)則我們可以參考: busybox-1.7.0\docs\mdev.txt 我們先來總結(jié)一下它的規(guī)則: 其一般規(guī)則是 <device regex> <uid>:<gid> <octal permissions> device regex:正則表達(dá)式,表示哪一個(gè)設(shè)備。 uid:owner gid:組ID octal permissions:以八進(jìn)制表示的屬性
比如:hd[a-z][0-9]* 0:3 660
當(dāng)發(fā)現(xiàn)第一個(gè)匹配項(xiàng)時(shí),就會(huì)根據(jù)這個(gè)匹配項(xiàng)進(jìn)行配置。如果沒有匹配項(xiàng)的話就會(huì)采用默認(rèn)配置,默認(rèn)的默認(rèn)配置是: 0:0 660,當(dāng)然我們我也可以自己定義,比如:.* 1:1 777
那么如果我們想要執(zhí)行我們自己的命令應(yīng)該怎么辦呢?那就需要用下面的格式了:
<device regex> <uid>:<gid> <octal permissions> [<@|$|*> <command>] @ 創(chuàng)建了設(shè)備之后運(yùn)行 $ ? 刪除設(shè)備之前運(yùn)行 * ? ?在創(chuàng)建設(shè)備之后和刪除設(shè)備之前運(yùn)行
測(cè)試:? 測(cè)試1:led驅(qū)動(dòng)測(cè)試 之前我們?cè)趌ed4.c驅(qū)動(dòng)里面自動(dòng)創(chuàng)建4個(gè)設(shè)備節(jié)點(diǎn):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
現(xiàn)在我們可以通過:/etc/mdev.conf這個(gè)文件來修改其屬性: 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 確實(shí)是改變了!
我們還可以添加自己的命令,比如: led[1-3] 0:0 777 @ echo creat /dev/$MDEV > /dev/console leds 0:0 777 ? ? ?@ echo creat /dev/$MDEV > /dev/console 上面的命令表示在創(chuàng)建設(shè)備節(jié)點(diǎn)之后將設(shè)備名顯示到控制終端。其中MDEV這個(gè)環(huán)境變量就是表示變量名! 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 //添加執(zhí)行權(quán)限
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
測(cè)試2:SD卡測(cè)試 首先寫個(gè)腳本文件: 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 發(fā)現(xiàn)SD卡已經(jīng)掛載上!
# 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
這說明當(dāng)接上U盤之后自動(dòng)創(chuàng)建了設(shè)備節(jié)點(diǎn),它屬于塊設(shè)備,主次設(shè)備號(hào)分別是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 這就是我們自動(dòng)創(chuàng)建的設(shè)備節(jié)點(diǎn),主次設(shè)備號(hào)都符合。 其中mmcblk0代表整個(gè)SD卡,mmcblk0p1代表SD卡的第一個(gè)分區(qū)
但是這里只是自動(dòng)創(chuàng)建了設(shè)備節(jié)點(diǎn),并沒有自動(dòng)將SD卡掛載,我們要訪問SD卡的話,還需要自己動(dòng)手去掛載:
mount dev/mmcblk0p1 /mnt 這樣我們就可以在/mnt 目錄下來訪問SD卡了
那么我們?nèi)绻胍猄D卡自動(dòng)掛載應(yīng)該怎么辦呢?我們還得來分析mdev: make_device open("/etc/mdev.conf", O_RDONLY) 通過分析我們可以知道,如果存在 ? "/etc/mdev.conf"這個(gè)文件的話,就會(huì)根據(jù)這個(gè)文件來配置,否則就僅僅創(chuàng)建設(shè)備節(jié)點(diǎn)。 顯然,我們想要讓SD卡自動(dòng)掛載的話,就需要寫一個(gè)"文件!關(guān)于這個(gè)文件的規(guī)則我們可以參考: busybox-1.7.0\docs\mdev.txt 我們先來總結(jié)一下它的規(guī)則: 其一般規(guī)則是 <device regex> <uid>:<gid> <octal permissions> device regex:正則表達(dá)式,表示哪一個(gè)設(shè)備。 uid:owner gid:組ID octal permissions:以八進(jìn)制表示的屬性
比如:hd[a-z][0-9]* 0:3 660
當(dāng)發(fā)現(xiàn)第一個(gè)匹配項(xiàng)時(shí),就會(huì)根據(jù)這個(gè)匹配項(xiàng)進(jìn)行配置。如果沒有匹配項(xiàng)的話就會(huì)采用默認(rèn)配置,默認(rèn)的默認(rèn)配置是: 0:0 660,當(dāng)然我們我也可以自己定義,比如:.* 1:1 777
那么如果我們想要執(zhí)行我們自己的命令應(yīng)該怎么辦呢?那就需要用下面的格式了:
<device regex> <uid>:<gid> <octal permissions> [<@|$|*> <command>] @ 創(chuàng)建了設(shè)備之后運(yùn)行 $ ? 刪除設(shè)備之前運(yùn)行 * ? ?在創(chuàng)建設(shè)備之后和刪除設(shè)備之前運(yùn)行
測(cè)試:? 測(cè)試1:led驅(qū)動(dòng)測(cè)試 之前我們?cè)趌ed4.c驅(qū)動(dòng)里面自動(dòng)創(chuàng)建4個(gè)設(shè)備節(jié)點(diǎn):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
現(xiàn)在我們可以通過:/etc/mdev.conf這個(gè)文件來修改其屬性: 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 確實(shí)是改變了!
我們還可以添加自己的命令,比如: led[1-3] 0:0 777 @ echo creat /dev/$MDEV > /dev/console leds 0:0 777 ? ? ?@ echo creat /dev/$MDEV > /dev/console 上面的命令表示在創(chuàng)建設(shè)備節(jié)點(diǎn)之后將設(shè)備名顯示到控制終端。其中MDEV這個(gè)環(huán)境變量就是表示變量名! 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 //添加執(zhí)行權(quán)限
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
測(cè)試2:SD卡測(cè)試 首先寫個(gè)腳本文件: 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 發(fā)現(xiàn)SD卡已經(jīng)掛載上!
總結(jié)
以上是生活随笔為你收集整理的修改mdev配置支持SD卡自动挂载的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: I2C总线知识
- 下一篇: 命令行下的FTP使用详解