【问题标题】:Linux Kernel Source Code Modification and Re-compileLinux内核源代码修改和重新编译
【发布时间】:2013-09-27 02:09:14
【问题描述】:

我正在修改内核源代码 (/linux/net/mac80211/mesh_hwmp.c) 以向路由帧添加一些签名验证。修改源代码后,是否需要重新编译安装内核才能生效?

以下是我遵循的步骤:

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

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

  3. Ran 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) 所做的每一次更改都必须进行此操作,那么这是一个耗时的过程。我不确定我是否过度构建内核。如果我只在 mac80211 目录中运行 Makefile 就足够了吗?或者,无论如何我都必须经历这个过程。

【问题讨论】:

  • 你是如何配置你的内核的?对于哪个分布?你在用make-kpkg吗?您是否将 mac80211 驱动程序作为模块加载?
  • 我在帖子中添加了一些关于我所做的事情的信息。我正在使用现有的 mac80211 驱动程序,但只是对源代码进行了一些更改,以向路由请求和路由回复添加一些身份验证。我使用的是 Ubuntu 12.04 (x86)。
  • debian 软件包构建可能会强制完全重建,而调用 top-level 内核 Makefile 通常不会。但是你必须手动安装结果。如果您只是修改一个模块,您可以使用 make modules 目标并可能在不重新启动的情况下尝试新模块,但在大多数情况下仍应使用顶级 Makefile。
  • 我正在使用 linux 内核源“无线测试”。我想查看调试消息,因此我在 menuconfig 中启用了必要的 mac80211 调试设置。在那之后,我做了make-kpkg 跟随dpkg -i linux-*.deb。但是,我仍然没有看到调试消息。这里有什么我明显遗漏的东西吗?

标签: linux build compilation kernel


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 2014-08-29
    • 2011-07-01
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多