linux-編譯ko

迷霧綠洲發表於2019-03-23

最近做個音訊外設的驅動,驅動搞定後卻找不到該把它放在哪裡,放在alsa 吧客戶卻基本不用,放在misc吧 有確實有很多已經放在裡面很亂了,而且覺得這個本來就不是自己晶片內的IP驅動只能算是一個外接的外設,最主要是不想把它跟著sdk 釋出出去,最後還是決定把它做成ko吧,這樣他單獨放在一個資料夾裡面,有人需要就單獨釋出給他。
.ko檔案
常規在linux下載入驅動模組都是.o檔案, .o檔案也就是object檔案。

.ko檔案是kernel object檔案,與.o的區別在於其多了一些sections,他單獨編譯擁有自己的程式碼段 資料段等資訊,
.modinfo
.modinfo section是由kernel source裡的modpost工具生成的,包括:

MODULE_AUTHOR

MODULE_DESCRIPTION

device ID table

模組依賴關係。

depmod工具根據.modinfo section生成modules.dep, modules.*map等檔案,以便modprobe更方便的載入模組。
可以在通過命令modinfo xxx.ko 看到ko 的資訊。

在這裡插入圖片描述
可以看到,這個資訊是寫在.c 檔案裡面的。
在這裡插入圖片描述
剩下的就是寫makefile 了,

obj-m +=ak_7755.o

PWD = (shellpwd)all:makeC/home/xuww/work/ziyang/kernel/M=(shell pwd) all: make -C /home/xuww/work/ziyang/kernel/ M=(PWD) modules
clean:

make -C /home/xuww/work/ziyang/kernel/ M=$(PWD) clean

這個Makefile 也比較簡單,
obj-m + = xxx.o 這個是指明需要編譯進ko的.c
M=$(PWD) M需要指明瞭編譯的路徑
-C /home/xuww/work/ziyang/kernel/ -C後面加上後面需要載入進kernel 的目錄,也就是kernel的原始碼路徑
後面在獎賞modules或者clean 就可以了

在板端進行使用ko ,執行命令 : insmod ak_7755.ko

相關文章