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

Модифицирам изходния код на ядрото (/linux/net/mac80211/mesh_hwmp.c), за да добавя известно удостоверяване на подписа към рамките за маршрутизиране. След като модифицирам изходния код, трябва ли да създам и инсталирам ядрото отново, за да влязат в сила промените?

Следват стъпките, които последвах:

  1. Изтеглих ядрото от git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git

  2. След изтеглянето копирах текущата конфигурация от директорията / boot в безжичното тестване $ cp /boot/config- `uname-r` ./.config

  3. Изпълних make menuconfig и избрах следните функции: Мрежа -> Безжична връзка -> Generic IEEE 802.11 Networking Stack (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 конфигурацията по подразбиране на дистрибуцията ли е? Ако е така, вероятно съдържа стотици или хиляди модули, от които никога няма да имате нужда. Направете това веднъж, инсталирайте и стартирайте ядрото. След това се уверете, че сте заредили модулите, които ви интересуват (напр. активиране на wifi, включване на USB устройства) и стартирайте make localmodconfig в дървото на изходния код на ядрото (вижте make help за подробности). Активирайте повече конфигурации, ако е необходимо, и ги използвайте за разработка.

Може също така да откриете, че sudo make INSTALL_MOD_STRIP=1 modules_install install ще направи правилното нещо в много дистрибуции, за да инсталира ядрото и ще избегнете всякакви проблеми, свързани със създаването на пакет, принуждавайки повторно изграждане. Недостатъкът е, че ще трябва ръчно да премахнете старите ядра, конфигурации, initrd от /boot и модули от /lib/modules.

person Jani    schedule 30.12.2015