ide-core
hotplug
from Moto
花了一些時間追蹤 USB 裝置的 hotplug 流程, 將其記錄下來
以下是 USB Storage 的掛載流程:
1. kernel 偵測到新的 USB 裝置, 依據 /proc/sys/kernel/hotplug 內容呼叫 應用程式 /sbin/hotplug, 參數一為 usb, 參數二為 usb.agent 參數
2. hotplug 呼叫 /etc/hotplug/usb.agent
3. usb.agent 會依據 $MODULE_DIR/modules.usbmap 作 USB 裝置參數設定
然後 執行兩個 case
add)
載入驅動程式( /etc/hotplug/hotplug.functions, 其中 load_drivers()
最後呼叫 updfstab)
設定 storage device 的 symlinks( man devlabel, /etc/sysconfig/devlabel)
remove)
移除驅動程式
updfstab ( man updfstab, /etc/updfstab.conf )
5. updfstab 會依據 /etc/updfstab.conf 及系統偵測到的裝置, 自動設定
/etc/fstab
由以上流程可知, 若要讓一般使用者能夠 mount 隨身碟,需設定
/etc/updfstab.conf.default, 讓 updfstab 產生 /etc/fstab entry 時, 加上
必要參數, 並且動態產生 /mnt/memstick 掛載點, 目前 updfstab 並無法根據設定
檔設定 mount 參數, 而是寫死在程式碼中
- 預設 usb storage 的 mount 參數為 "noauto,owner,kudzu"
- kudzu 表示這個 entry 是 updfstab 產生
- owner 表示可以讓 console 登入的使用者 mount, unmount, 因為在 console
登入的時, 該 device 擁有者會變成該使用者
- 透過 /etc/security/console.perms
設定
由以上流程:
Redhat 9 不需設定就可以偵測 USB 隨身碟, 並設定好 /etc/fstab
一般使用者只要 mount /mnt/memstick 就可以掛載, 並存取 /mnt/memstick
但是因為 updfstab 對於 USB Storage mount 參數是寫死在程式中, 因此對於
中文檔名需要加入 iocharset=cp950 無法藉由設定達成, 因此需修改 updfstab
updfstab 其所屬套件為 kudzu, 編譯 kudzu 需要安裝 newt-devel, dietlibc
加入以下 patch:
------------------------------------------------------------------------------
--- kudzu-0.99.99/updfstab.c.org 2003-02-21 00:48:31.000000000 +0800
+++ kudzu-0.99.99/updfstab.c 2003-09-29 22:13:06.000000000 +0800
@@ -740,7 +740,7 @@
!(strcmp(addition->device->type->name, "cdrom") &&
strcmp(addition->device->type->name, "cdwriter") &&
strcmp(addition->device->type->name, "cdrw")) ?
- "noauto,owner,kudzu,ro" : "noauto,owner,kudzu",
+ "noauto,owner,kudzu,ro" : "noauto,owner,kudzu,iocharset=cp950",
0, 0);
}
------------------------------------------------------------------------------
強制掛載參數 iocharset=cp950, 這個方法非常 dirty ....
reference:
1.http://www.spinics.net/lists/rh-devel/msg00811.html
2.http://connecteduser.com/forum/viewtopic.php?t=111
沒有留言:
張貼留言