• 正文
    • hello_param.c示例源碼
    • 編譯
    • 測(cè)試
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

飛凌嵌入式ElfBoard ELF 1板卡-Linux驅(qū)動(dòng)模塊之帶參數(shù)的驅(qū)動(dòng)模塊

03/12 10:30
761
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

例程代碼路徑:ELF 1開發(fā)板資料包3-例程源碼3-2 驅(qū)動(dòng)例程源碼1_helloworldhello_param

Linux驅(qū)動(dòng)模塊可以接受參數(shù),這些參數(shù)可以在加載模塊時(shí)通過(guò)命令行或配置文件進(jìn)行配置。驅(qū)動(dòng)模塊參數(shù)提供了一種動(dòng)態(tài)配置和調(diào)整驅(qū)動(dòng)行為的方式。

在Linux內(nèi)核中,驅(qū)動(dòng)模塊參數(shù)通常使用module_param宏進(jìn)行定義和注冊(cè)。下面是一些常用的驅(qū)動(dòng)模塊參數(shù)相關(guān)的宏和函數(shù):

module_param:用于定義和注冊(cè)一個(gè)驅(qū)動(dòng)模塊參數(shù)。

module_param(name, type, permissions);

name:參數(shù)名稱,通常使用駝峰命名法;

type:參數(shù)的數(shù)據(jù)類型,可以是整型、字符型或布爾型等;

permissions:指定參數(shù)的訪問(wèn)權(quán)限;

MODULE_PARM_DESC:用于定義驅(qū)動(dòng)模塊參數(shù)的描述信息。

MODULE_PARM_DESC(name, description);

name:參數(shù)名稱,與之前使用module_param或module_param_array定義的參數(shù)名稱相同;

description:參數(shù)的描述信息;

通過(guò)使用這些宏和函數(shù),可以定義和注冊(cè)驅(qū)動(dòng)模塊參數(shù)。在加載驅(qū)動(dòng)模塊時(shí),可以通過(guò)命令行或配置文件設(shè)置這些參數(shù)的值;

hello_param.c示例源碼

#include <linux/module.h> ??// 包含模塊相關(guān)函數(shù)的頭文件

#include <linux/kernel.h> ??// 包含內(nèi)核相關(guān)函數(shù)的頭文件

#include <linux/init.h> ????// 包含初始化和清理函數(shù)的頭文件

#include <linux/moduleparam.h> //包含模塊參數(shù)相關(guān)函數(shù)的頭文件

static int my_param = 0;

static char *who = "helloworld";

module_param(my_param, int, S_IRUSR | S_IWUSR);

MODULE_PARM_DESC(my_param, "An integer parameter");

module_param(who, charp, S_IRUSR | S_IWUSR);

MODULE_PARM_DESC(who, "An integer parameter");

static int __init helloworld_init(void)

{

printk(KERN_INFO "Hello, World! my_param is %dn",my_param); // 打印消息到內(nèi)核日志

printk(KERN_INFO "Hello, World! this is %sn",who);

return 0;

}

static void __exit helloworld_exit(void)

{

printk(KERN_INFO "Goodbye, World!n"); // 打印消息到內(nèi)核日志

}

module_init(helloworld_init); // 指定驅(qū)動(dòng)程序的初始化函數(shù)

module_exit(helloworld_exit); // 指定驅(qū)動(dòng)程序的清理函數(shù)

MODULE_LICENSE("GPL"); // 指定模塊的許可證信息

MODULE_AUTHOR("Your Name"); // 指定模塊的作者信息

MODULE_DESCRIPTION("A simple Hello World driver"); // 指定模塊的描述信息

編譯

復(fù)制helloworld驅(qū)動(dòng)中的Makefile文件,將其中的hello.o修改為hello_param.o,效果如下:

設(shè)置環(huán)境變量,編譯:

?. /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

elf@ubuntu:~/work/test/01_helloworld/hello_param$ make

測(cè)試

將生成的hello_param.ko文件拷貝到開發(fā)板中測(cè)試。在開發(fā)板中執(zhí)行insmod加載驅(qū)動(dòng),rmmod卸載驅(qū)動(dòng):

root@ELF1:~#?insmod hello_param.ko

Hello, World! my_param is 0

Hello, World! this is helloworld

root@ELF1:~#?rmmod hello_param.ko

Goodbye, World!

可以看出不輸入?yún)?shù),加載時(shí)打印出的是初始化參數(shù)。下面我們傳入?yún)?shù)看一下效果:

root@ELF1:~#?insmod hello_param.ko my_param=72 who=elfboard

Hello, World! my_param is 72

Hello, World! this is elfboard

root@ELF1:~#?rmmod hello_param.ko

Goodbye, World!

可以看到我們寫的參數(shù)傳到了驅(qū)動(dòng)中,并打印了出來(lái)。

相關(guān)推薦