Linux kernel 如何构建内核模块
我正在试图编译一个hello world模块 我遵循了以下步骤Linux kernel 如何构建内核模块,linux-kernel,linux-device-driver,Linux Kernel,Linux Device Driver,我正在试图编译一个hello world模块 我遵循了以下步骤 下载的Linux内核2.6.35-rc5 解压缩到目录/general/source/linux 编译整个内核 在linux文件夹中创建了一个dir测试 创建并编写了一个hello world模块,如前所述 当我运行insmod命令时,我得到了这个错误 insmod: error inserting 'hello.ko': -1 Invalid module format 我如何解决这个错误 关于,您的内核模块必须与正在运行的内核
insmod: error inserting 'hello.ko': -1 Invalid module format
我如何解决这个错误
关于,您的内核模块必须与正在运行的内核相匹配。例如,如果您想安装这个特定的模块,您还需要安装您构建的内核
通常,您不会自己构建内核,而是使用与发行版内核匹配的预构建版本。在发行版的存储库中查找
内核头包。好的,您犯的错误是内核版本
初试
uname -r
您将获得内核版本。下载的版本很可能不是系统的内核版本。
因此,将make文件更改为
ifeq ($(KERNELRELEASE),)
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
.PHONY: build clean
build:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c
else
$(info Building with KERNELRELEASE = ${KERNELRELEASE})
obj-m := hello.o
endif
确保选项卡的顺序与上述脚本中提到的顺序一致 kernel*devel*
在某些情况下,因为带有标题的东西通常是/usr/include/linux
,这是为用户空间保留的。好吧。。。现在如何解决这个问题呢?任何针对新手的分步指南您几乎只需在Makefile中将KERNELDIR
设置为安装内核头的位置,而不是自定义构建的内核。试试Ubuntu。