Linux核心模組程式設計--啟動引數(轉)
啟動引數
在前面的很多例子中,我們不得不硬性的將一些東西寫如核心模組,例如在 /proc 中的檔名或裝置的主裝置號,因此我們可以對它 ioctl。 這和 Unix及 Linux的編寫使用者可以定製的靈活的程式精神是相矛盾的。
在程式或核心模組能開始工作之前告訴它一些需要的東西的辦法是透過命令列引數。在核心模組的情況下,我們不能得到 argc 和 argv -- 代替的,我們得到更好的東西。我們可以在核心模組中定義全域性變數並且 insmod將為我們填充它們。
在這個核心模組中,我們定義了兩個: str1 和 str2。你所需要做的全部就是編譯那個核心模組然後用insmod str1=xxx str2=yyy執行它。當init_module 被呼叫,str1 將指向字串‘xxx’, str2 將指向‘yyy’。
在 2.0 版中對這些引數6.1沒有型別檢查。如果str1 或 str2 的第一個字元是數字,核心將用整數值填充變數而不是字串指標。如果是在實際的情形下你需要檢查這個。
另一方面,在 2.2 版中你用宏 MACRO_PARM 告訴 insmod 你期待一個引數,它的名字和型別 。這解決了型別的問題並且允許核心模組接收以數字開始的字串。
範例 param.c
/* param.c** 在模組被安裝時接收命令列引數*//* Copyright (C) 1998-99 by Ori Pomerantz *//* 必要標頭檔案 *//* 標準標頭檔案 */#include /* 核心工作 */#include /* 明確指定是模組 *//* 處理 CONFIG_MODVERSIONS */#if CONFIG_MODVERSIONS==1#define MODVERSIONS#include#endif#include /* 我需要 NULL *//* 在 2.2.3 版/usr/include/linux/version.h 包含這個宏* 但 2.0.35版不包括-因此加入以備需要 */#ifndef KERNEL_VERSION#define KERNEL_VERSION(a,b,c) ((a)*65536+(b)*256+(c))#endif/* Emmanuel Papirakis:** 現在(2.2版),在宏裡引數名現在被處理。核心不能像它好象已經作過的那樣解決符號名。** 為了向模組傳送引數,你不得不使用 include/linux/modules.h (第 176 行)裡面定義的一個宏。* 宏需要兩個引數。引數名和它的型別。型別是用雙引號引住的一個字母。例如:* "i" 將為整數, "s" 將為字串。*/char *str1, *str2;#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0)MODULE_PARM(str1, "s");MODULE_PARM(str2, "s");#endif/* 初始化模組--顯示引數 */int init_module(){if (str1 == NULL || str2 == NULL) {printk("Next time, do insmod param str1=");printk("str2= ");} elseprintk("Strings:%s and %s ", str1, str2);#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0)printk("If you try to insmod this module twice,");printk("(without rmmod'ing ");printk("it first), you might get the wrong");printk("error message: ");printk("'symbol for parameters str1 not found'. ");#endifreturn 0;}/* 清除 */void cleanup_module(){}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-940225/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- linux核心啟動引數Linux
- Linux核心模組程式設計--阻塞程式(轉)Linux程式設計
- Linux核心模組程式設計指南(轉)Linux程式設計
- Linux核心模組程式設計指南(一)(轉)Linux程式設計
- Linux核心模組的程式設計方法(轉)Linux程式設計
- Linux核心模組程式設計--替代printk系列(轉)Linux程式設計
- Linux核心模組程式設計--系統呼叫(轉)Linux程式設計
- Linux核心模組程式設計--中斷處理程式(轉)Linux程式設計
- 【轉載】Linux核心除錯之使用模組引數Linux除錯
- Linux核心模組程式設計--替任務排程(轉)Linux程式設計
- Linux核心模組程式設計/proc 檔案系統(轉)Linux程式設計
- Linux核心模組程式設計-將/proc作為輸入(轉)Linux程式設計
- Linux核心程式設計(阻塞程式)(轉)Linux程式設計
- Linux核心模組程式設計之和裝置檔案對話(轉)Linux程式設計
- Linux 修改核心啟動預設引導順序Linux
- Linux核心程式設計(結論)(轉)Linux程式設計
- 核心引數(轉)
- pygame模組引數彙總(python遊戲程式設計)GAMPython遊戲程式設計
- (轉)Linux 核心引數及Oracle相關引數調整LinuxOracle
- linux 核心引數Linux
- Linux核心引數Linux
- chrome啟動引數設定Chrome
- 認識Tomcat核心元件及其啟動引數Tomcat元件
- linux驅動程式設計(轉)Linux程式設計
- 核心引數意義(轉)
- 讀《Linux核心程式設計》Linux程式設計
- Linux核心程式設計實戰經驗談(轉)Linux程式設計
- Linux核心程式設計(字元裝置檔案)(轉)Linux程式設計字元
- Linux核心引數調優Linux
- Linux核心引數以及Oracle引數調整(updated)LinuxOracle
- 利用VC++程式設計實現程式自動啟動 (轉)C++程式設計
- Linux程式設計——用getopt處理命令列引數Linux程式設計命令列
- Linux系統核心模組和驅動的編寫(轉)Linux
- 檢視JVM預設引數及微調JVM啟動引數JVM
- (轉)redhat下安裝oracle,設定redhat核心引數RedhatOracle
- 【linux】驅動-2-核心模組Linux
- linux核心動態載入模組Linux
- Linux 核心啟動流程Linux