
Я собираю ядра Linux способом Debian, следуя (в основном) инструкциямСправочник по ядру Debian Linux. Итак, для этапа компиляции я использую target deb-pkg
, и после успешного завершения make deb-pkg
в родительском каталоге генерируется несколько пакетов Debian:
linux-firmware-image-VERSIONS.deb
linux-headers-VERSIONS.deb
linux-image-VERSIONS.deb
linux-image-VERSION-dbg_VERSION.deb
linux-libc-dev_VERSIONS.deb
Часто я обнаруживаю, что устанавливаю только linux-image-x.y.z.deb
четыре других пакета, оставшихся неиспользованными. Это не было бы большой проблемой, но я постоянно обнаруживаю, что генерация пакета, содержащего символы отладки ядра ( linux-image-x.y.z-dbg_x.y.z_arch.deb
), занимает значительное количество времени. Мне интересно, есть ли способ указать deb-pkg
цели сборки не генерировать пакеты символов отладки?
решение1
Ответ, данный MariusMatutiae, не совсем тот, который я ожидал, но я посмотрел некоторые скрипты сборки ядра и нашел работающее решение. Скрипт, который генерирует результирующие пакеты Debian, этоscripts/package/builddeb
. Глядя на этот скрипт, можно увидеть, что части, которые создают пакет с отладочными символами, окружены условными операторами, зависящими от BUILD_DEBUG
того, какие grep-ы указаны KCONFIG
для CONFIG_DEBUG_INFO=y
.
Таким образом, чтобы прекратить создание пакетов Debian с отладочными символами, в настоящее время вам необходимо отключить CONFIG_DEBUG_INFO
опцию ядра:
CONFIG_DEBUG_INFO=n
решение2
kernel-руководствопредполагает следующее:
Сборка будет использовать меньше места на диске, если опция CONFIG_DEBUG_INFO отключена. Debuginfo нужна только в том случае, если вы планируете использовать инструменты бинарных объектов, такие как crash, kgdb и SystemTap, в ядре.
Это можно сделать с помощью этой команды:
cd linux-source-4.12
scripts/config --disable DEBUG_INFO
решение3
Для тех, кто компилирует современную версию ядра (5.19+), вот символы конфигурации, которые следует изменить:
scripts/config --undefine GDB_SCRIPTS
scripts/config --undefine DEBUG_INFO
scripts/config --undefine DEBUG_INFO_SPLIT
scripts/config --undefine DEBUG_INFO_REDUCED
scripts/config --undefine DEBUG_INFO_COMPRESSED
scripts/config --set-val DEBUG_INFO_NONE y
scripts/config --set-val DEBUG_INFO_DWARF5 n
В зависимости от источника файла конфигурации (например, версия Ubuntu) вам может потребоваться выполнить:
scripts/config --disable DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT
решение4
Вам необходимо установить следующее:.configсимволы:
CONFIG_FRAME_POINTER=n
CONFIG_KGDB=n
CONFIG_KGDB_SERIAL_CONSOLE=n
Вам также следует убедиться, что CONFIG_DEBUG_RODATA не установлен, закомментировав его,
# CONFIG_DEBUG_RODATA
Всю информацию по компиляции ядра Linux можно найти, довольно авторитетно,на домашней странице Linux Kernel.