针对正在运行的内核构建外部模块

时间:2016-03-26 19:52:05

标签: linux ubuntu build linux-kernel kernel-module

我正在尝试为Ubuntu服务器构建最新的linux加密驱动程序。 Ubuntu服务器安装了正在运行的内核,附加程序和标头。但是,加密模块的源代码来自Torvald的GitHub(而不是Ubuntu)。

我也在内核文档Building External Modules中工作。 我克隆了最新的内核:

git clone --depth=1 https://github.com/torvalds/linux.git 

然后:

cd linux

下一步:

$ make -C /usr/src/linux-headers-4.2.0-34 M=$PWD crypto
make: Entering directory '/usr/src/linux-headers-4.2.0-34'

  ERROR: Kernel configuration is invalid.
         include/generated/autoconf.h or include/config/auto.conf are missing.
         Run 'make oldconfig && make prepare' on kernel src to fix it.

make: Nothing to be done for 'crypto'.
make: Leaving directory '/usr/src/linux-headers-4.2.0-34'

$ find /usr/src -name 'autoconf.h'
/usr/src/linux-headers-4.2.0-34-generic/include/generated/autoconf.h
$ find /usr/src -name 'auto.conf'
/usr/src/linux-headers-4.2.0-34-generic/include/config/auto.conf

而且:

$ find /usr/src -type d -name 'build'
/usr/src/linux-headers-4.2.0-34/tools/build
/usr/src/linux-headers-4.2.0-34-generic/include/config/build

尝试使用build目录会产生以下结果:

$ make -C /usr/src/linux-headers-4.2.0-34/tools/build M=$PWD crypto
make: Entering directory '/usr/src/linux-headers-4.2.0-34/tools/build'
make: *** No rule to make target 'crypto'.  Stop.
make: Leaving directory '/usr/src/linux-headers-4.2.0-34/tools/build'
我显然错过了一些明显的东西。这并不奇怪,因为我对kbuild几乎一无所知。我在/usr/src有一个现有的配置和来源,我在$PWD/crypto有新文件。我不清楚为什么要为现有配置生成新配置。

如何针对其他人提供的正在运行的内核更新内核加密模块?

1 个答案:

答案 0 :(得分:1)

实际上这里有两件事需要关注:

正在运行的内核版本是否与我们使用的源相同。
由于先前编译的内核可能没有可能在最新版本中使用的所有依赖项,而具有最新内核源的外部模块的编译可能依赖于代码的任何部分,其仅存在于最新版本中。因此,建议使用我们使用外部模块的最新版本内核。

其次,内核编译的.config文件
您可以将其从文件系统的/boot/config(current-version)*复制到内核源代码顶级目录中的.config。我们可以从uname -r

获取当前版本

因此,如果运行版本(使用命令uname -r检查)不等于下载源,则需要编译并使用新内核或以其他方式下载运行内核的相同版本的内核。对于内核编译,请使用引导目录中的配置文件,如上所述进行复制。

然后,您可以继续使用正常的方法编译外部模块,并使用正在运行的内核加载它,而不会出现任何问题。