RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux驅(qū)動(dòng)開(kāi)發(fā)-安裝驅(qū)動(dòng)參數(shù)傳遞

DS小龍哥-嵌入式技術(shù) ? 2022-09-17 15:30 ? 次閱讀

【摘要】 Linux驅(qū)動(dòng)安裝時(shí)也支持傳遞參數(shù),和命令行上運(yùn)行的命令原理類(lèi)似。 只不過(guò)在編寫(xiě)驅(qū)動(dòng)的時(shí)候,需要在驅(qū)動(dòng)代碼里提前將相關(guān)信息聲明好才可以使用。 這篇文章就介紹如果在命令安裝驅(qū)動(dòng)時(shí),傳遞參數(shù)給驅(qū)動(dòng)代碼,演示各種類(lèi)型的參數(shù)傳輸情況。

一、簡(jiǎn)介

在Linux下進(jìn)行C語(yǔ)言開(kāi)發(fā)時(shí),經(jīng)常在命令行傳遞參數(shù)給C程序,常見(jiàn)的Linux命令也是需要傳參的,這樣用起來(lái)就很靈活,根據(jù)不同的參數(shù)可以執(zhí)行不同的效果。

Linux驅(qū)動(dòng)安裝時(shí)也支持傳遞參數(shù),和命令行上運(yùn)行的命令原理類(lèi)似。

只不過(guò)在編寫(xiě)驅(qū)動(dòng)的時(shí)候,需要在驅(qū)動(dòng)代碼里提前將相關(guān)信息聲明好才可以使用。

這篇文章就介紹如果在命令安裝驅(qū)動(dòng)時(shí),傳遞參數(shù)給驅(qū)動(dòng)代碼,演示各種類(lèi)型的參數(shù)傳輸情況。

在驅(qū)動(dòng)代碼里聲明傳入?yún)?shù)的類(lèi)型、權(quán)限,接收的變量名稱(chēng)。

module_param(變量的名稱(chēng),類(lèi)型,權(quán)限)

二、在驅(qū)動(dòng)代碼里聲明傳遞參數(shù)的格式

/*傳遞整型類(lèi)型數(shù)據(jù)*/
int int_data = 0;
module_param(int_data, int ,0664);
MODULE_PARM_DESC(int_data, "是一個(gè)整型的參數(shù).");

/*傳遞指針類(lèi)型數(shù)據(jù)*/
char *p_data = NULL;
module_param(p_data, charp, 0664);
MODULE_PARM_DESC(p_data, "是一個(gè)指針類(lèi)型數(shù)據(jù).");

/*
傳遞數(shù)組類(lèi)型數(shù)據(jù)
module_param_array(數(shù)組名, 元素類(lèi)型, 元素個(gè)數(shù)(取地址), 權(quán)限);
*/
int array_data[3] = {};
int num = 3;
module_param_array(array_data, int, &num, 0664);
MODULE_PARM_DESC(array_data, "是一個(gè)數(shù)組類(lèi)型數(shù)據(jù).");

/*
傳遞字符串: module_param_string
(傳遞參數(shù)時(shí)的字符串名稱(chēng), 字符串名稱(chēng), 字符串大小, 權(quán)限);
*/
char str_data[12] = {};
module_param_string(str_data, str_data, sizeof(str_data), 0664);
MODULE_PARM_DESC(str_data, "是一個(gè)字符串類(lèi)型數(shù)據(jù).");

三、完整代碼示例

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

/*傳遞整型類(lèi)型數(shù)據(jù)*/
int int_data = 0;
module_param(int_data, int ,0664);
MODULE_PARM_DESC(int_data, "是一個(gè)整型的參數(shù).");

/*傳遞指針類(lèi)型數(shù)據(jù)*/
char *p_data = NULL;
module_param(p_data, charp, 0664);
MODULE_PARM_DESC(p_data, "是一個(gè)指針類(lèi)型數(shù)據(jù).");

/*
傳遞數(shù)組類(lèi)型數(shù)據(jù)
module_param_array(數(shù)組名, 元素類(lèi)型, 元素個(gè)數(shù)(取地址), 權(quán)限);
*/
int array_data[3] = {};
int num = 3;
module_param_array(array_data, int, &num, 0664);
MODULE_PARM_DESC(array_data, "是一個(gè)數(shù)組類(lèi)型數(shù)據(jù).");

/*
傳遞字符串: module_param_string
(傳遞參數(shù)時(shí)的字符串名稱(chēng), 字符串名稱(chēng), 字符串大小, 權(quán)限);
*/
char str_data[12] = {};
module_param_string(str_data, str_data, sizeof(str_data), 0664);
MODULE_PARM_DESC(str_data, "是一個(gè)字符串類(lèi)型數(shù)據(jù).");

static int __init tiny4412_param_dev_init(void) 
{
	printk("安裝驅(qū)動(dòng)成功.\n");
	printk("int_data=%d\n",int_data);
	printk("p_data=%s\n",p_data);
	printk("array_data=%d\n",array_data[0]);
	printk("str_data=%s\n",str_data);
	return 0;
}

static void __exit tiny4412_param_dev_exit(void) 
{
	printk("卸載驅(qū)動(dòng)成功.\n");
}

module_init(tiny4412_param_dev_init);
module_exit(tiny4412_param_dev_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("wbyq");

四、查看驅(qū)動(dòng)提示信息

[root@wbyq code]#modinfo led_drv.ko 
filename:       led_drv.ko
license:        GPL
author:         wbyq
depends:        
vermagic:       3.5.0-FriendlyARM SMP preempt mod_unload ARMv7 p2v8 
parm:           str_data:是一個(gè)字符串類(lèi)型數(shù)據(jù).
parm:           array_data:是一個(gè)數(shù)組類(lèi)型數(shù)據(jù).
parm:           p_data:是一個(gè)指針類(lèi)型數(shù)據(jù).
parm:           int_data:是一個(gè)整型的參數(shù).

五、安裝驅(qū)動(dòng)時(shí)傳遞參數(shù)

[root@wbyq code]#insmod led_drv.ko str_data="123" int_data=666 p_data="789" array_data=6,7,8
[ 2692.220000] 安裝驅(qū)動(dòng)成功.
[ 2692.220000] int_data=666
[ 2692.220000] p_data=789
[ 2692.220000] array_data=6
[ 2692.220000] str_data=123

六、驅(qū)動(dòng)安裝成功在sys目錄下查看傳遞的參數(shù)

[root@wbyq code]#cd /sys/module/led_drv/parameters/
[root@wbyq parameters]#ls
array_data  int_data    p_data      str_data
[root@wbyq parameters]#cat array_data 
6,7,8
[root@wbyq parameters]#cat int_data 
666
[root@wbyq parameters]#cat p_data 
789
[root@wbyq parameters]#cat str_data 
123
[root@wbyq parameters]#

七、權(quán)限定義

用戶
#define S_IRWXU 00700 
#define S_IRUSR 00400
#define S_IWUSR 00200
#define S_IXUSR 00100

用戶組
#define S_IRWXG 00070
#define S_IRGRP 00040
#define S_IWGRP 00020
#define S_IXGRP 00010

其他用戶
#define S_IRWXO 00007
#define S_IROTH 00004
#define S_IWOTH 00002
#define S_IXOTH 00001
image-20220124164854786

示例代碼:

/*傳遞整型類(lèi)型數(shù)據(jù)*/
int int_data = 0;
module_param(int_data, int ,S_IRUSR|S_IWUSR|S_IXUSR);
MODULE_PARM_DESC(int_data, "是一個(gè)整型的參數(shù).");

/*傳遞指針類(lèi)型數(shù)據(jù)*/
char *p_data = NULL;
module_param(p_data, charp, S_IRUSR|S_IWUSR|S_IXUSR);
MODULE_PARM_DESC(p_data, "是一個(gè)指針類(lèi)型數(shù)據(jù).");
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 驅(qū)動(dòng)
    +關(guān)注

    關(guān)注

    12

    文章

    1838

    瀏覽量

    85262
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11292

    瀏覽量

    209322
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4779

    瀏覽量

    68521
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    pcie設(shè)備驅(qū)動(dòng)程序安裝步驟

    PCIe(Peripheral Component Interconnect Express)是一種高速串行計(jì)算機(jī)擴(kuò)展總線標(biāo)準(zhǔn),用于計(jì)算機(jī)內(nèi)部硬件組件之間的連接。安裝PCIe設(shè)備驅(qū)動(dòng)程序是確保硬件
    的頭像 發(fā)表于 11-13 10:32 ?633次閱讀

    LSP 2.10 DaVinci Linux驅(qū)動(dòng)程序

    電子發(fā)燒友網(wǎng)站提供《LSP 2.10 DaVinci Linux驅(qū)動(dòng)程序.pdf》資料免費(fèi)下載
    發(fā)表于 10-09 09:30 ?0次下載
    LSP 2.10 DaVinci <b class='flag-5'>Linux</b><b class='flag-5'>驅(qū)動(dòng)</b>程序

    風(fēng)扇驅(qū)動(dòng)怎么安裝

    風(fēng)扇驅(qū)動(dòng)安裝指南 1. 準(zhǔn)備工具和材料 風(fēng)扇 風(fēng)扇驅(qū)動(dòng)器(控制器) 電源適配器 螺絲刀 電工膠帶 導(dǎo)線 測(cè)量工具 2. 安全措施 確保電源已關(guān)閉,避免觸電風(fēng)險(xiǎn)。 佩戴安全眼鏡和手套。 3. 檢查風(fēng)扇
    的頭像 發(fā)表于 09-23 15:06 ?442次閱讀

    桌面運(yùn)維工具之打印機(jī)驅(qū)動(dòng)安裝

    window系統(tǒng)中 人工安裝需要經(jīng)過(guò)三個(gè)步驟,操作繁瑣,效率較低?;诖?,我們想開(kāi)發(fā)一個(gè)自動(dòng)化安裝打印機(jī)驅(qū)動(dòng)的程序,讓用戶可以自行安裝打印機(jī)
    的頭像 發(fā)表于 09-12 15:29 ?1741次閱讀
    桌面運(yùn)維工具之打印機(jī)<b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>安裝</b>

    北京迅為RK3568開(kāi)發(fā)板嵌入式學(xué)習(xí)之Linux驅(qū)動(dòng)全新更新-CAN+

    北京迅為RK3568開(kāi)發(fā)板嵌入式學(xué)習(xí)之Linux驅(qū)動(dòng)全新更新-CAN+
    的頭像 發(fā)表于 09-04 15:29 ?494次閱讀
    北京迅為RK3568<b class='flag-5'>開(kāi)發(fā)</b>板嵌入式學(xué)習(xí)之<b class='flag-5'>Linux</b><b class='flag-5'>驅(qū)動(dòng)</b>全新更新-CAN+

    linux系統(tǒng)的設(shè)備驅(qū)動(dòng)一般分幾類(lèi)

    Linux系統(tǒng)的設(shè)備驅(qū)動(dòng)是操作系統(tǒng)與硬件設(shè)備之間的橋梁,負(fù)責(zé)實(shí)現(xiàn)操作系統(tǒng)與硬件設(shè)備之間的通信和控制。Linux系統(tǒng)的設(shè)備驅(qū)動(dòng)可以分為以下幾類(lèi): 字符設(shè)備
    的頭像 發(fā)表于 08-30 15:13 ?409次閱讀

    Linux設(shè)備驅(qū)動(dòng)程序分類(lèi)有哪些

    Linux設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)與硬件設(shè)備之間的橋梁,負(fù)責(zé)實(shí)現(xiàn)硬件設(shè)備與操作系統(tǒng)之間的通信和控制。Linux設(shè)備驅(qū)動(dòng)程序的分類(lèi)繁多,可以根據(jù)不同的標(biāo)準(zhǔn)進(jìn)行分類(lèi)。 按硬件類(lèi)型分類(lèi)
    的頭像 發(fā)表于 08-30 15:11 ?528次閱讀

    linux驅(qū)動(dòng)程序如何加載進(jìn)內(nèi)核

    Linux系統(tǒng)中,驅(qū)動(dòng)程序是內(nèi)核與硬件設(shè)備之間的橋梁。它們?cè)试S內(nèi)核與硬件設(shè)備進(jìn)行通信,從而實(shí)現(xiàn)對(duì)硬件設(shè)備的控制和管理。 驅(qū)動(dòng)程序的編寫(xiě) 驅(qū)動(dòng)程序的編寫(xiě)是
    的頭像 發(fā)表于 08-30 15:02 ?439次閱讀

    linux驅(qū)動(dòng)程序主要有哪些功能

    Linux驅(qū)動(dòng)程序是操作系統(tǒng)與硬件設(shè)備之間進(jìn)行通信的橋梁,負(fù)責(zé)實(shí)現(xiàn)硬件設(shè)備與操作系統(tǒng)之間的數(shù)據(jù)交換和控制。Linux驅(qū)動(dòng)程序的主要功能包括以下幾個(gè)方面: 設(shè)備識(shí)別與初始化
    的頭像 發(fā)表于 08-30 14:47 ?346次閱讀

    linux驅(qū)動(dòng)程序的編譯方法是什么

    的源代碼中,并隨內(nèi)核一起編譯。這種方法適用于驅(qū)動(dòng)程序已經(jīng)非常穩(wěn)定,且不打算頻繁修改的情況。具體步驟如下: 下載并安裝Linux內(nèi)核源代碼 :從Linux官方網(wǎng)站或可靠的源下載所需的內(nèi)核
    的頭像 發(fā)表于 08-30 14:46 ?535次閱讀

    Linux 驅(qū)動(dòng)開(kāi)發(fā)與應(yīng)用開(kāi)發(fā),你知道多少?

    一、Linux驅(qū)動(dòng)開(kāi)發(fā)與應(yīng)用開(kāi)發(fā)的區(qū)別開(kāi)發(fā)層次不同:Linux
    的頭像 發(fā)表于 08-30 12:16 ?746次閱讀
    <b class='flag-5'>Linux</b> <b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開(kāi)發(fā)</b>與應(yīng)用<b class='flag-5'>開(kāi)發(fā)</b>,你知道多少?

    ArmSoM系列板卡 嵌入式Linux驅(qū)動(dòng)開(kāi)發(fā)實(shí)戰(zhàn)指南 之 字符設(shè)備驅(qū)動(dòng)

    字符設(shè)備驅(qū)動(dòng) 本章,我們將學(xué)習(xí)字符設(shè)備使用、字符設(shè)備驅(qū)動(dòng)相關(guān)的概念,理解字符設(shè)備驅(qū)動(dòng)程序的基本框架,并從源碼上分析字符設(shè)備驅(qū)動(dòng)實(shí)現(xiàn)和管理等。 主要分為下面五部分:
    的頭像 發(fā)表于 04-10 09:53 ?1049次閱讀
    ArmSoM系列板卡 嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>驅(qū)動(dòng)</b><b class='flag-5'>開(kāi)發(fā)</b>實(shí)戰(zhàn)指南 之 字符設(shè)備<b class='flag-5'>驅(qū)動(dòng)</b>

    總線上的音頻設(shè)備驅(qū)動(dòng)怎么安裝

    安裝總線上的音頻設(shè)備驅(qū)動(dòng)是確保計(jì)算機(jī)聲音正常工作的關(guān)鍵步驟。本文將從安裝的必要性和步驟、常見(jiàn)問(wèn)題和解決方法以及一些技巧方面詳細(xì)介紹總線上音頻設(shè)備驅(qū)動(dòng)
    的頭像 發(fā)表于 01-24 13:44 ?967次閱讀

    嵌入式Linux開(kāi)發(fā)的三種方式

    嵌入式Linux開(kāi)發(fā)主要有三種方式:裸機(jī)開(kāi)發(fā)、SDK開(kāi)發(fā)驅(qū)動(dòng)開(kāi)發(fā)。
    的頭像 發(fā)表于 01-22 14:22 ?960次閱讀

    伺服驅(qū)動(dòng)器怎么設(shè)置參數(shù)

    伺服驅(qū)動(dòng)器是現(xiàn)代工業(yè)自動(dòng)化系統(tǒng)中常用的一種執(zhí)行控制的設(shè)備,它能夠通過(guò)電信號(hào)控制電機(jī)的速度和位置。設(shè)置伺服驅(qū)動(dòng)器的參數(shù)是使用伺服驅(qū)動(dòng)器前必須要進(jìn)行的一項(xiàng)工作,下面將從硬件
    的頭像 發(fā)表于 01-11 10:51 ?4802次閱讀
    RM新时代网站-首页