linux内核编译

878阅读 0评论2012-09-09 dusir120
分类:

读过《 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了,如图:


上一篇:ubuntu下android开发环境配置及常用设置
下一篇:openssl linux install