我安装了以下内核:
[root@localhost ~]# uname -r
2.6.32-573.el6.x86_64以及以下内核源代码:
Linux2.6.32-573.1.1.el6.x86_64
我正在尝试为我自己的内核编译一个内核模块。
在内核源代码的Makefile中,我编辑了外向设置:
[root@localhost linux-2.6.32-573.1.1.el6.x86_64]# cat Makefile | grep "EXTRAVERSION ="
EXTRAVERSION = 2.6.32-573.el6.x86_64并使用以下命令编译模块:
[root@localhost linux-2.6.32-573.1.1.el6.x86_64]# make M=~/hw/
LD /root/hw/built-in.o
CC [M] /root/hw/hello_world.o
Building modules, stage 2.
MODPOST 1 modules
CC /root/hw/hello_world.mod.o
LD [M] /root/hw/hello_world.ko.unsigned
NO SIGN [M] /root/hw/hello_world.ko但是,当我试图安装它时,我会收到以下错误:
[root@localhost linux-2.6.32-573.1.1.el6.x86_64]# insmod ~/hw/hello_world.ko
insmod: error inserting '/root/hw/hello_world.ko': -1 Invalid module formatmodinfo的输出是:
[root@localhost linux-2.6.32-573.1.1.el6.x86_64]# modinfo ~/hw/hello_world.ko
filename: /root/hw/hello_world.ko
license: GPL
srcversion: A8BB878B88F36D3A046026C
depends:
vermagic: 2.6.32-573.el6.x86_64 SMP mod_unload modversions我可以在不需要安装内核源代码的情况下编译当前内核的模块吗?
操作系统: CentOS 6.7最小。分布二进制数
遵循本指南:http://wiki.centos.org/HowTos/I_需求_这个_内核_来源
并从这里下载了Linux2.6.32-573.1.1.el6.x86_64的源代码:
http://vault.centos.org/6.7/updates/Source/SPackages
我知道我可以下载特定内核的源代码,但最终我实际上想要为一个无法找到源代码的内核版本构建模块(仍然是2.6.32),所以我想这样做。
发布于 2016-04-08 07:17:23
实际上,这里有两件事值得关注:
正在运行的内核版本与我们使用的源代码相同。由于以前编译的内核可能没有最新版本中可能使用的所有依赖项,而使用最新内核源代码编译外部模块可能依赖于代码的任何部分,这部分代码仅存在于最新版本中。因此,建议使用我们使用外部模块的最新版本内核。
其次,您可以将内核编译的.config文件从文件系统的/boot/config(当前版本)*复制到内核源代码顶部目录中的.config。当前版本,我们可以从uname -r获得它
因此,如果运行版本(使用命令uname -r检查)不等于下载的源代码,则需要编译和使用新内核,或者以其他方式下载与运行内核相同的内核版本。对于内核编译,请使用引导目录中的配置文件,如上面所述复制它。
然后,您可以继续以正常的方式编译外部模块,并以运行中的内核加载它,而不会出现任何问题。
https://unix.stackexchange.com/questions/274774
复制相似问题