读过《
linux设备驱动归纳总结(一):内核的相关基础概念 》和《linux内核设计与实现》第17章,对linux内核编译有点小心得。
基本上分成三块来完成:驱动源码、Makefile和Kconfig。驱动源码完成功能的实现。Makefile的任务就是编译内核或者模块。Kconfig呈现给用户需要编译的配置选项,确定.config中的配置选项的值。
举例说明:要在drivers/char/目录下添加一个子目录fishing,在fishing/中添加驱动源码fishing.c/Makefile/Kconfig,修改drivers/char/目录中的Makefile和Kconfig。
驱动源码:drivers/char/fishing/fishing.c
#include
#include
#include
static int __init fishing_init(void)
{
printk(KERN_ALERT"hello fishing\n");
return 0;
}
static void __exit fishing_exit(void)
{
printk(KERN_ALERT"bye fishing\n");
return 0;
}
module_init(fishing_init);
module_exit(fishing_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("ZackLee");
MODULE_DESCRIPTION("insert into kernel");
Makefile:
drivers/char/fishing/Makefile:
obj-$(CONFIG_FISHING_POLE) +=fishing.o
#如果由多个C文件生成.o文件,则添加fishing-objs :=name1.o name2.o
drivers/char/Makefile:
添加一行obj-$(CONFIG_FISHING_POLE) += fishing/
Kconfig:
drivers/char/fishing/Kconfig:
menu "this is fishing"
config FISHING_POLE
tristate "Fish Master 3000 support"
default n
help
this is help.
endmenu
drivers/char/Kconfig:
source "drivers/char/fishing/Kconfig"
OK! 就这么多。子目录中的Makefile和Kconfig完成实质性的功能,父目录中的Makefile和Kconfig起“引路”的作用。可以make menuconfig了,如图:
阅读(1838) | 评论(0) | 转发(1) |