09_驅動模組傳引數

爱吃冰激凌的黄某某發表於2024-04-22

驅動模組傳引數

1.什麼是驅動傳參

​ 驅動傳參就是傳遞引數給我們的驅動。

舉例:

​ insmod beep.ko a=1

2.驅動傳引數有什麼作用呢?

​ (1)設定驅動的相關引數,比如設定緩衝區的大小

​ (2)設定安全校驗,防止我們寫的驅動被人盜用

3.怎麼給驅動傳引數?

傳遞普通的引數, 比如 char int 型別, 使用如下函式:

image-20240422165117527

部分常用引數許可權解釋如下:

image-20240422165129798

image-20240422165140868

其它的可以使用下面的方法來判斷:
可以將數字最後三位轉化為二進位制: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

在開發板上安裝驅動

image-20240422170058027

我們進入到/sys/module/parameter/目錄下, 檢視變數 a 的讀寫許可權, 如下圖所示:

image-20240422170401345

傳遞陣列使用以下函式:

image-20240422165231561

注意引數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

image-20240422171927082

注意:陣列最多設5個值

相關文章