我有一個完全客製化的、最小的、嵌入式 Linux(vanilla、3.3.8、i486、Vortex86dx)系統,它從 initramfs 映像啟動。不使用標準分發腳本,僅使用單一 rcS 檔案初始化。
我有一個 IDE 隨身碟,有兩個分割區:/dev/hda1 和 /dev/hda2。
由於這是固定係統的最小嵌入式發行版,因此它有一個靜態 /dev 目錄,其中包含 /dev/hda1 和 /dev/hda2,並且沒有 UDEV。
當 init 呼叫 rcS 時,/dev/hda1 條目不再存在。此時尚未執行其他腳本、使用者應用程式或守護程式。 /dev/hda1出現已被核心刪除(?)
如果我在開發過程中透過 NFS 根檔案系統啟動目標,則不會遇到相同的問題。
我使用 Buildroot 透過 device_table_dev.txt 檔案建立 /dev 目錄。例如
# IDE Devices
/dev/hda b 640 0 0 3 0 0 0 -
/dev/hda b 640 0 0 3 1 1 1 4
我檢查了 Buildroot 輸出/圖像中的 rootfs.tar.gz。 /dev 目錄包含 /dev/hda1:
brw-r----- 1 root root 3, 0 Jul 2 13:44 hda
brw-r----- 1 root root 3, 1 Jul 2 13:44 hda1
brw-r----- 1 root root 3, 2 Jul 2 13:44 hda2
brw-r----- 1 root root 3, 3 Jul 2 13:44 hda3
brw-r----- 1 root root 3, 4 Jul 2 13:44 hda4
我在目標上的啟動後目錄列表(在腳本頂部的 rcS 內完成)如下所示:
brw-r----- 1 root root 3, 0 Jul 2 12:44 hda
brw-r----- 1 root root 3, 2 Jul 2 12:44 hda2
brw-r----- 1 root root 3, 3 Jul 2 12:44 hda3
brw-r----- 1 root root 3, 4 Jul 2 12:44 hda4
/dev/hda1 遺失。 /dev/hda2 是同一磁碟上的一個分割區,但它仍然存在。奇怪的。
如果我運行 Busybox 實用程式“mdev -s”,它會在目標上恢復 /dev/hda1 並且正常工作。例如我可以安裝它
有人以前看過這種行為嗎?
核心會刪除 /dev 中的條目嗎?
答案1
子系統在引導時udev
建立並安裝tmpfs
檔案系統。/dev
當偵測到裝置時,內容由核心填滿。由於tmpfs
駐留在虛擬記憶體中,它不是持久的,因此您的變更在重新啟動後不會保留。即使您已經有了/dev
,安裝新的檔案系統也會隱藏該目錄,並且看起來您的所有裝置特殊資訊都已刪除。他們沒有,但最終的結果是一樣的:特價不是你所期望的。
我懷疑您會發現您的hda
和hdaX
條目已被替換為sda
和sdaX
條目。或者,檢查/proc/devices
並/proc/partitions
取得udev
指派給磁碟機的名稱。
有時,像這樣的快速而骯髒的解決方案fdisk -l /dev/[sh]d[a-z]
會有所幫助(如果每種類型的磁碟少於 26 個,效果會更好)。
順便說一句,使用的命名方案udev
是標準化的,你的靜態/dev
可能比遵循約定更糟。如果udev
認為是的話/dev/sda
,就這樣吧。您可以避免日後潛在的怪異和誤解。