Linux-Kernel
編譯核心時如何減小 initrd 的大小?
當我編譯自己的核心時,基本上我所做的如下:
- 我從 www.kernel.org 下載原始碼並解壓縮。
- 我將以前的內容複製
.config
到原始碼中,並make menuconfig
根據核心的新策略查看新選項並修改配置。- 然後,我編譯它:
make -j 4
- 最後,我安裝它:
su -c 'make modules_install && make install'
.- 經過幾次測試,我刪除了舊核心(從
/boot
和/lib/modules
)並完全使用新核心執行(最後一步救了我好幾次!這是一個專業提示!)。
/boot/initrd.img-4.x.x
問題是,與我的發行版相比,我總是得到一個巨大的。這里以我目前/boot/
目錄的內容為例:# ls -alFh total 243M drwxr-xr-x 5 root root 4.0K Mar 16 21:26 ./ drwxr-xr-x 25 root root 4.0K Feb 25 09:28 ../ -rw-r--r-- 1 root root 2.9M Mar 9 07:39 System.map-4.4.0-1-amd64 -rw-r--r-- 1 root root 3.1M Mar 11 22:30 System.map-4.4.5 -rw-r--r-- 1 root root 3.2M Mar 16 21:26 System.map-4.5.0 -rw-r--r-- 1 root root 170K Mar 9 07:39 config-4.4.0-1-amd64 -rw-r--r-- 1 root root 124K Mar 11 22:30 config-4.4.5 -rw-r--r-- 1 root root 126K Mar 16 21:26 config-4.5.0 drwxr-xr-x 5 root root 512 Jan 1 1970 efi/ drwxr-xr-x 5 root root 4.0K Mar 16 21:27 grub/ -rw-r--r-- 1 root root 19M Mar 10 22:01 initrd.img-4.4.0-1-amd64 -rw-r--r-- 1 root root 101M Mar 12 13:59 initrd.img-4.4.5 -rw-r--r-- 1 root root 103M Mar 16 21:26 initrd.img-4.5.0 drwx------ 2 root root 16K Apr 8 2014 lost+found/ -rw-r--r-- 1 root root 3.5M Mar 9 07:30 vmlinuz-4.4.0-1-amd64 -rw-r--r-- 1 root root 4.1M Mar 11 22:30 vmlinuz-4.4.5 -rw-r--r-- 1 root root 4.1M Mar 16 21:26 vmlinuz-4.5.0
您可能已經註意到,我的
initrd.img
文件大小大約是我的發行版的 10 倍。那麼,我在編譯核心時是否做錯了什麼?而且,我怎樣才能減小我的尺寸
initrd.img
?
這是因為所有核心模組都沒有被剝離。您需要將其剝離以減小其大小。
使用這個命令:
SHW@SHW:/tmp# cd /lib/modules/<new_kernel> SHW@SHW:/tmp# find . -name *.ko -exec strip --strip-unneeded {} +
這將大大減小尺寸。執行上述命令後,您可以繼續創建 initramfs/initrd
man strip
--strip-unneeded Remove all symbols that are not needed for relocation processing.
我對這個問題做了一些額外的研究,以了解什麼是剝離模組的最佳方法,這是我找到的完整過程(SHW 確實帶來了答案,但我發現的過程在某種程度上更加標準化):
- 下載原始碼
www.kernel.org
並解壓。- 將您以前的文件複製
.config
到原始碼中,並make menuconfig
根據核心的新策略查看新選項並修改配置。- 然後,編譯它:
$> make -j 4
- 最後,安裝它:
$> su -c 'make INSTALL_MOD_STRIP=1 modules_install && make install'
- 經過幾次測試後,從
/boot
和/lib/modules
目錄中刪除舊核心。當
INSTALL_MOD_STRIP
設置在安裝模組時1
添加一個strip --strip-debug
,這足以大幅減小尺寸。請參閱:INSTALL_MOD_STRIP在
Documentation/kbuild/kbuild.txt
.