Linux核心程式設計(二) 接受引數的模組

2021-06-22 11:25:52 字數 1618 閱讀 5289

在有些情況下,我們可能會需要給我們要載入的核心模組傳引數,如何實現?我們知道在使用者態下程式設計可以通過main()來傳遞命令列引數,核心模組

用到了module_param函式。

module_param用巨集定義來宣告,定義在param.h

>中。其原型為:

引數:

name  是變數名;

type 是變數型別;

perm:訪問引數的許可權

最後的 module_param 欄位是乙個許可權值,,表示此引數在sysfs檔案系統中所對應的檔案節點的屬性。你應當使用 中定義的值. 這個值控制誰可以訪問這些模組引數在 sysfs 中的表示.當perm為0時,表示此引數不存在 sysfs檔案系統下對應的檔案節點。 否則, 模組被載入後,在/sys/module/ 目錄下將出現以此模組名命名的目錄, 帶有給定的許可權.。

許可權在include/linux/stat.h中有定義

比如:#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

使用 s_irugo 作為引數可以被所有人讀取, 但是不能改變; s_irugo|s_iwusr 允許 root 來改變引數. 注意, 如果乙個引數被 sysfs 修改, 你的模組看到的引數值也改變了, 但是你的模組沒有任何其他的通知. 你應當不要使模組引數可寫, 除非你準備好檢測這個改變並且因而作出反應.

測試**如下:

#include

#include

#include

#include

static int test;

module_param(test, int, 0644);

static int __init hello_init(void)

static void __exit hello_exit(void)

module_license("gpl");

module_description("test");

module_author("mchgloak");

module_init(hello_init);

module_exit(hello_exit);

在超級終端裝載模組hellotest時的命令是:insmod hellotest.ko test=2,即可看到test接收到了引數。

module_param(test, int, 0644);第三個引數是許可權。

Springmvc之接受請求引數二

login.do public string login string username,string password,integer age 這裡的獲取請求引數中的username,age的值 其中username的這個註解預設的是required true,因此這個是不可以沒有的 age的這個...

linux 核心引數

sysctl命令可以檢視和 動態地修改核心的執行引數,可用的核心引數在目錄 proc sys 中。sysctl命令對核心引數的修改僅在當前生效,重啟系統後引數丟失。如果希望引數永久生效可以修改配置檔案 etc sysctl.conf,修改後使用sysctl p生效。例子 net.ipv4.tcp s...

linux核心引數

net.ipv4.ip local port range 當核心版本小於3.2,決定的是客戶端的乙個 ip 可用的埠數量,即乙個 ip 最多只能建立 60k 多一點的連線 1025 65535 如果要突破這個限制需要客戶端 機器繫結多個 ip。當核心版本大於等於3.2,決定的是 socket 四元組...