对文件系统上存在的任何内核源代码树构建模块意味着什么,而不仅仅是那些碰巧在/ lib /中安装的模块?具体来说,我遇到了这两个例子1.和2.,但两者都很模糊。第二个有一些代码,但它没有说明代码实际上在做什么。
答案 0 :(得分:1)
/lib/modules/$(shell uname -r)/build
指的是应包含源树的目录;它通常是/usr/src
中文件夹的符号链接。如果未安装源树,则它是悬挂的符号链接或空目录。
uname -r
给出正在运行的内核的发布字符串(试一试)。这用于标记/lib/modules
的子目录,其中存储了该内核的模块。默认情况下,内核不会加载为不同版本编译的模块(例如,3.13.5 vs 3.13.4),因此如果您编写自己的模块,则必须在每个要使用它的版本中编译它。
由于第一个链接中的makefile使用uname -r
,因此它只适用于当前运行的内核;如果要对其他版本不加改变地使用它,则必须使用该版本重新启动。提问者要求一种简单的方法来修改makefile,以便它可以用于编译任何内核版本的模块,而不仅仅是正在运行的模块。如果您正在阅读第二个链接,这是编写内核模块的介绍,您不必担心这个问题。