0

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

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

PS-我搜索了互联网,也找到了一些链接。但它们并不令人满意。他们的步骤指示编译完整的内核。

4

3 回答 3

0

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

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

简短的回答:

这是不可能的。只需编译整个内核。第一次编译后,make将确保仅重新编译更改的文件,以便将来的构建速度更快。

长答案:

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

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

当然,这一切都假设您当前的内核是使用 EXT3 驱动程序构建的,作为可加载的内核模块,但情况可能并非如此。

如果不是这种情况,那么你很不走运。如果你很聪明,你也许可以使用一些链接器黑客技术将 EXT3 子系统与当前内核中修改的目标文件交换出来。如果这对你来说没有意义,那我只想说这是不可能的。

于 2015-11-05T22:36:47.103 回答
0

构建单个模块(在您的情况下为 ext3)。尝试使 M="path_to_module"

cd linux-src 
make M=fs/ext3
于 2016-08-15T16:17:58.673 回答
0

我假设你已经修改了 fs/ext3/inode.c

假设你的内核源码目录是 linux-xxx 改变目录

cd linux-xxx

编译特定文件

制作./fs/ext3/inode.o

只有特定的文件会被编译。对您更改的所有文件执行相同操作。

于 2015-11-05T10:07:02.400 回答