首先需要知道:
obj-m = *.o
obj-y = *.o
上面兩者的區別在於,前者才會生成ko檔案,後者只是**編譯進核心,並不生成ko檔案。
生成ko檔案,分兩種情況:單個.c檔案和多個.c檔案【以展訊7730 android4.4為例】
1.單個.c檔案
kernel配置檔案中定義
config_runyee_camvib=m
注意上面的m,表示作為乙個模組進行編譯,最後在makefile中需要用到的編譯開關。
然後再相應的原始碼目錄中的makefile中新增如下語句:
obj-$(config_runyee_camvib) := camvib.o
上面的一行的作用就是編譯camvib.c的原始檔,同時會生成相應的camvib.ko檔案,和編譯生成
的camvib.o在同一目錄
最後就是insmod動作了:
insmod /system/lib/modules/camvib.ko
2.多個.c檔案生成ko檔案
kernel配置檔案中定義
config_touchscreen_focaltech=m
注意上面的m,表示作為乙個模組進行編譯,最後在makefile中需要用到的編譯開關。
然後再相應的原始碼目錄中的makefile中新增如下語句:
obj-$(config_touchscreen_focaltech) +=
focaltech_ts
.ofocaltech_ts-objs :=
focaltech.o
focaltech_ts-objs +=
focaltech
_ctl
.ofocaltech_ts-objs +=
focaltech_ex_fun.o
上面的意思就是編譯生成
ko檔案需要三個.c檔案【focaltech.c focaltech_ctl.c focaltech_ex_fun.c】,最後
生成名為
focaltech_ts
的ko檔案,注意ko檔名一定不能
為foc
altech
。那麼在obj-m和lpc-objs中都含有
focaltech.o,
對make來講會產生迴圈和混淆,因此也不能這樣書寫
最後就是insmod動作了:
insmod /system/lib/modules/
focaltech_ts
.ko
注意事項:
即可以保證insmod無誤;
舉例:核心原始檔my.c
#include #include #include static int funcin(void)
static void funcout(void)
module_init(funcin);
module_exit(funcout);
module_license("gpl");
module_author("elfy");
makefile 檔案
obj-m:=my.o
mymodule-objs:=module
kdir:=/lib/modules/$(shell uname -r)/build
make:=make
default:
$(make) -c $(kdir) subdirs=$(pwd) modules
clean:
$(make) -c $(kdir) subdirs=$(pwd) clean
注意事項:
1、核心目錄
2、makefile中obj-m:=my.o 這個和原始檔my.c要對應
3、mymodule-objs:=module 這個my也是和my.c對應的
如果原始檔為your.c
這兩句話就應該改為obj-m:=your.o
yourmodule-objs:=module
4、檢視輸出的時候 用dmesg輸出資訊太多,可以用grep過濾一下
dmesg | grep "keywords"
c檔案如何編譯為ko的MAKEFILE檔案編寫
c檔案如何編譯為ko的makefile檔案編寫 2014 04 29 11 24 25 分類 android平台 首先需要知道 obj m o obj y o 上面兩者的區別在於,前者才會生成ko檔案,後者只是 編譯進核心,並不生成ko檔案。生成ko檔案,分兩種情況 單個.c檔案和多個.c檔案 以展...
C 將類檔案編譯為dll檔案
輸入csc 檢視編譯選項 注意 要將命名空間也寫進csc裡啊 out 輸出檔名 預設值 包含主類的檔案或第乙個檔案的基名稱 target exe 生成控制台可執行檔案 預設 縮寫 t exe target winexe 生成 windows 可執行檔案 縮寫 t winexe target libr...
如何寫Linux下編譯驅動模組的Makefile
編譯驅動模組的makefile的寫法示例 general purpose makefile for linux kernel module by guoqingbo kern dir home gqb development linux kernel 2.6.37 kern dir usr src ...