如何将内核静态库编译连接到驱动程序中去【转】
2016-07-27 10:37
253 查看
转自:http://blog.csdn.net/ganjianfeng2003/article/details/8089551
如何将内核静态库编译连接到驱动程序中去
2010-12-07 08:27 331人阅读 评论(1) 收藏 举报http://blog.chinaunix.net/u2/61663/showart_2404744.html
刚上邮箱的时候发现一位网友向我询问这个问题,同时发送了一个链接给我了。
上去一看,上面还留有我以前同样的提问,看看时间,都几年前在别人的帖子里面的提问了。貌似当时我遇到同样问题的时候也是到处发帖回帖询问来着的,问的地方有点多,要不是这位朋友给我链接,早不记得那个链接也有访问过,呵呵。
不过再往下看了后才发现,这个问题依然没有给出明确的回答,很多朋友给出的都是应用层库的链接,这和期望的内核层的链接是不一样的。
所以我把自己的一点理解写出来,给后面的朋友参考,期望对后来的朋友有所帮助。
我觉得在驱动程序里面编译链接内核静态库需要从三个方面注意:
1. 首先保证你正确生成了内核库文件,而非应用程序库文件;
2. 其次是除去静态库之外的驱动文件的正确性,包括内核库函数的调用和头文件的申明;
3. 正确修改驱动的Makefile;
这几个方面都正确之后,就能正确地将内核库编译进指定的驱动中去。
下面详细给出个最简单的例子给大家参考,毕竟有代码参考才是大家快速编程的王道。
代码目录结构如下:
DriverEntry.c | |
Makefile | |
lib | myalib.c |
myalib.c | |
Makefile |
内核库包含一个myalib.c和myalib.h文件,代码如下:
//myalib.c void test(void) { printk("A lib test./n"); } |
//myalib.h void test(void); |
# This is the Makefile for parse. RM = rm -f CCFLAGS = -c ARFLAG = -rc CC = gcc AR = ar lib_OBJECTS = myalib.o lib_SOURCE = myalib.c LIB = libtest.a libtest.a:$(lib_OBJECTS) $(AR) $(ARFLAG) -o $@ $^ $(lib_OBJECTS):$(lib_SOURCE) $(CC) $(CCFLAGS) -o $@ $^ clean: $(RM) $(lib_OBJECTS.o) $(RM) $(LIB) |
相关文章推荐
- HDU 5753 Permutation Bo
- 编写消息订阅和发布,配置CMakeLists.txt文件
- 用Maven创建第一个web项目
- spfa hdu 2066 一个人的旅行
- Java学习笔记(2)
- Count Numbers with Unique Digits java解法
- js中Number对象与MATH方法整理总结
- LZMA SDK 9.20(与C相关)
- 数据库中两行相减
- kafka源码分析之kafka的consumer的负载均衡管理
- kettle For input string: "4294967295"
- jre版本不同导致出现编译错误
- UML类图的几种关系
- 2.用Android NDK编译eclipse工程中的c代码
- POJ1014 多重背包(二进制拆分)
- php函数前面加&的意思是什么
- HDU 5752 Sqrt Bo
- 为什么获取的System.Web.HttpContext.Current值为null,HttpContext对象为null时如何获取程序(站点)的根目录
- 通过storyboard的exit返回到上页
- HTTP协议状态码详解(HTTP Status Code)