Linux kernel 不编译整个内核,只编译其中的一部分

Linux kernel 不编译整个内核,只编译其中的一部分,linux-kernel,filesystems,ubuntu-14.04,ext3,debian-based,Linux Kernel,Filesystems,Ubuntu 14.04,Ext3,Debian Based,我的兴趣是理解Linux内核。尤其是文件系统。 所以我要做的是,我在内核源代码的fs/ext3/文件夹中的文件(如inode.c、ialloc.c等)中放置了“printk”语句 所以现在我想要的是,我不想编译整个内核,而是只编译与ext3文件系统相关的部分。 有没有办法只编译我在基于debian的系统中所做更改的部分(我使用的是ubuntu 14.04)。我不得不等待整个内核进行不必要的编译,尽管我只对它的一小部分进行了更改。 请在这方面帮助我 我在网上搜索了一下,也找到了一些链接。但它们并不

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

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


我在网上搜索了一下,也找到了一些链接。但它们并不令人满意。他们的步骤是编译完整的内核。

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

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

cd linux-x.x.x

编译特定文件

make./fs/ext3/inode.o

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


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

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

简短回答:

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

长答案:

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

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

当然,这都是假设您当前的内核是使用EXT3驱动程序作为可加载内核模块构建的,而事实可能并非如此


如果不是这样的话,你就太倒霉了。如果您很聪明,您可能可以使用一些链接器黑客来交换EXT3子系统和当前内核中修改过的对象文件。如果这对您来说毫无意义,只需说这是不可能的。

构建单个模块(您的例子中是ext3)。尝试生成M=“路径到模块”


运行make应该只构建过时的部分。是的,我同意,先生,但是它构建了完整的内核。我想要的是构建我所做更改的部分,并将其添加到现有内核中。不是为了一个小小的改变就构建整个内核。也许值得一试,找出为什么make认为你所有的对象都过时了。一种可能是某些内核头文件上的时间戳晚于当前系统日期时间。这是一种解决方案,解决了一个本来不应该存在的问题<代码>生成将自动重新编译修改过的文件,并跳过编译未更改的文件。如果没有,说明您的设置有问题,您应该修复它,而不是解决它。
cd linux-src 
make M=fs/ext3