1:在所对应的驱动类型的文件夹下,建立自己驱动的文件夹
比如做一个4*4键盘,可以在linux/drivers/misc下建立自己驱动的文件夹myboard,然后将自己的.c文件添加进去。
2:在这个目录下添加自己的Kconfig文件,自己根据语法。
例如 config MYBOARD4*4//config为配置关键字,MYBOARD4*4为新配置选项的标识符(make menuconfig 窗口配置名称)。
tristate "my driver support" /tristate表示可以配置成n,y,m三个选项
{depends on XXX} //依赖的关系,只有编译这个依赖,次驱动才支持。没有时不需要次项。
default y//表示配置默认为y,直接添加进内核选项
help //配置的帮助
myboard is sample scanable board ,y for build in, m for module.
3:在上级目录的Kconfig文件中包含上边添加的新选项
如 在上级Kconfig中最后添加
source "drivers/misc/myboard/Kconfig" //相当于include,引入新添加选项的Kconfig
4:添加makefile编译文件
如 obj-$(CONFIG_MYBOARD4*4)+= myboard。o //直接编译到内核
以下是编译模块的makefile
{
ifneq ($(KERNELRELEASE),)
obj-m :=keyboard.o
#modules-objs:=keyboard.o
else
KDIR :=/home/chen/work_chen/linux-3.5add_key
PWD := $(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -rf *.o.* *.cmd *.ko *.mod.c .tmp_versions
endif
}
注意:Kconfig中编译标识符MYBOARD4*4,要和编译选项中的CONFIG_MYBOARD4*4后边一致。编译的目标myboard。o要和源代码myboard。c一致。
obj-$(CONFIG_MMC_BLOCK) += mmc_block.o
mmc_block-objs := block.o queue.o
注意mmc_block这个文件可能并不存在,他只是作为下边两个目标文件的一个连接生成目标,可自行定义名称
5:编译内核
make clean
make menuconfig //进入内核配置选项,配置新加入的选项,配置选项可以配置成n,y,m。默认为y,把它配置成m,然后保存配置,退出。
make zImage //编译内核,生成内核映像文件。
make modules //编译内核模块(对于已链接到内核的直接用,就可以生成.ko文件)
一般情况是在你写的驱动的目录下直接make就可生成.ko文件.
6:确认结果
在arch/arm/boot下可以看到新生成的zImage内核映像文件
在linux/drivers/myboard下可以看到键盘的内核模块myboard.ko
7:加载模块
insmod myboard.ko
rmmod myboard
加载模块后生成的设备驱动的名称由。c文件中定义的DEVICE_NAME决定的。