核心是否會刪除 initramfs 上 /dev 中的條目?

核心是否會刪除 initramfs 上 /dev 中的條目?

我有一個完全客製化的、最小的、嵌入式 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,安裝新的檔案系統也會隱藏該目錄,並且看起來您的所有裝置特殊資訊都已刪除。他們沒有,但最終的結果是一樣的:特價不是你所期望的。

我懷疑您會發現您的hdahdaX條目已被替換為sdasdaX條目。或者,檢查/proc/devices/proc/partitions取得udev指派給磁碟機的名稱。

有時,像這樣的快速而骯髒的解決方案fdisk -l /dev/[sh]d[a-z]會有所幫助(如果每種類型的磁碟少於 26 個,效果會更好)。

順便說一句,使用的命名方案udev是標準化的,你的靜態/dev可能比遵循約定更糟。如果udev認為是的話/dev/sda,就這樣吧。您可以避免日後潛在的怪異和誤解。

相關內容