2015年4月17日 星期五

Kernel module link static library

http://www.16rd.com/thread-18902-1-1.html
http://www.16rd.com/thread-19048-1-1.html
http://www.4byte.cn/question/518154/how-to-use-shipped-in-kernel-module-makefile.html

[DESCRIPTION]
有些第3方驅動只釋放了lib庫文件,因此編譯上需要額外處理

[KEYWORD]
kernel
第3方lib庫
編譯
build

[SOLUTION]
注意:只能講lib庫放在kernel編譯到的地方,如下:
alps/kernel/
alps/mediatek/custom/common/kernel/
alps/mediatek/custom/$platform/kernel/
alps/mediatek/custom/$proj/kernel/
alps/mediatek/kernel/
alps/mediatek/platform/$platform/kernel/core/
alps/mediatek/platform/$platform/kernel/drivers/
假設第3方庫名稱為test.a
(1). 如果存放的目錄存在Makefile,那麼只需在該Makefile最後添加:
    obj-y += test.a
    然後將test.a文件複製到該目錄下,
    重新命名為test.a_shipped,目的是防止clean kernel階段把該庫給清除掉!
    重新編譯kernel即可。
(2). 如果存放的目錄不存在Makefile,比如在alps/mediatek/custom/目錄下的kernel目錄都沒有Makefile,這時需要自行添加一個Makefile,內容和第1種方法差不多:
    obj := xxx.o yyy.o test.a
    以上表示將xxx.c/yyy.c和test.a編譯到kernel
    然後將test.a文件複製到該目錄下並重新命名為test.a_shipped
    重新編譯kernel即可。

說明:對於kernel的Makefile編寫規則說明,可以到網絡搜索相關材料參考,比如obj-y表示要編譯到kernel,而obj-m表示要編譯成module,obj-n或obj-表示不編譯


沒有留言:

張貼留言