免费注册 查看新帖 |

Chinaunix

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

完成一个Hello World模块需要注意的几个地方 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-06 15:54 |只看该作者 |倒序浏览
#ifndef LDD
#define LDD "Linux Device Driver"
#endif

在LDD3一书第二章,对如何编译生成一个模块进行了详尽的阐述,但是还是有些细节问题尚未提及,而且值得探索和思考。笔者根据自己探索的结果,将自己得到的心得体会与大家分享一下。

问题一:要编译一个外部模块,是否需要将整个内核源码树都编译一遍?

:这一步不是必需的,在内核目录下Documentation/Kbuild里明确说明了这一点,而且给出了快速编译外部模块的方法。根据笔者多次试验,得出的规律如下:
   (1)在Makefile里,一般会有下面一行:

$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
   在LDD中,$(KERNELDIR)的值取的是/lib/moules/$(shell uname -r)/build。但同时,也说明了该参数也可以是内核源代码的顶层目录。那么两者有什么区别呢?根据我的测验发现,采用第一种方法,可以很好地实现外部模块的编译。而采用第二种方法时,需要将整个内核源代码重新编译一遍。
   此外,加不加最后一个参数modules也是有区别的。加了modules后,会编译整个内核里的模块;若不加modules则只会编译我们想要的模块。
问题二:供编译用的内核配置如果和模块要运行的内核配置不一样会有影响吗?
:这一点我也没完全弄清楚。但是有一点可以肯定,那就是编译用的内核和运行的内核如果版本不一致,最后模块肯定是运行不起来的。



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/107433/showart_2112279.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP