Linux
在基於 Busybox 的嵌入式 Linux 發行版中沒有 /proc
我正在製作嵌入式 Linux 發行版,我的主機板是 Raspberry Pi。我的核心版本是 3.2.27,沒有 initramfs,我的根文件系統如下:
/lib /* contains kernel modules */ /bin /sbin /usr/bin /usr/sbin /* contains busybox utils binaries */ /usr/lib /* contains cross-compiler tool chain libs */ linuxrc /* generated by busybox, kept in / */ /dev /* I have created console and ttyAM0 manually but added mode devices by udev */ /etc/init.d/rcS /* required by busybox init */
核心啟動後,我得到了一個控制台(我不知道它是否是busybox控制台)。我在下面有幾個問題
- 沒有可用的程序資訊(沒有在 下創建文件/文件夾
/proc
)。- 當我使用
ps -e
它時,它什麼也沒顯示。為什麼會發生這種意外行為?
初始化並掛載根文件系統後,Linux 啟動
/sbin/init
並進行使用者空間初始化,包括掛載/proc
很可能您的
rcS
或讀取的任何配置init
都不會這樣做,您需要告訴它。如果你有一個 shell 提示,你可以
/proc
手動掛載:mount -t proc p /proc
請注意,該
/proc
目錄必須存在,然後才能在其中掛載某些內容。您應該將它包含在您的根映像中。
很可能是因為 1) -
ps
用於/proc
獲取有關正在執行的程序的資訊。要麼是因為初始化不應該這樣做,要麼是因為它沒有這樣做。檢查發行版在啟動時應該做什麼——如何啟動系統。
你可以嘗試的事情:
- mount
/proc
,例如:mount -t proc proc /proc
- 第二個參數是任意的(它顯示為掛載的來源)。檢查 PID=1 的執行情況- 檢查
/proc/cmdline
核心在啟動時收到的參數。如果它包含init=...
您可能需要將其更改為 eg/sbin/init
或刪除它以讓核心嘗試解析 init 以自行執行。您必須在引導載入程序配置中執行此操作(對於 R-Pi,這是在 SD 卡 IIRC 上的某個文本文件中)。- 檢查所需的 init 執行檔是否存在 - Busybox 通常有大量指向其二進製文件的符號連結,因此可以使用
command [args]
而不是busybox command [args]
. 你可能會錯過那些。