Модификация исходного кода ядра Linux и повторная компиляция

Я модифицирую исходный код ядра (/linux/net/mac80211/mesh_hwmp.c), чтобы добавить некоторую аутентификацию подписи в кадры маршрутизации. Нужно ли после изменения исходного кода заново собирать и устанавливать ядро, чтобы изменения вступили в силу?

Ниже приведены шаги, которые я выполнил:

  1. Скачал ядро ​​с git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git

  2. После скачивания скопировал текущий конфиг из каталога /boot в wireless-testing $ cp /boot/config- `uname-r` ./.config

  3. Запустил make menuconfig и выбрал следующие функции: Сеть -> Беспроводная связь -> Универсальный сетевой стек IEEE 802.11 (mac80211)

  4. Построил с помощью fakeroot make-kpkg - initrd kernel_image kernel_headers

  5. После сборки ядра установил созданные .deb пакеты (ядро и его заголовки) с помощью команды $ sudo dpkg-i linux-*.deb

  6. Делал перезагрузку системы

Это трудоемкий процесс, если мне приходится проходить это для каждого изменения, которое я вношу в код (/net/mac80211/mesh_hwmp.c). Я не уверен, не переусердствовал ли я, собирая ядро ​​заново. Достаточно ли просто запустить Makefile(ы) в каталоге mac80211? Или я должен пройти через этот процесс несмотря ни на что.


person Maximus Decimus Meridius    schedule 21.09.2013    source источник
comment
Как вы настроили ядро? Для какого дистрибутива? Вы используете make-kpkg? Вы загружаете драйвер mac80211 как модуль?   -  person Basile Starynkevitch    schedule 22.09.2013
comment
Я добавил некоторую информацию о том, что я сделал в свой пост. Я использую существующие драйверы mac80211, но просто вношу некоторые изменения в исходный код, чтобы добавить некоторую аутентификацию к запросам маршрута и ответам маршрута. Я использую Ubuntu 12.04 (x86).   -  person Maximus Decimus Meridius    schedule 22.09.2013
comment
Вполне вероятно, что сборка пакета debian вызывает полную перестройку, чего обычно не происходит при вызове Makefile верхнего уровня ядра. Но тогда вам придется вручную установить результат. Если вы только модифицируете модуль, вы можете использовать цель make modules и потенциально попробовать новый модуль без перезагрузки, но в большинстве случаев все же следует использовать Makefile верхнего уровня.   -  person Chris Stratton    schedule 22.09.2013
comment
Я использую беспроводное тестирование исходного кода ядра Linux. Я хочу видеть сообщения отладки, поэтому я включил необходимые параметры отладки mac80211 в файле menuconfig. После этого я сделал make-kpkg, а затем dpkg -i linux-*.deb. Однако я все еще не вижу сообщений отладки. Есть ли здесь что-то, что я явно упускаю?   -  person Maximus Decimus Meridius    schedule 22.09.2013


Ответы (1)


Является ли текущая конфигурация из /boot конфигурацией дистрибутива по умолчанию? Если да, то он, вероятно, содержит сотни или тысячи модулей, которые вам никогда не понадобятся. Сделайте это один раз, установите и загрузите ядро. Затем убедитесь, что вы загрузили интересующие вас модули (например, включите Wi-Fi, подключите USB-устройства) и запустите make localmodconfig в дереве исходного кода ядра (подробности см. в make help). Включите дополнительные конфигурации по мере необходимости и используйте их для разработки.

Вы также можете обнаружить, что sudo make INSTALL_MOD_STRIP=1 modules_install install будет правильно делать во многих дистрибутивах установку ядра, и вы избежите любых проблем, связанных с созданием пакета, принудительной пересборкой. Недостатком является то, что вам придется вручную удалять старые ядра, конфиги, initrds из /boot и модули из /lib/modules.

person Jani    schedule 30.12.2015