本文内容适用于编译运行于本机的内核模块。
开发内核模块往往第一步的编译环境设置最容易出错,需要安装的主要有build-essential, 对应版本的linux-header。
然后就是Makefile的写法
1 obj-m := hello.o2 # 网上很多是自己下载源码,然后用的是3 # KDIR :=/usr/src/kernel-source-2.6.8类似的路径,这样很容易出错,造成4 # 编译出来的内核版本号和实际运行的内核版本号不一致。在insmod时就会得到这5 # 个错误 insmod: error inserting '': -1 Invalid module format6 KDIR :=/lib/modules/$(shell uname -r)/build7 PWD := $(shell pwd)8 default: 9 $(MAKE) -C $(KDIR) M=$(PWD) modules
根据这个Makefile,直接make,就能正确编译。
最准确的,见The Linux Kernel Module Programming Guide:2.2. Compiling Kernel Modules
其他参考:
How to Create, Compile, Load Linux LKM Loadable Kernel Modules
Writing device drivers in Linux: A brief tutorial
来源:https://www.cnblogs.com/lbsx/archive/2011/09/06/2169132.html