Chinaunix

标题: 怎样将驱动静态编译进内核? [打印本页]

作者: cssjtuer    时间: 2009-07-29 21:09
标题: 怎样将驱动静态编译进内核?
rt
假设我有个test.c(模块),怎讲将它直接编译进内核,就是在编译的时候增加选项选择
假设在drivers下增加了个test目录( drivers/test/test.c)

#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>

static int __init hello_init(void)
{
    printk(KERN_INFO "Hello,World!\n");
    return 0;
}

static void __exit hello_exit(void)
{
    printk(KERN_INFO "GoodBye!\n");
}

module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");

单独模块编译的时候我会写Makefile,这个的Makefile怎么写?
然后编译内核时那个菜单怎样添加?
看了下kbuild里面的几个文件,还是没尝试成功。。。
thx

ps:我就想尝试下把它编译进内核的映像里
作者: magicboatrocket    时间: 2009-07-29 21:44
宋保华的书 linux驱动开发详解 写得挺清楚的,一看就知道,很简单。楼主去找本翻番
作者: luoyan_xy    时间: 2009-07-30 09:50
不仅要添加Makefile文件,还要添加Kconfig文件,在Kconfig文件中添加编译选项,可以参考linux内核设计与实现一书中关于模块的章节,比较详细。
作者: Godbach    时间: 2009-07-30 10:23
对,LS的说的很对。 需要修改内核的config文件,添加上你这个驱动的配置选项。然后make menuconfig的时候,就可以根据你的配置决定这个模块是编进内核,还是编程模块。
作者: cssjtuer    时间: 2009-07-30 13:52
谢谢楼上各位
我选了源码drivers目录下一个简单的Kconfig,照着修改了,基本搞定。

ps: linux内核设计与实现 这书中貌似没模块介绍阿
作者: Godbach    时间: 2009-07-30 14:09
原帖由 cssjtuer 于 2009-7-30 13:52 发表
谢谢楼上各位
我选了源码drivers目录下一个简单的Kconfig,照着修改了,基本搞定。

ps: linux内核设计与实现 这书中貌似没模块介绍阿


这本书中介绍内核的编译了,可能这个比较具体的修改应该没有讲到。之前看过这本书,现在记不起来是否有这个地方
作者: cssjtuer    时间: 2009-07-30 16:05
现在有个问题,我编译进去了,然后可以启动新内核
问题是我怎样发现我的程序确实在内核映像里了呢? 能看到我的程序加载到内存什么位置了吗

下一步是修改我的test.c程序,提供一个功能让我验证?
这个test.c程序应该向哪方面修改? 给点建议。
thx
作者: garyv    时间: 2009-07-30 16:59
在test。c里面添加printk,再编译
作者: cssjtuer    时间: 2009-07-30 18:10
标题: 回复 #8 garyv 的帖子
我的test.c 有printk函数
作者: superfight    时间: 2009-07-31 17:25
主要就是Kconfig和Makefile配置好就行了~

[ 本帖最后由 superfight 于 2009-7-31 17:39 编辑 ]




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2