從 initramfs 保存變數(在引導時)
如何在安裝真實文件系統之前在啟動時保存環境變數?
我知道
/etc/environment
但 initramfs 文件還不能訪問。我還想過編寫一個文件來儲存該值,但是當該文件在系統上退出時,它會在掛載真實文件系統後被覆蓋Ps:我只是想儲存變數以供以後使用,而不是在啟動時讀取它
回答後編輯
大約 :
如果您沒有在核心映像中包含該模組
insmod /path/to/mod.ko
否則直接
echo "env_var=value" > /proc/name_of_your_process
模組
name_of_your_process
內部給出的名稱在哪裡(執行時)__init``entry = proc_create("name_of_your_process",0777,NULL,&my_fops);
然後稍後在腳本中的啟動過程中
cat /proc/name_of_your_process >> env_var=value rmmod mod.ko
當 initramfs 清理所有文件時,它會執行switch_root,這將刪除除以下文件夾之外的所有文件:/proc、/dev、/sys 和 /run。可以在其中一個文件夾中創建一個特殊文件,但其中涉及一些技巧。
當然,您最簡單的選擇是在載入根文件系統之後但在執行 init 之前添加一個腳本以將變數寫入文件系統。這將進入“ local-bottom ”文件夾。你有什麼理由不能這樣做嗎?
好吧,正常的環境繼承(只是導出它……)在理論上可以工作,但是……問題是,無論你的initramfs開始什麼都可能會故意清理環境,因為通常這樣做是為了確保沒有什麼奇怪的繼續。不檢查環境變數可能會帶來安全隱患。
我知道
/etc/environment
但 initramfs 文件還不能訪問。initramfs的有趣之處在於你可以做任何你想做的事。唯一的限制是你的想像力。
您完全可以使文件可訪問。掛載、修改、解除安裝。或者,如果您使用的是傳統文件系統 - 沒有校驗和 - 您甚至可以在不安裝任何東西的情況下修改它(或者至少不在讀寫模式下)。GRUB 用於
grubenv
.如果您不想弄亂文件系統或物理儲存,您可以設置一個 ram 磁碟或 tmpfs 或循環設備,或者…… initramfs 有無數種方法可以留下一些東西(您通常必須製作一個努力清理)。