2. 小結
參考核心版本:linux 3.0.15 / itop4412_kernel_3.0
硬體平台:armv7 / itop-4412
編譯環境:ubuntu linux 12.04 lts / gcc version 4.4.1 (sourcery g++ lite 2009q3-67)
linux
核心中,可以借助module_param
和module_param_array
函式完成引數傳遞,前者支援單個
引數傳遞,後者支援多個
引數傳遞。形式如下:
module_param
(name, type, perm)
module_param_array
(name, type, nump, perm)
各引數意義如下表:
引數引數意義
name
模組引數名
type
模組引數資料型別,可以為:
byte
、short
、ushort
、int
、uint
、long
、ulong
、charp
、bool
等
nump
引數數量(陣列元素個數,型別為指標)
perm
模組引數訪問許可權,具體定義可以檢視include/linux/stat.h
檔案
常見許可權引數:
s_irusr
00400
檔案所有者可讀
s_iwusr
00200
檔案所有者可寫
s_ixusr
00100
檔案所有者可執行
使用module_param
和module_param_array
函式可以傳遞定義在模組檔案中的引數,也可以在載入時通過命令列傳入,以下模組para_******_module.c
包含了這兩種方式:
#include
#include
static
const
char
* module_name =
"para_******_module"
;module_param
(module_name, charp, s_irusr)
;static
int input_number;
module_param
(input_number,
int, s_irusr)
;static
int input_array[10]
;module_param_array
(input_array,
int,
&input_number, s_irusr)
;static
int __init para_module_init
(void
)return0;
}static
int __exit para_module_exit
(void
)module_init
(para_module_init)
;module_exit
(para_module_exit)
;module_author
("ryan");
module_license
("gpl v2"
);
該模組定義了3個引數:module_name
、input_number
和input_array[10]
。module_name
為模組內建的靜態引數;input_number
和input_array[10]
為模組載入時輸入的動態引數,input_number
會隨輸入的input_array
元素個數變化,因此第11行中module_param_array
函式需要傳入input_number
的指標&input_number
。
修改當前para_******_module.c
原始碼路徑下makefile
檔案,該makefile
將呼叫核心目錄中的makefile
完成para_******_module
模組編譯
#!/bin/bash
#將******_module.c這個檔案編譯成中間檔案******_module.o
obj-m += para_******_module.o
#linux核心原始碼路徑
kdir := /home/topeet/android4.0/itop4412_kernel_3.0
#當前目錄變數
pwd ?=
$(shell pwd
)#make命名預設尋找第乙個目標
#make -c就是指呼叫執行的路徑
#$(kdir)linux原始碼目錄,當前環境指的是/home/topeet/android4.0/itop4412_kernel_3.0
#$(pwd)當前目錄變數
#modules要執行的操作
all:
make -c $(kdir)
m=$(pwd)
modules
#make clean執行的操作是刪除字尾為o的檔案
clean:
rm -rf *.o *.ko *.mod.c *.order *.symvers
makefile
修改完成後,在para_******_module.c
原始碼路徑下執行make
命令編譯模組,編譯完成後將在para_******_module.c
原始碼路徑下產生para_******_module.ko
檔案,該檔案即待載入的模組
檔案。最後,將模組
檔案拷貝到nfs
根檔案系統目錄下備用。
啟動開發板,進入/system/drvbin/
路徑執行insmod para_******_module.ko input_array=1,2,3,4,5,6,7,8,9,10
命令安裝模組,然後執行rmmod para_******_module
命令解除安裝模組。
模組載入時首先列印了模組內建的module_name
引數,隨後分別列印了input_number
引數和input_array
陣列引數。
當輸入的引數個數超過了input_array
陣列成員數時,載入執行將失敗;當輸入引數存在空格時,載入執行也會失敗。
本文首先介紹了linux
核心模組傳入引數的方式:module_param
和module_param_array
巨集,並基於這兩個巨集實現了帶引數的核心模組,最後通過實際執行驗證帶引數核心模組的可行性。
驅動 模組引數
本例一共三種型別模組引數 無符號整型,字串,字串陣列 include include include include define access 0644 static uint age 24 module param age,uint access static char name netboy ...
核心模組引數
在 中,可以這樣寫 static int cfg value 3 module param cfg value,int,0764 然後,載入核心的時候,可以添上制定的引數值 不加的話,就是 的數值 insmod module name cfg value 100核心模組加進來之後,可以在 sys m...
核心模組程式設計之高階(四) 編寫帶引數的中斷模組
在此,我們將編寫乙個模組,其中有乙個中斷函式,當核心接收到某個 irq 上的乙個中斷時會呼叫它。先給出全部 讀者自己除錯,把對該程式的理解跟到本貼後面。include include include static int irq static char inte ce module parm des...