linux-編譯ko
最近做個音訊外設的驅動,驅動搞定後卻找不到該把它放在哪裡,放在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 = (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
相關文章
- linux-原始碼的編譯安裝和解除安裝Linux原始碼編譯
- Java編譯與反編譯Java編譯
- 編譯編譯
- Linux-(awk)Linux
- hadoop編譯—+2.x編譯Hadoop編譯
- gcc 編譯器與 clang 編譯器GC編譯
- 編譯器的編譯基本過程編譯
- 一張圖解析 編譯器編譯流程圖解編譯
- ubuntu下編譯交叉編譯工具鏈Ubuntu編譯
- [譯]iOS編譯器iOS編譯
- 程式碼線上編譯器(上)- 編輯及編譯編譯
- 開源編譯工具和編譯軟體編譯
- Make編譯之編譯32bit ffmpeg編譯
- N1064編譯鏈編譯編譯
- webrtc編譯Web編譯
- 編譯VIM編譯
- acl 編譯編譯
- 交叉編譯編譯
- gcc編譯GC編譯
- srilm編譯編譯
- 編譯版本編譯
- 編譯 ncurses編譯
- 編譯宏編譯
- 編譯原理編譯原理
- 編譯 zsh編譯
- GCC編譯過程(預處理->編譯->彙編->連結)GC編譯
- Linux-程式管理Linux
- Rust 交叉編譯與條件編譯總結Rust編譯
- 交叉編譯-Mac環境使用NDK編譯FFmpeg編譯Mac
- 編譯器的自展和自舉、交叉編譯編譯
- Android反編譯:反編譯工具和方法Android編譯
- Windows下編譯Caffe並編譯Matlab介面Windows編譯Matlab
- apache動態編譯/靜態編譯區別Apache編譯
- cmake編譯指定自己編譯的庫路徑編譯
- 使用JWT的Spring Security - JakubLeškoJWTSpring
- 「譯」懂點那啥編譯編譯
- Go編譯器簡介【譯】Go編譯
- 淺談彙編器、編譯器和直譯器編譯