嵌入式Linux作業系統移植IMX6開發板之實現USB 自動掛載
本篇文章講述如何實現USB自動掛載,U盤即插即用,不用手動掛載的方法,以及給出U盤自動掛載的原理。
目前做的IMX6開發板,移植Linux系統,原始碼(linux核心為3.0.35)由廠家提供(後面會提供核心,uboot,檔案系統原始碼)。主要功能是實現機器人控制器與示教器一體的功能。
一.首先給出我在 IMX6開發板實現的USB自動掛載的方法(不侷限於具體開發板):
-USB的自動掛載:
1、在/etc/udev/rules.d目錄裡面建立11-usb-mount.rules,
11-usb-mount.rules裡面的內容如下:
ACTION!="add",GOTO="farsight"
KERNEL=="sd[a-z ][0-9]",RUN+="/sbin/moun-tusb.sh %k"
LABEL="farsight"
2、 在/sbin/目錄裡建立mount-usb.sh指令碼檔案
mount-usb.sh的內容如下:
#!/bin/sh
/bin/mount -t vfat /dev/$1 /udisk
sync
重啟下即可在linux上實現自動掛載,u盤自動掛載到/udisk目錄裡
-USB的自動解除安裝:
1、在/etc/udev/rules.d目錄裡面建立11-usb-umount.rules,內容如下:
ACTION!="remove",GOTO="farsight"
SUBSYSTEM!="block",GOTO="farsight"
KERNEL=="sd[a-z ][0-9]",RUN+="/sbin/umount-usb.sh"
LABEL="farsight"
2、在/sbin/目錄裡建立umount-usb.sh指令碼檔案
umount-usb.sh的內容如下:
#!/bin/sh
/bin/umount /udisk
sync
通過上面的方法,親測有效,可以實現U盤的自動掛載。
二 分析一下U盤自動掛載的簡單原理
拿jz2440開發板中的led驅動程式做例子:
Busybox中的mdev.conf
在mdev.txt中有說明文件:
mdev.conf的格式:
<device regex> <uid >:<gid> <octal permissions>
<device regex> <uid>:<gid> <octal permissions> [<@|$|*> <command>]
device regex:正則表示式,表示哪一個裝置
uid: owner
gid: 組ID
octal permissions:以八進位制表示的屬性
@:建立裝置節點之後執行命令
$:刪除裝置節點之前執行命令
*: 建立裝置節點之後 和 刪除裝置節點之前 執行命令
command:要執行的命令
表2.常用的限定符
程式碼/語法 說明
* 重複零次或更多次
+ 重複一次或更多次
? 重複零次或一次
{n} 重複n次
{n,} 重複n次或更多次
{n,m} 重複n到m次
寫mdev.conf
方法1.
leds 0:0 777
led1 0:0 777
led2 0:0 777
led3 0:0 777
方法2.
leds?[123]? 0:0 777
方法3.
leds?[123]? 0:0 777 @ echo create /dev/$MDEV > /dev/console
方法4.
leds?[123]? 0:0 777 * if [ $ACTION = "add" ]; then echo create /dev/$MDEV > /dev/console; else echo remove /dev/$MDEV > /dev/console; fi
方法5.
leds?[123]? 0:0 777 * /bin/add_remove_led.sh (這是要寫入mdev.conf的配置)
把命令寫入一個指令碼(最後需要新增執行許可權,chmod + x add_remove_led.sh):
add_remove_led.sh
#!/bin/sh
if [ $ACTION = "add" ];
then
echo create /dev/$MDEV > /dev/console;
else
echo remove /dev/$MDEV > /dev/console;
fi
6 .
U盤自動載入(放到/etc/mdev.conf裡面的)
sda[1-9]+ 0:0 777 * if [ $ACTION = "add" ]; then mount /dev/$MDEV /mnt; else umount /mnt; fi
7.
sda[1-9]+ 0:0 777 * /bin/add_remove_udisk.sh
add_remove_udisk.sh (最後需要新增執行許可權,chmod + x add_remove_udisk.sh)
#!/bin/sh
if [ $ACTION = "add" ];
then
mount /dev/$MDEV /udisk;
else
umount /udisk;
fi
想獲得各種學習資源以及交流學習的加我(有我部落格中寫的程式碼的原稿):
qq:1126137994
微信:liu1126137994
可以共同交流關於嵌入式,作業系統,C++語言,C語言,資料結構等技術問題。