不编译整个内核只是其中的一部分

时间:2015-06-01 07:30:43

标签: linux-kernel filesystems ubuntu-14.04 ext3 debian-based

我的兴趣是了解Linux内核。特别是文件系统。 所以我正在做的是,我在内核源代码的fs / ext3 /文件夹中的文件(例如inode.c,ialloc.c等)中放置了“printk”语句。

所以现在我想要的是,我只想编译与ext3文件系统有关的部分,而不是编译整个内核。 有没有办法只编译我在基于debian的系统中进行更改的部分(我使用的是ubuntu 14.04)。我必须等待整个内核进行不必要的编译,尽管我只对其中的一小部分进行了更改。 请帮助我。

P.S.-我搜索了互联网并发现了一些链接。但他们并不满意。他们的步骤表明编译完整的内核。

2 个答案:

答案 0 :(得分:0)

我原以为你修改了fs / ext3 / inode.c

假设您的内核源目录是linux-x.x.x. 更改目录

  

cd linux-x.x.x

编译特定文件

  

make ./fs/ext3/inode.o

仅编译特定文件。 对所有已更改的文件执行相同操作。

答案 1 :(得分:0)

  

是的我同意先生,但它构建了完整的内核。而我想要的是   构建我已经进行更改的部分并将其添加到   现有内核。不构建整个内核以进行小的更改。

如果我理解正确,你想要编译内核的文件系统部分的目标代码,并以某种方式将其破解到你当前的内核中。

简答:

无法做到。只需编译整个内核。在第一次编译之后,make将确保仅重新编译已更改的文件,以便将来的构建速度更快。

答案很长:

如果您当前运行的内核已将EXT3支持编译为模块(我假设这是可行的 - 我还没有检查过),您可以尝试将修改后的文件系统代码编译为模块并将其交换到运行中内核通过卸载当前的文件系统模块并加载你的内核。当然,如果你在卸载时没有真正使用EXT3驱动程序,你将只能这样做。

然后,您将遇到与构建和运行OOT内核模块相同的问题。您几乎肯定需要内核头文件,用于编译当前内核的相同编译器版本以及匹配的内核源代码。您可能还需要摆弄Makefile,以便将树内模块构建为OOT模块。

当然,这都假设您的当前内核是使用EXT3驱动程序构建的,可以作为可加载的内核模块,可能不是这种情况。

如果情况并非如此,那你很幸运。如果你很聪明,你可能可以使用一些链接器hackery将EXT3子系统替换为当前内核中修改过的目标文件。如果这对你没有意义,那就说这是不可能的。