Linux内核源代码修改和重新编译

时间:2013-09-21 21:38:16

标签: linux build compilation kernel

我正在修改内核源代码(/linux/net/mac80211/mesh_hwmp.c)以向路由帧添加一些签名身份验证。修改源代码后,是否必须再次构建和安装内核才能使更改生效?

以下是我遵循的步骤:

  1. git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git

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

  4. make menuconfig并选择以下功能: 网络 - >无线 - >通用IEEE 802.11网络堆栈(mac80211)

  5. 使用fakeroot make-kpkg - initrd kernel_image kernel_headers

  6. 构建它
  7. 构建内核后,使用该命令安装创建的.deb软件包(核心及其标头) $ sudo dpkg-i linux-*.deb

  8. 重新启动系统

  9. 如果我必须对代码所做的每一项更改(/net/mac80211/mesh_hwmp.c)进行此操作,这是一个耗时的过程。我不确定我是否因为再次构建内核而过度使用。如果我只是在mac80211目录中运行Makefile就足够了吗?或者,无论如何,我都必须经历这个过程。

1 个答案:

答案 0 :(得分:0)

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

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