Chinaunix首页 | 论坛 | 博客
  • 博客访问: 60943
  • 博文数量: 8
  • 博客积分: 26
  • 博客等级: 民兵
  • 技术积分: 96
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-25 09:42
文章分类

全部博文(8)

文章存档

2016年(1)

2014年(1)

2013年(3)

2012年(2)

2011年(1)

我的朋友

分类:

2012-09-09 00:05:43

原文地址:linux内核编译 作者:ZackLee1102

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


阅读(858) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~