自分のカーネルをコンパイルするとき、基本的に私がすることは次のとおりです:
Www.kernel.orgからソースをダウンロードして解凍します。
以前の.config
をソースにコピーし、make menuconfig
を実行して新しいオプションを監視し、カーネルの新しいポリシーに従って構成を変更します。
次に、それをコンパイルします:make -j 4
最後に、私はそれをインストールします:su -c 'make modules_install && make install'
。
いくつかのテストの後、古いカーネルを(/boot
と/lib/modules
から)削除し、新しいカーネルで完全に実行します(この最後の手順で数回私の命が救われました!pro-tip!)。
問題は、私が常に/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の作成に進むことができます
モジュールを取り除くための最良の方法は何かを知るために問題について追加の調査を行いましたが、ここに私が見つけた完全なプロセスがあります(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
を追加します。これは、サイズを大幅に削減するのに十分です。
参照:Documentation/kbuild/kbuild.txt
の- INSTALL_MOD_STRIP 。
initramfs.conf
の設定を変更することもできます
/etc/initramfs-tools/initramfs.conf
でファイルを検索します
MODULES=most
という設定があります。これには、initrdイメージのほとんどのモジュールが含まれます。
これをMODULES=dep
に変更すると、initramfsジェネレーターはどのモジュールを含めるかを推測します。
Initramfs.conf here のマンページを確認してください。
注1:上記の手順を実行すると、私のinitramfsイメージのサイズが282 MBから99 MBに減少しました(これはまだ十分な大きさですが、大幅に改善されています)。
注2:/lib/modules/<kernel version>
でもカーネルモジュールを削除してみました。 OSアップデートによって提供されるモジュールは取り除かれ(サイズ= 211 MB)、したがって、対応するintiramfsイメージは約15 MBです。自分でコンパイルしたバニラカーネルのモジュールを削除した後、フォルダーのサイズは185 MBで、intramfsイメージは16 MBでした。したがって、すべての最適化後、サイズは282 MBから16 MBに減少しました。ストリッピングには、このコードを使用します
find /lib/modules/<kernel_release>/ -iname "*.ko" -exec strip --strip-unneeded {} \;
上記のコードで、<kernel_release>
を、モジュールを削除するカーネルバージョンに置き換えます。
詳細については、この link を参照してください。
上記のコードはSudo
またはsu
として実行する必要があります