原來一直採用網上現成的核心,所以u盤很容易就掛上了。也沒發現特殊的指令碼。可是換了另外乙個核心debian下的,就發現有熱插拔事件但/dev下沒有裝置,頭痛了幾天。首先想到的是仿照debian啟動指令碼,執行rcs。它裡面只有乙個指令碼exec /etc/init.d/rc s.原來它是啟動rc指令碼,傳給它引數s(發現這個很驚訝,因為rc 0,rc1,...rc6等都是這個原理,就是用rc指令碼遍歷執行rcx目錄中的指令碼)。在主機中我遮蔽了rc0-6所有的指令碼。其實他們包括rcs目錄裡的指令碼都是軟連線到init.d目錄裡的指令碼。曾經看到一篇文章好像是說rcs是啟動單使用者模式,rc0-6應該是開啟6個控制端,這樣解釋我認為有理,待以後研究吧。做完這一切主機啟動後是可以正常啟動的,但是移植目標機未能啟動。在這過程中發現有些指令碼或者程式時依賴/lib目錄中的配置檔案的,就好像windows程式中的.init檔案,通常字尾名.conf。由於發現檔案太多,一時也難以完全弄清,於是換了另外一種思路,因為沒有改變核心之前好像沒有這麼複雜,於是到網上搜尋了一篇文章,收到了啟發。原文如下:
u盤掛載步驟:
1)確保核心支援熱插拔
# cd linux-2.6.30.4
# vi .config
config_kallsyms=y
# config_kallsyms_all is not set
# config_kallsyms_extra_pass is not set
# config_strip_asm_syms is not set
config_hotplug=y //確保這項為y
config_printk=y
config_net=y
//確保這項也為y
確保以上兩項都選上,不然/proc/sys/kernel/目錄不會出現hotplug檔案!
2)確保busybox支援mdev
mdev是busybox中udev裝置檔案系統的精簡版
# make menuconfig
確保以下幾項被選中:
linux system utilities ---
>[*
] mdev [*
] support /etc/mdev.conf [*
] support subdirs/symlinks [*
] support regular expressions substitutions when renaming dev[*
] support command execution at device addition/removal [*
] support loading of firmwares
3)根檔案系統
etc/fatab檔案的內容為:
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /var tmpfs defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
etc/init.d/rcs新增如下的內容:
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
4)解析
執行 mdev -s:
以 "-s" 為引數呼叫位於 /sbin 目錄下的 mdev(其實
mdev
是個軟鏈結,其作用是傳遞引數給 /bin 目錄下的 busybox 程式並呼叫它)。
mdev 掃瞄 /sys/class 和 /sys/block 目錄中所有的類裝置目錄,如果在
類裝置目錄
中含有名為 "dev" 的檔案,且檔案中包含的是裝置號,則 mdev 就利用這些資訊為這個裝置在 /dev 目錄下建立裝置節點檔案。
一般只在啟動時才執行一次 "mdev -s" 。
熱插拔事件:
由於啟動時執行了命令:echo /sbin/mdev > /proc/sys/kernel/hotplug ,
那麼當有熱插拔事件產生時,核心就會呼叫位於 /sbin 目錄下的 mdev 。
這時 mdev 通過環境變數中的 action 和 devpath,來確定此次熱插拔事件的動作以及影響了 /sys 中的那乙個
類裝置目錄
。接著會看看這個
類裝置目錄
中是否有名為 "dev" 的檔案,如果有就利用這些資訊為這個裝置在 /dev 目錄下建立或刪除裝置節點檔案並執行相應的動作 action 。
5)新增對熱插拔事件的響應,實現u盤和sd卡的自動掛載與缷載
# vi /etc/mdev.conf
內容為:
sd[a-z]
[0-9] 0:0 666 @ /etc/hotplug/usb/udisk_insert
sd[a-z] 0:0 666 $ /etc/hotplug/usb/udisk_remove
mmcblk[0-9]p[0-9] 0:0 666 @ /etc/hotplug/sd/sd_insert
mmcblk[0-9] 0:0 666 $ /etc/hotplug/sd/sd_remove
# vi /etc/hotplug/usb/udisk_insert
內容為
:
#!
/bin/sh
mkdir -p /media/udisk
mount /dev/sda /media/udisk
# vi /etc/hotplug/usb/udisk_remove
內容為:
#!
/bin/sh
umount /media/udisk
為以上兩個指令碼加上可執行許可權:
# chmod +x/etc/hotplug/usb/udisk_insert
# chmod +x
/etc/hotplug/usb/udisk_remove
根據他的說法,第一,二項我似乎已滿足,第三,四項我啟動後掛的是本地檔案系統,於是我只在rcs加了其中一句:echo /sbin/mdev > /proc/sys/kernel/hotplug.至於第五項我暫時沒有管它,因為我現在只要在/dev中出現裝置然後mount上就行了,自動掛載我後面會根據公司要求酌情考慮如何實現。
就這樣居然被我搞定了,不過有時間我還是想深入了解所有的啟動指令碼,這樣心中更加有把握,以後遇到什麼問題容易解決。
有關U盤掛載的一些想法
原來一直採用網上現成的核心,所以u盤很容易就掛上了。也沒發現特殊的指令碼。可是換了另外乙個核心debian下的,就發現有熱插拔事件但 dev下沒有裝置,頭痛了幾天。首先想到的是仿照debian啟動指令碼,執行rcs。它裡面只有乙個指令碼exec etc init.d rc s.原來它是啟動rc指令碼...
u盤的一些理解
u盤是由主控板 flash 外殼組成的,當主控板焊接上空白flash後插入電腦,因為沒有相應的資料,量產工具 電腦只能識別到主控板,而無法識別到flash,所以這時候電腦上顯示出u盤碟符,但是雙擊碟符卻顯示沒有插入u盤,就像是插入乙個空白的讀卡器。事實上這時候的u盤幾乎就是讀卡器。所以要讓電腦識別出...
有關UPDATE操作的一些想法
我們平常寫 的時候,無疑都會接觸大量的資料curd操作。第一反應是這太簡單了,那麼你在編寫update操作的時候是怎樣的邏輯呢?比較下面兩段偽 sql update table name set a a b b c c where id id res db query sql if res else...