Когда я собираю свое собственное ядро, в основном я делаю следующее:
Я загружаю исходники с 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
?
источник
Ответы:
Это потому, что все модули ядра не удалены. Вы должны раздеть это, чтобы уменьшить его размер.
Используйте эту команду:
Это резко уменьшит размер. После выполнения вышеуказанной команды вы можете приступить к созданию initramfs / initrd
источник
initrd
изображения на 10 ... Спасибо большое, все работает отлично!{}
и+
.Я провел дополнительное исследование этой проблемы, чтобы узнать, каков наилучший способ удаления модулей, и вот полный процесс, который я нашел (все же SHW действительно дал ответ, но процесс, который я нашел, как-то более стандартизирован):
Загрузите исходники
www.kernel.org
и распакуйте их.Скопируйте свой предыдущий
.config
источник и выполнитеmake menuconfig
поиск новых опций и измените конфигурацию в соответствии с новой политикой ядра.Затем скомпилируйте это:
Наконец, установите его:
После нескольких тестов удалите старое ядро
/boot
и/lib/modules
каталоги.INSTALL_MOD_STRIP
Когда установлено1
добавитьstrip --strip-debug
при установке модуля, который достаточно , чтобы уменьшить размер резко.Смотрите: INSTALL_MOD_STRIP в
Documentation/kbuild/kbuild.txt
.источник
Вы также можете изменить конфигурацию вашего
initramfs.conf
Найти файл на
/etc/initramfs-tools/initramfs.conf
Есть настройка, которая говорит, что
MODULES=most
она включает в себя большинство модулей kn вашего образа initrd.Измените его так, чтобы
MODULES=dep
генератор initramfs угадывал, какие модули включить.Проверьте man-страницу для initramfs.conf здесь .
ПРИМЕЧАНИЕ 1. После выполнения вышеуказанных шагов размер моего образа initramfs уменьшился с 282 МБ до 99 МБ (это все еще достаточно большой, но его существенное улучшение)
ПРИМЕЧАНИЕ 2: Я также попытался удалить модули ядра в
/lib/modules/<kernel version>
. Модули, предоставляемые обновлениями ОС, удаляются (размер = 211 МБ), и, следовательно, соответствующий образ intiramfs составляет около 15 МБ. После удаления модулей ванильного ядра, которое я сам скомпилировал, размер папки составлял 185 МБ, а образа intramfs - 16 МБ. Таким образом, после всех оптимизаций размер уменьшился с 282 МБ до 16 МБ !! Для зачистки используйте этот кодВ приведенном выше коде замените
<kernel_release>
версию ядра, из которой вы хотите удалить модули.Для дальнейшего обсуждения просмотрите эту ссылку .
Приведенный выше код должен быть запущен как
sudo
илиsu
источник