iTOP 4412 驅動模組傳引數

2021-08-21 16:08:51 字數 4616 閱讀 6921

1、核心模組可以通過module_param來傳單個引數

module_param(name,type,perm)

name:模組引數的名稱

type: 模組引數的資料型別(支援int long short uint ulong ushort類 型)

perm: 模組引數的訪問許可權(s_irusr引數表示所有檔案所有者 可讀)

標頭檔案在「include/linux/moduleparam.h」

#define module_param(name, type, perm)				\

module_param_named(name, name, type, perm)

#define module_param_named(name, value, type, perm)			   \

param_check_##type(name, &(value)); \

module_param_cb(name, ¶m_ops_##type, &value, perm); \

__module_parm_type(name, #type)

2、傳遞多個引數module_param_array(name, type, nump, perm)

– name:模組引數的名稱

– type: 模組引數的資料型別(支援int long short uint ulong ushort型別)

– nump:儲存引數個數的位址

– perm: 模組引數的訪問許可權(s_irusr引數表示所有檔案所有者可讀)

標頭檔案在「include/linux/moduleparam.h」

#define module_param_array(name, type, nump, perm)		\

module_param_array_named(name, name, type, nump, perm)

#define module_param_array_named(name, array, type, nump, perm)		\

static const struct kparam_array __param_arr_##name \

= ; \

__module_param_call(module_param_prefix, name, \

¶m_array_ops, \

.arr = &__param_arr_##name, \

__same_type(array[0], bool), perm); \

__module_parm_type(name, "array of " #type)

3、引數perm表示此引數在sysfs檔案系統中所對應的檔案節點的屬性,其許可權在include/linux/stat.h中有定義。

變數perm

– #define s_irusr 00400檔案所有者可讀

– #define s_iwusr 00200檔案所有者可寫

– #define s_ixusr 00100檔案所有者可執行

– #define s_irgrp 00040與檔案所有者同組的使用者可讀

– #define s_iwgrp 00020

– #define s_ixgrp 00010

– #define s_iroth 00004與檔案所有者不同組的使用者可讀

– #define s_iwoth 00002

– #define s_ixoth 00001

將數字最後三位轉化為二進位制:*** *** ***,高位往低位依次看,第一位為1表示檔案所有者可讀,第二位為1表示檔案所有者可寫,第三位為1表示檔案所有者可執行;接下來三位表示檔案所有者同組成員的許可權;再下來三位為不同組使用者許可權

4、makefile 

#!/bin/bash

#通知編譯器我們要編譯模組的哪些原始碼

#這裡是編譯itop4412_hello.c這個檔案編譯成中間檔案mini_linux_module.o

obj-m += module_param.o

#原始碼目錄變數,這裡使用者需要根據實際情況選擇路徑

#作者是將linux的原始碼拷貝到目錄/home/topeet/android4.0下並解壓的

kdir := /work/itop-4412/itop4412_kernel_3.0

#當前目錄變數

pwd ?= $(shell pwd)

#make命名預設尋找第乙個目標

#make -c就是指呼叫執行的路徑

#$(kdir)linux原始碼目錄,作者這裡指的是/home/topeet/android4.0/itop4412_kernel_3.0

#$(pwd)當前目錄變數

#modules要執行的操作

all:

make -c $(kdir) m=$(pwd) modules

#make clean執行的操作是刪除字尾為o的檔案

clean:

rm -rf *.mod.c *.o *.order *.ko *.mod.o *.symvers

5、module_param.c

#include /*包含初始化巨集定義的標頭檔案,**中的module_init和module_exit在此檔案中*/

#include /*包含初始化載入模組的標頭檔案,**中的module_license在此標頭檔案中*/

/*定義module_param module_param_array的標頭檔案*/

#include /*定義module_param module_param_array中perm的標頭檔案*/

#include module_license("dual bsd/gpl");

/*宣告是開源的,沒有核心版本限制*/

module_author("itopeet_dz");

/*宣告作者*/

static int module_arg1,module_arg2;

static int int_array[50];

static int int_num;

module_param(module_arg1,int,s_irusr);

module_param(module_arg2,int,s_irusr);

module_param_array(int_array,int,&int_num,s_irusr);

static int hello_init(void)

{ int i;

printk(kern_emerg "module_arg1 is %d!\n",module_arg1);

printk(kern_emerg "module_arg2 is %d!\n",module_arg2);

for(i=0;i6、make

生成 module_param.ko

7、載入模組

insmod module_param.ko module_arg1=10 module_arg2=20 int_array=11,12,13,14,15,16,17,18

[root@itop-4412]# insmod ./module_param.ko module_arg1=10 module_arg2=20 int_arr

ay=11,12,13,14,15,16,17,18

[ 329.435690] module_arg1 is 10!

[ 329.437299] module_arg2 is 20!

[ 329.440456] int_array[0] is 11!

[ 329.443483] int_array[1] is 12!

[ 329.454731] int_array[2] is 13!

[ 329.456548] int_array[3] is 14!

[ 329.459556] int_array[4] is 15!

[ 329.462774] int_array[5] is 16!

[ 329.465858] int_array[6] is 17!

[ 329.468929] int_array[7] is 18!

[ 329.472283] hello world enter!

8、cat /sys/module/module_param/parameters/*** 可以查詢引數

[root@itop-4412]# ls /sys/module/module_param/parameters/

int_array module_arg1 module_arg2

[root@itop-4412]#

[root@itop-4412]# cat /sys/module/module_param/parameters/module_arg1

10[root@itop-4412]#

[root@itop-4412]# cat int_array

11,12,13,14,15,16,17,18

itop4412學習記錄

01 核心開發基礎 02 drivermodule 03 menuconfig kconfig 04 makefile編譯 05 匯流排 裝置 驅動註冊流程 06 裝置註冊 07 驅動註冊 08 生成裝置節點 09 編寫簡單的應用程式呼叫驅動 13 gpio初始化 14 led驅動 gpio 15 ...

iTop4412 裸機開發 LED

平台 itop4412 scp 2g 開發板有兩個可控制的led燈 分別接到引腳 kp col0和vdd50 en kp col0就是gpl2 0 vdd50 en就是gpk1 1 配置gpx con對應位為輸出功能,設定gpx dat相應管腳輸出為1,就可以點亮led燈了。實現 如下 原始碼1 s...

iTOP 4412開發板LCD的螢幕驅動

開發板 lcd 的螢幕驅動,itop 4412 開發板支援 4.3 寸,7 寸,9.7 寸的 lcd 顯示屏。其中 4.3 寸屏是用的 cpu 直接出來的 rgb 訊號,7 寸屏和 9.7 寸屏是用的 lvds 訊號,硬體 上 使 用 了 一 個 rgb 轉 lvds 的 芯 片 實 現 的 我 們...