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 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
谢谢楼上各位
我选了源码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 编辑 ]
页: [1]
查看完整版本: 怎样将驱动静态编译进内核?