有關U盤掛載的一些想法

2021-05-21 23:19:17 字數 3555 閱讀 6724

原來一直採用網上現成的核心,所以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...