免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3335 | 回复: 9
打印 上一主题 下一主题

怎样将驱动静态编译进内核? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 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:我就想尝试下把它编译进内核的映像里

论坛徽章:
0
2 [报告]
发表于 2009-07-29 21:44 |只看该作者
宋保华的书 linux驱动开发详解 写得挺清楚的,一看就知道,很简单。楼主去找本翻番

论坛徽章:
0
3 [报告]
发表于 2009-07-30 09:50 |只看该作者
不仅要添加Makefile文件,还要添加Kconfig文件,在Kconfig文件中添加编译选项,可以参考linux内核设计与实现一书中关于模块的章节,比较详细。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
4 [报告]
发表于 2009-07-30 10:23 |只看该作者
对,LS的说的很对。 需要修改内核的config文件,添加上你这个驱动的配置选项。然后make menuconfig的时候,就可以根据你的配置决定这个模块是编进内核,还是编程模块。

论坛徽章:
0
5 [报告]
发表于 2009-07-30 13:52 |只看该作者
谢谢楼上各位
我选了源码drivers目录下一个简单的Kconfig,照着修改了,基本搞定。

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

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
6 [报告]
发表于 2009-07-30 14:09 |只看该作者
原帖由 cssjtuer 于 2009-7-30 13:52 发表
谢谢楼上各位
我选了源码drivers目录下一个简单的Kconfig,照着修改了,基本搞定。

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


这本书中介绍内核的编译了,可能这个比较具体的修改应该没有讲到。之前看过这本书,现在记不起来是否有这个地方

论坛徽章:
0
7 [报告]
发表于 2009-07-30 16:05 |只看该作者
现在有个问题,我编译进去了,然后可以启动新内核
问题是我怎样发现我的程序确实在内核映像里了呢? 能看到我的程序加载到内存什么位置了吗

下一步是修改我的test.c程序,提供一个功能让我验证?
这个test.c程序应该向哪方面修改? 给点建议。
thx

论坛徽章:
0
8 [报告]
发表于 2009-07-30 16:59 |只看该作者
在test。c里面添加printk,再编译

论坛徽章:
0
9 [报告]
发表于 2009-07-30 18:10 |只看该作者

回复 #8 garyv 的帖子

我的test.c 有printk函数

论坛徽章:
0
10 [报告]
发表于 2009-07-31 17:25 |只看该作者
主要就是Kconfig和Makefile配置好就行了~

[ 本帖最后由 superfight 于 2009-7-31 17:39 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP