Удалите исходники ядра Linux в соответствии с .config - PullRequest
6 голосов
/ 08 сентября 2011

Есть ли какой-нибудь эффективный способ (возможно, путем злоупотребления препроцессором gcc?), Чтобы получить набор раздетых исходных кодов ядра, где весь код, не необходимый в соответствии с .config, пропущен?

Ответы [ 3 ]

3 голосов
/ 14 сентября 2011

Ну, есть несколько шагов в решении.

Во-первых, можно получить использованные команды компилятора с помощью

make KBUILD_VERBOSE=1 | tee build.log
grep '^  gcc' build.log

На данный момент я выбираю только одну командную строку gcc для дальнейших шагов.Например, сборка kernel / kmod.c выглядит следующим образом:

gcc <LIST OF MANY OPTIONS> -c -o kernel/kmod.o kernel/kmod.c

Теперь я удалил параметр -c, -o ... и добавил -E, отключив тем самым компиляцию и записав вывод препроцессора вэкран.Далее я добавляю -fdirectives-only, чтобы предотвратить расширение макроса, и -undef, чтобы удалить определения макросов, определенные в GNU.-nostdinc для удаления стандартных заголовков c уже добавлен make-файлом ядра.

Теперь включает в себя все еще включены и, следовательно, расширены на выходе препроцессора.Таким образом я передаю входной файл через grep, удаляя их: grep -v '#include' kernel/kmod.c.Теперь осталось только одно включение: autoconf.h включается в командной строке Makefile.Это замечательно, поскольку фактически определяет макросы, используемые #ifdef CONFIG_... для выбора активного кода ядра.

Осталось только отфильтровать комментарии препроцессора и оставшиеся #define s из autoconf.h с помощью grep -v '^#'.

Весь канал выглядит так:

grep -v '#include' kernel/kmod.c | gcc -E -fdirectives-only -undef <ORIGINAL KERNEL BUILD GCC OPTIONS WITHOUT -c AND -o ...> - |grep -v '^#'

, и в результате получается отфильтрованная версия kernel / kmod.c, содержащая код, который фактически встроен в kmod.o.

Остаются вопросы: как это сделать для всего дерева исходных текстов?Существуют ли файлы, которые действительно создаются, но никогда не используются и не удаляются при связывании?

0 голосов
/ 13 августа 2018

Сценарий минимизации ядра:

Проект, вдохновленный этим вопросом и дающий простой ответ ... Он содержит скрипт Python, который генерирует минимизированный исходный код во время сборки.Новое свернутое дерево источников будет содержать только используемые источники. (страница проекта)

Информация:

Скрипт протестирован для работы с ядром v4.14.x, однако сборка ядра еще однавремя из этих сгенерированных минимизированных источников требует копирования файлов make, файлов Kconfig и т. д. ... по крайней мере, мы могли бы легко изолировать только использованный источник для исследований и разработки*

Примечание и напоминание:

Если мы строим внутри и против целевой машины, у нас также есть команда make localmodconfig, которая сокращает текущий файл конфигурации только с используемыми в данный моментМодули, если они используются до «Минимизации», будут генерировать еще более раздетые источники

0 голосов
/ 09 сентября 2011

Скомпилируйте все и используйте atime, чтобы узнать, какие файлы не использовались. Это может быть не очень точно, но, вероятно, стоит попробовать.

...