今天我們有個版子Ralink的系統, 使用openwrt開發平台, 要automount USB !
上網看見 如何在ARM Embedded Linux實作automount功能
目的:支援 automount function
關鍵字:hotplug, mdev, automount, Embedded Linux, busybox, ARM一般來說,目前我們桌上電腦當插入USB DISK,系統是使用udev來達成automount
在Embedded Linux中,我們並沒有跑udev這麼大的service,而是使用busybox的mdev原理大概如下
Linux Kernel的hotplug -> 收到USB DISK insert/delete event -> 根據/proc/sys/kernel/hotplug指名的程式
-> 呼叫mdev -> mdev在根據/etc/mdev.conf設定檔指定batch file -> 執行相對應的/sbin/automount.sh實作部份
Linux Kernel部份
================
在.config
將hotplug function打開
代 碼: CONFIG_HOTPLUG=y 如果proc file system和sysfs file system沒打開的話也要記得打開(應該很少人會這個不開吧)
代碼: CONFIG_PROC_FS=y
CONFIG_SYSFS=y重新編譯kernel
Busybox 部份
===========
很遺憾的Busybox 1.2版的mdev有bug,我是在Busybox 1.9版mdev source code發現已經fix這個bug了
Busybox的make menuconfig
請把mdev打開
P.S.
因 為等下還有batch 需要grep 如果busybox沒開的話也要打開target board file system部份
============================
vi /etc/inittab
代 碼: ttyRI0::sysinit:/bin/mount -t sysfs sysfs /sys
ttyRI0::sysinit:/sbin/mdev -s
ttyRI0::sysinit:/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug掛載sysfs, 執行mdev, 並將mdev設為當系統收到hotplug event會去呼叫的程式
當然file system裡面要有/sys
代碼: mkdir /sys vi /etc/mdev.conf
代碼: sda1 0:0 0660 @mount /dev/sda1 /mnt
sd.* 0:0 0660 @/sbin/automount.sh $MDEVvi /sbin/automount.sh
代碼: #! /bin/sh
if [ “$1” == “” ]; then
echo “parameter is none” > /tmp/error.txt
exit 1
fi
mounted=mount | grep $1 | wc -l
# mounted, assume we umount
if [ $mounted -ge 1 ]; then
echo “R/media/$1” >> /tmp/usbmnt.log
echo “R/media/$1” > /tmp/fifo.1
if ! umount “/media/$1”; then
exit 1
fiif ! rmdir “/media/$1”; then
exit 1
fi
# not mounted, lets mount under /media
else
if ! mkdir -p “/media/$1”; then
exit 1
fiif ! mount “/dev/$1” “/media/$1”; then
# failed to mount, clean up mountpoint
if ! rmdir “/media/$1”; then
exit 1
fi
exit 1
fi
echo “A/media/$1” >> /tmp/usbmnt.log
echo “A/media/$1” > /tmp/fifo.1
fiexit 0