Linux-Kernel

編譯核心時如何減小 initrd 的大小?

  • July 27, 2021

當我編譯自己的核心時,基本上我所做的如下:

  1. 我從 www.kernel.org 下載原始碼並解壓縮。
  2. 我將以前的內容複製.config到原始碼中,並make menuconfig根據核心的新策略查看新選項並修改配置。
  3. 然後,我編譯它:make -j 4
  4. 最後,我安裝它:su -c 'make modules_install && make install'.
  5. 經過幾次測試,我刪除了舊核心(從/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 確實帶來了答案,但我發現的過程在某種程度上更加標準化):

  1. 下載原始碼www.kernel.org並解壓。
  2. 將您以前的文件複製.config到原始碼中,並make menuconfig根據核心的新策略查看新選項並修改配置。
  3. 然後,編譯它:
$> make -j 4
  1. 最後,安裝它:
$> su -c 'make INSTALL_MOD_STRIP=1 modules_install && make install'
  1. 經過幾次測試後,從/boot/lib/modules目錄中刪除舊核心。

INSTALL_MOD_STRIP設置在安裝模組時1添加一個strip --strip-debug,這足以大幅減小尺寸。

請參閱:INSTALL_MOD_STRIPDocumentation/kbuild/kbuild.txt.

引用自:https://unix.stackexchange.com/questions/270390