2.6. 預備知識

2018-02-24 15:49 更新

2.6.?預備知識

我們正在接近去看一些實際的模塊代碼. 但是首先, 我們需要看一些需要出現(xiàn)在你的模塊源碼文件中的東西. 內(nèi)核是一個獨特的環(huán)境, 它將它的要求強加于要和它接口的代碼上.

大部分內(nèi)核代碼包含了許多數(shù)量的頭文件來獲得函數(shù), 數(shù)據(jù)結(jié)構和變量的定義. 我們將在碰到它們時檢查這些文件, 但是有幾個文件對模塊是特殊的, 必須出現(xiàn)在每一個可加載模塊中. 因此, 幾乎所有模塊代碼都有下面內(nèi)容:


#include <linux/module.h>
#include <linux/init.h>

moudle.h 包含了大量加載模塊需要的函數(shù)和符號的定義. 你需要 init.h 來指定你的初始化和清理函數(shù), 如我們在上面的 "hello world" 例子里見到的, 這個我們在下一節(jié)中再講. 大部分模塊還包含 moudleparam.h, 使得可以在模塊加載時傳遞參數(shù)給模塊. 我們將很快遇到.

不是嚴格要求的, 但是你的模塊確實應當指定它的代碼使用哪個許可. 做到這一點只需包含一行 MODULE_LICENSE:


MODULE_LICENSE("GPL"); 

內(nèi)核認識的特定許可有, "GPL"( 適用 GNU 通用公共許可的任何版本 ), "GPL v2"( 只適用 GPL 版本 2 ), "GPL and additional rights", "Dual BSD/GPL", "Dual MPL/GPL", 和 "Proprietary". 除非你的模塊明確標識是在內(nèi)核認識的一個自由許可下, 否則就假定它是私有的, 內(nèi)核在模塊加載時被"弄污濁"了. 象我們在第 1 章"許可條款"中提到的, 內(nèi)核開發(fā)者不會熱心幫助在加載了私有模塊后遇到問題的用戶.

可以在模塊中包含的其他描述性定義有 MODULE_AUTHOR ( 聲明誰編寫了模塊 ), MODULE_DESCRIPION( 一個人可讀的關于模塊做什么的聲明 ), MODULE_VERSION ( 一個代碼修訂版本號; 看 <linux/module.h> 的注釋以便知道創(chuàng)建版本字串使用的慣例), MODULE_ALIAS ( 模塊為人所知的另一個名子 ), 以及 MODULE_DEVICE_TABLE ( 來告知用戶空間, 模塊支持那些設備 ). 我們會討論 MODULE_ALIAS 在第 11 章以及 MUDULE_DEVICE_TABLE 在第 12 章.

各種 MODULE_ 聲明可以出現(xiàn)在你的源碼文件的任何函數(shù)之外的地方. 但是, 一個內(nèi)核代碼中相對近期的慣例是把這些聲明放在文件末尾.

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號