轉自:http://blog.csdn.net/ganjianfeng2003/article/details/8089551
如何將內核靜態庫編譯連接到驅動程序中去
http://blog.chinaunix.net/u2/61663/showart_2404744.html
?
?
剛上郵箱的時候發現一位網友向我詢問這個問題,同時發送了一個鏈接給我了。
上去一看,上面還留有我以前同樣的提問,看看時間,都幾年前在別人的帖子里面的提問了。貌似當時我遇到同樣問題的時候也是到處發帖回帖詢問來著的,問的地方有點多,要不是這位朋友給我鏈接,早不記得那個鏈接也有訪問過,呵呵。
?
不過再往下看了后才發現,這個問題依然沒有給出明確的回答,很多朋友給出的都是應用層庫的鏈接,這和期望的內核層的鏈接是不一樣的。
?
所以我把自己的一點理解寫出來,給后面的朋友參考,期望對后來的朋友有所幫助。
?
?
我覺得在驅動程序里面編譯鏈接內核靜態庫需要從三個方面注意:
1.???????首先保證你正確生成了內核庫文件,而非應用程序庫文件;
2.???????其次是除去靜態庫之外的驅動文件的正確性,包括內核庫函數的調用和頭文件的申明;
3.???????正確修改驅動的Makefile;
這幾個方面都正確之后,就能正確地將內核庫編譯進指定的驅動中去。
?
?
下面詳細給出個最簡單的例子給大家參考,畢竟有代碼參考才是大家快速編程的王道。
代碼目錄結構如下:?
DriverEntry.c | ? |
Makefile | ? |
lib | myalib.c |
myalib.c | |
Makefile |
1.?????????內核靜態庫文件的生成
?
內核庫包含一個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)(AR)(ARFLAG) -o?@@^ ???????? (libOBJECTS):(libOBJECTS):(lib_SOURCE) ?????????(CC)(CC)(CCFLAGS) -o?@@^ ? clean: ?????????(RM)(RM)(lib_OBJECTS.o) ?????????(RM)(RM)(LIB) |
?
在輸入終端下執行”make”命令即可生成正確的內核庫文件。
本文轉自張昺華-sky博客園博客,原文鏈接:http://www.cnblogs.com/sky-heaven/p/5710135.html,如需轉載請自行聯系原作者