一、分类
静态编译:静态编译即为将驱动直接编译进内核 调试完之后,采用该方法
动态编译:动态编译即为将驱动编译成模块
二、动态编译
这里提供一个Makefile,动态编译区分单文件与多问见,详细见Makefile内容:
#obj-m = demo.o 单文件
obj-m = demo.o
demo-objs = 1.o 2.o 3.o
PWD := $(shell pwd)
KDIR:=/lib/modules/$(shell uname -r)/build/
all:
make -C $(KDIR) M=$(PWD) modules
clean:
make -C $(KDIR) M=$(PWD) clean
三、静态编译
这里先了解Kconfig和Makefile的作用
Kconfig:对应内核模块的配置菜单。
Makefile:对应内核模块的编译选项。
linux内核编译过程:是根据配置裁剪的结果配合Makefile完成内核编译。
编译步骤:
1 源文件放到内核相应的目录下,我们这里是一个字符设备驱动,所以把源文件放到了/lib/modules/2.6.32-358.el6.i686/build/drivers/char
2.Kconfig:添加一个配置选项菜单
config DEMO /* Makefile中编译可变选项中宏的名字,作用就是定义一个可以选择的变量 /
tristate “Hello Driver added by Dong” / make menuconfig 菜单界面显示的信息,tristate 提供Y M N三种选项 /
default n / 菜单选项默认为N /
help
test for adding driver to menuconfig. / 一些帮助信息,写不写没有关系 */
- 修改Makefile,添加如下内容:
obj-$(CONFIG_DEMO) += demo.o
4.make menuconfig 就可以找到我们刚才添加的模块,默认是Y,保存退出,之后即可在.config中查看到添加的新模块。
5. make uImage:编译到内核内部