2013-09-21 176 views
0

我正在修改内核源代码(/linux/net/mac80211/mesh_hwmp.c),为路由帧添加一些签名认证。在修改源代码之后,我是否必须再次构建并安装内核才能使更改生效?Linux内核源代码修改和重新编译

下面是我遵循的步骤:

  1. 下载内核从git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git

  2. 下载后,在/ boot目录复制当前配置的无线测试$ cp /boot/config- `uname-r` ./.config

  3. Ran make menuconfig并选择了以下功能: 网络 - >无线 - >通用IEEE 802.11网络协议栈(mac8 0211)

  4. 它使用fakeroot make-kpkg - initrd kernel_image kernel_headers

  5. 构建内核建好后,安装使用命令 $ sudo dpkg-i linux-*.deb

  6. 难道重启系统创建的.deb软件包(核心和它的头)

这是一个耗时的过程,如果我必须对代码进行每次更改(/ net/mac80211/me sh_hwmp.c)。我不确定是否通过再次构建内核而过度使用。如果我只是在mac80211目录下运行Makefile(s),这足够了吗?或者,无论如何我都必须经历这个过程。

+0

你是如何配置内核的?为什么分配?你使用'make-kpkg'吗?您是否将* mac80211 *驱动程序作为模块加载? –

+0

我已经添加了一些关于我对我的帖子所做的操作的信息。我正在使用现有的mac80211驱动程序,但仅对源代码进行了一些更改,以便为路由请求和路由回复添加一些身份验证。我使用的是Ubuntu 12.04(x86)。 –

+0

Debian软件包构建可能会强制执行完全重建,而调用**顶层**内核Makefile通常不会。但是,你必须手动安装结果。如果您只修改模块,则可以使用make模块目标,并可能在不重新引导的情况下尝试新模块,但在大多数情况下仍应使用顶层Makefile。 –

回答

0

当前配置是/boot发行版的默认配置吗?如果是这样,它可能包含数百或数千个你永远不需要的模块。那样做一次,安装并引导内核。然后,确保您加载了您感兴趣的模块(例如,启用wifi,插入USB设备)并在您的内核源代码树中运行make localmodconfig(有关详细信息,请参阅make help)。根据需要启用更多配置,并将其用于开发。

您也许会发现sudo make INSTALL_MOD_STRIP=1 modules_install install会在很多发行版上安装内核时做正确的事情,并且您将避免与创建程序包,强制重建有关的任何问题。缺点是您必须手动从/boot中删除旧的内核,configs,initrds和/lib/modules中的模块。