Как собрать собственное ядро ​​с помощью localmodconfig, которое поддерживает аппаратное обеспечение нескольких машин?

9

При настройке сервера для запуска одной задачи, например, устройства, может возникнуть необходимость собрать собственное ядро. Например, чтобы сэкономить место на диске.

Загрузка корневой файловой системы Ubuntu Core 13.10 amd64 занимает 38 МБ , где метапакет «linux-image-generic», включая необходимые зависимости, загрузит 79 МБ архивов, а размер пакета kernel-image-xyz-generic по-прежнему составляет 14 МБ. ,

Для сборки ядра, которое отделено от модулей, которые ваше оборудование не будет использовать, эта make localmodconfigкоманда является правильным инструментом для работы. Однако ваша виртуальная машина, на которой выполняется среда сборки и тестирования, загружает модули, отличные от целевого оборудования для развертывания. И / или через некоторое время ваше оборудование для развертывания может стать eol, и будет использовано другое оборудование. И с той частотой, с которой выпускаются обновления ядра, может стать слишком громоздким создание собственного ядра для каждой другой конфигурации оборудования.

Как быстро собрать собственное ядро ​​Linux, которое работает на нескольких разных аппаратных устройствах?

Pro Backup
источник

Ответы:

11

Команда make localmodconfigпо-прежнему является правильным инструментом для работы. На самом деле make localmodconfigработаетscripts/kconfig/streamline_config.pl .

Ввод файла

При чтении streamline_config.plисходного кода (perl) имеется недокументированная функция, my $lsmod_file = $ENV{'LSMOD'};которая позволяет вводить файл для обнаружения загруженного модуля вместо вывода из lsmodкоманды.

Live CD

Потому что localmodconfig использует вывод lsmodдля обнаружения загруженных модулей. Мы запускаем Ubuntu Live CD на каждой из аппаратных установок, открываем терминал ( Ctrl+ Alt+ T), запускаем lsmodи сохраняем его вывод.

Объединенный вывод

Объединяя lsmodвыходные файлы и удаляя последовательные строки заголовков, вы можете быстро создать входной файл, который охватывает все необходимые модули ядра. Нам нравится просматривать список модулей вручную и использовать более ручной рецепт:

  1. $ cd linux-3.11.0/
    или перейдите в каталог, где вы будете запускать команду make

  2. $ lsmod > lsmod.txt
    создает текстовый файл с вашими загруженными модулями

  3. $ nano lsmod.txt
    откроет текстовый редактор Nano, конечно, вы можете использовать ваше любимое приложение-редактор

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

  5. $ make LSMOD="lsmod.txt" localmodconfig
    это скажет localmodconfig использовать ваш файл lsmod.txt в качестве входных данных для обнаружения загруженных модулей

Что касается Стивена Ростедта - автора steamline_config.pl - за предложение более короткой записи на шаге 5.


Пример того, что добавить, а не добавить в lsmod.txt (шаг 4):

Поскольку на материнской плате Intel D33217CK имеются термодатчики Intel, которые мы хотели бы прочитать, мы добавляем следующие строки:

x86_pkg_temp_thermal   13810  0
intel_powerclamp       14239  0

Но мы не хотим запускать виртуальные машины на этом оборудовании, поэтому пропускаем следующие строки:

kvm_intel             128218  0
kvm                   364766  1 kvm_intel

Он имеет сетевой адаптер Apple (Broadcom) Gibabit, подключенный к порту Thunderbolt, поэтому мы добавляем:

tg3                   152066  0
ptp                    18156  1 tg3
pps_core               18546  1 ptp

Мы думаем, что нам не нужно зеркальное отображение объема, и поэтому не добавляем:

dm_mirror              21715  0
dm_region_hash         15984  1 dm_mirror
dm_log                 18072  2 dm_region_hash,dm_mirror

И нам также не нужен вывод графики (текст будет выполняться на сервере без монитора), поэтому мы не включаем:

i915                  589697  3
i2c_algo_bit           13197  1 i915
drm_kms_helper         46867  1 i915
drm                   242354  4 i915,drm_kms_helper

Для другой машины нам нужен дополнительный драйвер Ethernet Realtek:

r8169                  61434  0
mii                    13654  1 r8169
Pro Backup
источник