Linux下驱动模块化编译与装载、卸载

Linux下驱动模块化编译与装载、卸载

我们在修改完驱动后,如果每次都需要重新编译内核烧录的话,太过麻烦了,我们可以通过NFS来挂载根文件系统、然后驱动程序单独编译,再将.ko文件copy到根文件系统,动态装载上去的方式,来减少这种麻烦。具体方法我们看下面。
  1. 我们将驱动源程序文件单独放到一个文件夹,然后新建一个Makefile文件,编辑输入类似于如下的内容,这是mini2440 LCD背光驱动的Makefile。
ifeq ($(KERNELRELEASE),)
# KERNELDIR ?= /your/target/source/directory/
KERNELDIR ?=/home/eurphan/learn/arm9learn/kernel/linux-3.18.108
PWD := $(shell pwd)
modules:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean:
	rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
.PHONY: modules modules_install clean
else
    obj-m := mini2440_backlight.o
endif

在上面的源码中,KERNELDIR是你的内核源码目录,因为驱动需要使用内核的头文件和链接库,因此是需要指定驱动装载内核相应的源码目录的。obj-m后面的就是驱动源码所生成的.o文件了,生成多个文件的需要在这里全部添加上去。

  1. 驱动有了,我们需要装载到内核上去,我们需要将驱动编辑生成的.ko文件cp到NFS文件系统中,然后在开发板控制台中通过insmod命令装载驱动,卸载驱动用rmmod。如果驱动装载后在/dev目录中没有自动生成设备节点文件的,我们需要通过mknod命令在/dev中手动创建设备文件,示例如下:
cd /dev
mknod backlight c 250 0

在上面的命令中,backlight是设备文件名,c代表是字符设备,250是主设备号,0是次设备号。

你可能感兴趣的:(Linux内核驱动)