2.6. 預(yù)備知識(shí)

2018-02-24 15:49 更新

2.6.?預(yù)備知識(shí)

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

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


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

moudle.h 包含了大量加載模塊需要的函數(shù)和符號(hào)的定義. 你需要 init.h 來(lái)指定你的初始化和清理函數(shù), 如我們?cè)谏厦娴?"hello world" 例子里見(jiàn)到的, 這個(gè)我們?cè)谙乱还?jié)中再講. 大部分模塊還包含 moudleparam.h, 使得可以在模塊加載時(shí)傳遞參數(shù)給模塊. 我們將很快遇到.

不是嚴(yán)格要求的, 但是你的模塊確實(shí)應(yīng)當(dāng)指定它的代碼使用哪個(gè)許可. 做到這一點(diǎn)只需包含一行 MODULE_LICENSE:


MODULE_LICENSE("GPL"); 

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

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

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

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)