c檔案如何編譯為ko的MAKEFILE檔案編寫

2021-07-11 06:37:39 字數 2116 閱讀 6483

首先需要知道:

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 ...