市面上的關於裝置驅動的書大部分是三星的開發板(都是啥210,2440啥的舊晶元),全志和瑞芯微的好像沒看到有,還有有關ti晶元的中文書籍關於驅動方面講的也很淺,不適於入門。
博文是在關於三桑的開發板上的基礎上開始編寫的,因筆者(我)水平問題,錯漏在所難免
參考資料改的makefile
mkdir /root/mypc2
cd /root/mypc2
vim makefile
kernel_dir ?= /root/oriangepi/orangepih5/kernel
pwd := $(shell pwd)
cross_compile = aarch64-linux-gnu-
obj-m = hello.o
#多檔案
#obj-m = module.o
#module-objs := file1.o file2.o
all: modules
modules clean:
$(make) -c $(kernel_dir) arch=arm64 cross_compile=$(cross_compile) \
subdirs=$(pwd) $@
測試方法
touch hello.c
#編譯
make
清理
make clean
以下為帶內容的hello.c測試,入口函式和出口函式編寫標準是「有進無出」(有無返回值)
$vim hello.c
#include #include //入口函式,可自定義函式名,帶返回值
static int hello_init(void)
//出口函式,可自定義函式名,無返回值
static void hello_exit(void)
module_init(hello_init);//入口
module_exit(hello_exit);//出口
module_license("gpl");//協議標準
$ make
make -c /root/oriangepi/orangepih5/kernel arch=arm64 cross_compile=aarch64-linux-gnu- \
subdirs=/root/mypc2 modules
make[1]: 進入目錄「/root/oriangepi/orangepih5/kernel」
cc [m] /root/mypc2/hello.o
building modules, stage 2.
modpost 1 modules
cc /root/mypc2/hello.mod.o
ld [m] /root/mypc2/hello.ko
make[1]: 離開目錄「/root/oriangepi/orangepih5/kernel」
#此時不會在提示空檔案,雖然空檔案也可以編譯
$ ls
hello.c hello.mod.c hello.o modules.order
hello.ko hello.mod.o makefile module.symvers
將驅動檔案拷貝到nfs目錄,開發板掛載nfs目錄(也可以在nfs目錄編寫驅動檔案)
#裝載驅動,帶字尾
$ insmod hello.ko
#解除安裝驅動,設定驅動檔名,不帶字尾
$ rmmod hello
linux驅動的Makefile編寫
makefile如下 obj m hello drv.o kernel dir lib modules shell uname r build pwd shell pwd all make c kernel dir subdirs pwd modules clean rm o ko mod.c ph...
編寫Linux裝置驅動
核心版本 2.4.22 閱讀此文的目的 學會編寫linux裝置 驅動。閱讀此文的方法 閱讀以下2個 檔案 hello.c,asdf.c。此文假設讀者 已經能用c語言編寫linux應用程式,理解 字元裝置檔案,塊裝置檔案,主裝置號,次裝置號 會寫簡單的shell指令碼和makefile。1.hello...
編寫驅動的makefile使要
一般在編譯linux驅動時,我們需要在交叉編譯環境中進行編譯,所以要在編譯環境中搭建交叉編譯環境。編寫驅動的makefile使需要制定驅動依賴的核心的路徑,makefile寫法如下 kern dir linux 2.6.22.6 all make c kern dir m pwd modules c...