静态编译:静态编译即为将驱动直接编译进内核 调试完之后,采用该方法 动态编译:动态编译即为将驱动编译成模块
这里提供一个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.o4.make menuconfig 就可以找到我们刚才添加的模块,默认是Y,保存退出,之后即可在.config中查看到添加的新模块。 5. make uImage:编译到内核内部
