在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux驅動開發-安裝驅動參數傳遞

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

【摘要】 Linux驅動安裝時也支持傳遞參數,和命令行上運行的命令原理類似。 只不過在編寫驅動的時候,需要在驅動代碼里提前將相關信息聲明好才可以使用。 這篇文章就介紹如果在命令安裝驅動時,傳遞參數給驅動代碼,演示各種類型的參數傳輸情況。

一、簡介

在Linux下進行C語言開發時,經常在命令行傳遞參數給C程序,常見的Linux命令也是需要傳參的,這樣用起來就很靈活,根據不同的參數可以執行不同的效果。

Linux驅動安裝時也支持傳遞參數,和命令行上運行的命令原理類似。

只不過在編寫驅動的時候,需要在驅動代碼里提前將相關信息聲明好才可以使用。

這篇文章就介紹如果在命令安裝驅動時,傳遞參數給驅動代碼,演示各種類型的參數傳輸情況。

在驅動代碼里聲明傳入參數的類型、權限,接收的變量名稱。

module_param(變量的名稱,類型,權限)

二、在驅動代碼里聲明傳遞參數的格式

/*傳遞整型類型數據*/
int int_data = 0;
module_param(int_data, int ,0664);
MODULE_PARM_DESC(int_data, "是一個整型的參數.");

/*傳遞指針類型數據*/
char *p_data = NULL;
module_param(p_data, charp, 0664);
MODULE_PARM_DESC(p_data, "是一個指針類型數據.");

/*
傳遞數組類型數據
module_param_array(數組名, 元素類型, 元素個數(取地址), 權限);
*/
int array_data[3] = {};
int num = 3;
module_param_array(array_data, int, &num, 0664);
MODULE_PARM_DESC(array_data, "是一個數組類型數據.");

/*
傳遞字符串: module_param_string
(傳遞參數時的字符串名稱, 字符串名稱, 字符串大小, 權限);
*/
char str_data[12] = {};
module_param_string(str_data, str_data, sizeof(str_data), 0664);
MODULE_PARM_DESC(str_data, "是一個字符串類型數據.");

三、完整代碼示例

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

/*傳遞整型類型數據*/
int int_data = 0;
module_param(int_data, int ,0664);
MODULE_PARM_DESC(int_data, "是一個整型的參數.");

/*傳遞指針類型數據*/
char *p_data = NULL;
module_param(p_data, charp, 0664);
MODULE_PARM_DESC(p_data, "是一個指針類型數據.");

/*
傳遞數組類型數據
module_param_array(數組名, 元素類型, 元素個數(取地址), 權限);
*/
int array_data[3] = {};
int num = 3;
module_param_array(array_data, int, &num, 0664);
MODULE_PARM_DESC(array_data, "是一個數組類型數據.");

/*
傳遞字符串: module_param_string
(傳遞參數時的字符串名稱, 字符串名稱, 字符串大小, 權限);
*/
char str_data[12] = {};
module_param_string(str_data, str_data, sizeof(str_data), 0664);
MODULE_PARM_DESC(str_data, "是一個字符串類型數據.");

static int __init tiny4412_param_dev_init(void) 
{
	printk("安裝驅動成功.\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("卸載驅動成功.\n");
}

module_init(tiny4412_param_dev_init);
module_exit(tiny4412_param_dev_exit);

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

四、查看驅動提示信息

[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:是一個字符串類型數據.
parm:           array_data:是一個數組類型數據.
parm:           p_data:是一個指針類型數據.
parm:           int_data:是一個整型的參數.

五、安裝驅動時傳遞參數

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

六、驅動安裝成功在sys目錄下查看傳遞的參數

[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]#

七、權限定義

用戶
#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

示例代碼:

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

/*傳遞指針類型數據*/
char *p_data = NULL;
module_param(p_data, charp, S_IRUSR|S_IWUSR|S_IXUSR);
MODULE_PARM_DESC(p_data, "是一個指針類型數據.");
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 驅動
    +關注

    關注

    12

    文章

    1878

    瀏覽量

    86327
  • Linux
    +關注

    關注

    87

    文章

    11419

    瀏覽量

    212276
  • 代碼
    +關注

    關注

    30

    文章

    4878

    瀏覽量

    69971
收藏 人收藏

    評論

    相關推薦

    基于RK3576開發板的USB驅動安裝

    在使用芯片的ADB接口(進行ADB調試或者固件燒錄)前需要安裝指定USB驅動,請按以下指引執行驅動安裝
    的頭像 發表于 04-21 17:15 ?114次閱讀
    基于RK3576<b class='flag-5'>開發</b>板的USB<b class='flag-5'>驅動</b><b class='flag-5'>安裝</b>

    Linux環境再升級:PLIN驅動程序正式發布

    PLIN驅動程序現已正式發布,本文將展示如何安裝PLIN驅動程序,以及如何在Linux環境下進行基本的PLIN通信操作,確保您能夠快速掌握并應用這一新工具。
    的頭像 發表于 04-21 15:29 ?125次閱讀
    <b class='flag-5'>Linux</b>環境再升級:PLIN<b class='flag-5'>驅動</b>程序正式發布

    硬核升級!華清遠見STM32MP157驅動開發課程助力嵌入式Linux底層開發入門進階

    在嵌入式Linux系統開發中,驅動程序開發是一項關鍵技術,它作為硬件與軟件之間的橋梁,實現了操作系統對硬件設備的控制。相較于嵌入式Linux
    的頭像 發表于 04-03 16:40 ?241次閱讀
    硬核升級!華清遠見STM32MP157<b class='flag-5'>驅動</b><b class='flag-5'>開發</b>課程助力嵌入式<b class='flag-5'>Linux</b>底層<b class='flag-5'>開發</b>入門進階

    迅為RK3568開發驅動開發指南helloworld驅動實驗-驅動的基本框架

    Linux 驅動的基本框架主要由模塊加載函數,模塊卸載函數,模塊許可證聲明,模塊參數,塊導出符號,模塊作者信息等幾部分組成,其中模塊參數,模塊導出符號,模塊作者信息是選的部分,也就是可
    發表于 04-02 14:47

    嵌入式學習-飛凌嵌入式ElfBoard ELF 1板卡-Linux驅動模塊之帶參數驅動模塊

    例程代碼路徑:ELF 1開發板資料包\\03-例程源碼\\03-2 驅動例程源碼\\01_helloworld\\hello_param Linux驅動模塊可以接受
    發表于 03-13 09:52

    飛凌嵌入式ElfBoard ELF 1板卡-Linux驅動模塊之帶參數驅動模塊

    例程代碼路徑:ELF 1開發板資料包\\03-例程源碼\\03-2 驅動例程源碼\\01_helloworld\\hello_paramLinux驅動模塊可以接受參數,這些
    發表于 03-12 10:34

    迅為RK3568開發驅動指南Linux中通用SPI設備驅動

    迅為RK3568開發驅動指南Linux中通用SPI設備驅動
    的頭像 發表于 01-23 11:02 ?2337次閱讀
    迅為RK3568<b class='flag-5'>開發</b>板<b class='flag-5'>驅動</b>指南<b class='flag-5'>Linux</b>中通用SPI設備<b class='flag-5'>驅動</b>

    驅動安裝指南

    電子發燒友網站提供《驅動安裝指南.pdf》資料免費下載
    發表于 01-16 16:10 ?0次下載
    <b class='flag-5'>驅動</b><b class='flag-5'>安裝</b>指南

    風扇驅動怎么安裝

    風扇驅動安裝指南 1. 準備工具和材料 風扇 風扇驅動器(控制器) 電源適配器 螺絲刀 電工膠帶 導線 測量工具 2. 安全措施 確保電源已關閉,避免觸電風險。 佩戴安全眼鏡和手套。 3. 檢查風扇
    的頭像 發表于 09-23 15:06 ?1097次閱讀

    北京迅為RK3568開發板嵌入式學習之Linux驅動全新更新-CAN+

    北京迅為RK3568開發板嵌入式學習之Linux驅動全新更新-CAN+
    的頭像 發表于 09-04 15:29 ?831次閱讀
    北京迅為RK3568<b class='flag-5'>開發</b>板嵌入式學習之<b class='flag-5'>Linux</b><b class='flag-5'>驅動</b>全新更新-CAN+

    linux系統的設備驅動一般分幾類

    Linux系統的設備驅動是操作系統與硬件設備之間的橋梁,負責實現操作系統與硬件設備之間的通信和控制。Linux系統的設備驅動可以分為以下幾類: 字符設備
    的頭像 發表于 08-30 15:13 ?774次閱讀

    Linux設備驅動程序分類有哪些

    Linux設備驅動程序是操作系統與硬件設備之間的橋梁,負責實現硬件設備與操作系統之間的通信和控制。Linux設備驅動程序的分類繁多,可以根據不同的標準進行分類。 按硬件類型分類
    的頭像 發表于 08-30 15:11 ?961次閱讀

    linux驅動程序如何加載進內核

    Linux系統中,驅動程序是內核與硬件設備之間的橋梁。它們允許內核與硬件設備進行通信,從而實現對硬件設備的控制和管理。 驅動程序的編寫 驅動程序的編寫是
    的頭像 發表于 08-30 15:02 ?864次閱讀

    linux驅動程序的編譯方法是什么

    的源代碼中,并隨內核一起編譯。這種方法適用于驅動程序已經非常穩定,且不打算頻繁修改的情況。具體步驟如下: 下載并安裝Linux內核源代碼 :從Linux官方網站或可靠的源下載所需的內核
    的頭像 發表于 08-30 14:46 ?999次閱讀

    Linux 驅動開發與應用開發,你知道多少?

    一、Linux驅動開發與應用開發的區別開發層次不同:Linux
    的頭像 發表于 08-30 12:16 ?1267次閱讀
    <b class='flag-5'>Linux</b> <b class='flag-5'>驅動</b><b class='flag-5'>開發</b>與應用<b class='flag-5'>開發</b>,你知道多少?
    主站蜘蛛池模板: 月夜免费观看高清在线完整 | 日韩第十页 | h视频免费网站 | 一级特黄视频 | 天天操天天添 | 性欧美欧美 | 国产aaaaa一级毛片 | 视频一区二区免费 | 伊人久久狼人 | 人人操天天射 | 国产免费高清视频在线观看不卡 | 两性色午夜视频免费老司机 | 色爱区综合激情五月综合激情 | 五月天婷婷基地 | 1300部小u女视频免费 | 日成人网| 男人不识本网站上遍色站也枉然 | 啪啪免费小视频 | 午夜视频在线网站 | 97一本大道波多野吉衣 | 久久国产精品99久久久久久牛牛 | 伊人色综合久久天天爱 | mm131美女肉体艺术图片 | 日本三级免费网站 | 51视频在线观看免费国产 | 五月激情视频 | 色老头·com| 你懂的网址在线 | 欧美视频精品一区二区三区 | 91视频啪啪 | 夜夜想夜夜爽天天爱天天摸 | 69xxxx女人| 最近2018年中文字幕大全一 | 午夜影视免费观看 | 精品国产三级在线观看 | 成年大片免费播放视频人 | 你懂的在线免费 | 伊人最新网址 | 日本超黄视频 | 西西人体44renti大胆亚洲 | 日日噜噜夜夜狠狠tv视频免费 |