必备基础¶
内核编程注意事项¶
不能使用浮点运算。内核在切换模式时候不保存处理器的浮点状态。
不要让内核程序进行长时间等待。操作系统本身是抢占式的,内核是非抢占式的
保持代码整洁,方便后期调试
申请资源后一定要释放
Linux 内核API很多配对使用
模块编译Makefile模板¶
ifneq ($(KERNELRELEASE),)
mymodule-objs := mymodule1.o mymodule2.o
obj-m := mymodule.o
else
PWD := $(shell pwd)
KVER := $(shell uname -r)
KDIR := /lib/modules/$(KVER)/build
all:
$(MAKE) -C $(KDIR) M=$(PWD)
clean:
rm -rf *.o *.mod.c *.ko *.symvers *.order *.markers *-
endif
KERNELRELEASE 是在内核源码的顶层 Makefile 文件中定义的一个变量,第一次读取此Makefile文件的时候变量没有被定义,第二次才会定义。
-C表示跳转到内核源码目录下读取那里的Makefile。M=表明返回到当前目录继续读入、执行当前的Makefilemymodule-objs := xxx1.o xxx2.o表示mymodule.o由 xxx1.o 和 xxx2.o 链接生成obj-m := mymodule.o表示编译链接后生成 mymodule.ko 模块