Linux kernel 如何构建内核模块

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 我如何解决这个错误 关于,您的内核模块必须与正在运行的内核

我正在试图编译一个hello world模块

我遵循了以下步骤

  • 下载的Linux内核2.6.35-rc5
  • 解压缩到目录/general/source/linux
  • 编译整个内核
  • 在linux文件夹中创建了一个dir测试
  • 创建并编写了一个hello world模块,如前所述
  • 当我运行insmod命令时,我得到了这个错误

    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。