驅動基礎 帶引數的核心模組

2021-10-25 02:03:55 字數 4034 閱讀 1549

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_parammodule_param_array函式完成引數傳遞,前者支援單個引數傳遞,後者支援多個引數傳遞。形式如下:

module_param

(name, type, perm)

module_param_array

(name, type, nump, perm)

各引數意義如下表:

引數引數意義

name模組引數名

type模組引數資料型別,可以為:

byteshortushortintuintlongulongcharpbool

nump引數數量(陣列元素個數,型別為指標)

perm模組引數訪問許可權,具體定義可以檢視include/linux/stat.h檔案

常見許可權引數:

s_irusr00400檔案所有者可讀

s_iwusr00200檔案所有者可寫

s_ixusr00100檔案所有者可執行

使用module_parammodule_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_nameinput_numberinput_array[10]module_name為模組內建的靜態引數;input_numberinput_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_parammodule_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...