linux 驱动总结
linux驱动接口里的_init _exit 其实就是宏。
linux驱动程序不能用GCC直接编译生成模块。要用makefile
ifneq ($(KERNELRELEASE),)
obj-m := test.o
else
#KERNELDIR ?= /lib/modules/$(shell uname -r)/build
KERNELDIR := /home/twei/code/linux-2.6.35.3
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
clean:
rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions *.order *.symvers
其中值得注意的是$(MAKE) -C $(KERNELDIR) M=$(PWD) modules和rm -rf *.o *~ core .depend .*.cmd
*.ko *.mod.c .tmp_versions *.order *.symvers这两句前面需要加入TAB键,因为它们是命令,具体详细解释请参考Makefile的详细教程,而KERNELDIR属于linux内核的编译路径,obj-m :=test.o属于需要编译的驱动模块,一般情况只需要简单的修改test.o的名字就能正常的编译。