Chinaunix首页 | 论坛 | 博客
  • 博客访问: 98205
  • 博文数量: 26
  • 博客积分: 326
  • 博客等级: 一等列兵
  • 技术积分: 295
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-26 12:34
文章分类

全部博文(26)

文章存档

2013年(2)

2012年(24)

我的朋友

分类: LINUX

2012-08-29 23:15:05

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


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