驅動模組傳引數
1.什麼是驅動傳參
驅動傳參就是傳遞引數給我們的驅動。
舉例:
insmod beep.ko a=1
2.驅動傳引數有什麼作用呢?
(1)設定驅動的相關引數,比如設定緩衝區的大小
(2)設定安全校驗,防止我們寫的驅動被人盜用
3.怎麼給驅動傳引數?
傳遞普通的引數, 比如 char int 型別, 使用如下函式:
部分常用引數許可權解釋如下:
其它的可以使用下面的方法來判斷:
可以將數字最後三位轉化為二進位制:xxx xxx xxx,高位往低位依次看,第一位為 1 表示檔案所有者可讀,第二位為 1 表示檔案所有者可寫,第三位為 1 表示檔案所有者可執行;接下來三位表示檔案所有者同組成員的許可權;再下來三位為不同組使用者許可權。
示例
parameter.c
#include<linux/init.h> //包含宏定義的標頭檔案
#include<linux/module.h> //包含初始化載入模組的標頭檔案
static int a;
/* 驅動傳普通引數 */
module_param(a, int, S_IRUSR); //檔案所有者可讀
static int hello_init(void)
{
/* 核心列印函式不能用printf,因為核心沒有辦法使用C語言庫 */
printk("a = %d\n", a);
return 0;
}
static void hello_exit(void)
{
printk("byby\n"); //核心模組解除安裝的時候列印"byb byb
printk("a = %d\n", a);
}
module_init(hello_init); //驅動模組的入口
module_exit(hello_exit); //驅動模組的出口
MODULE_LICENSE("GPL"); //宣告模組擁有開源許可證
Makefile
obj-m +=parameter.o
KDIR:=/home/mzx/imx6ull/linux-imx-rel_imx_4.1.15_2.1.0_ga
PWD?=$(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
在開發板上安裝驅動
我們進入到/sys/module/parameter/目錄下, 檢視變數 a 的讀寫許可權, 如下圖所示:
傳遞陣列使用以下函式:
注意引數nump要傳地址,比如&count
示例
parameter.c
#include<linux/init.h> //包含宏定義的標頭檔案
#include<linux/module.h> //包含初始化載入模組的標頭檔案
static int b[5];
static int count;
/* 驅動傳陣列引數 */
module_param_array(b, int, &count, S_IRUSR); //檔案所有者可讀
static int hello_init(void)
{
int i;
for (i = 0; i < count; i++)
{
printk("b[%d] = %d ", i, b[i]);
}
printk("count = %d\n", count);
return 0;
}
static void hello_exit(void)
{
printk("byby\n"); //核心模組解除安裝的時候列印"byb byb
}
module_init(hello_init); //驅動模組的入口
module_exit(hello_exit); //驅動模組的出口
MODULE_LICENSE("GPL"); //宣告模組擁有開源許可證
Makefile
obj-m +=parameter.o
KDIR:=/home/mzx/imx6ull/linux-imx-rel_imx_4.1.15_2.1.0_ga
PWD?=$(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
注意:陣列最多設5個值