幻數使用說明

2021-08-04 07:41:45 字數 1217 閱讀 1421

幻數使用說明

在驅動程式中實現的ioctl函式體內,實際上是有乙個switch結構,每乙個case對應乙個命令碼,做出一些相應的操作。怎麼實現這些操作,這是每乙個程式設計師自己的事情。 因為裝置都是特定的,這裡也沒法說。關鍵在於怎樣組織命令碼,因為在ioctl中命令碼是唯一聯絡使用者程式命令和驅動程式支援的途徑 。 命令碼的組織是有一些講究的,因為我們一定要做到命令和裝置是一一對應的,利用幻數這種特殊組織命令的方式,主要就是避免將正確的命令發給錯誤的裝置,或者是把錯誤的命令發給正確的裝置,或 者是把錯誤的命令發給錯誤的裝置。這些錯誤都會導致不可預料的事情發生,而當程式設計師發現了這些奇怪的事情的時候,再來除錯程式查詢錯誤,那將是非常困難的 事情。所以在linux核心中是這樣定義乙個命令碼的: 

____________________________________ | 裝置型別 | 序列號 | 方向 |資料尺寸  | |-----------|--------|------|----------| | 8 bit      |   8 bit  |2 bit |8~14 bit | |-----------|---------|------|----------|

這樣一來, 乙個命令就變成了乙個整數形式的命令碼; 但是命令碼非常的不直觀,所以linux kernel中提供了一些巨集。 這些巨集可根據便於理解的字串生成命令碼,或者是從命令碼得到一些使用者可以理解的字串以標明這個命令對應的裝置型別、裝置序列號、資料傳送方向和資料傳輸尺寸。

例子:

#define hello_magic 'k'

#define hello_cmd1    _io(hello_magic,0x1c) #define hello_cmd2    _io(hello_magic,0x1d) 

其中'k'為幻數,要按照linux核心的約定方法為驅動程式選擇ioctl編號,應該首先看看/usr/include/asm/ioctl.h和documentation/ioctl-number.txt這兩個檔案,下面是ioctl.h的部分內容:

_io(type, nr)

用於構造無引數的命令編號; _ior(type, nr, datatype)

用於構造從驅動程式中讀取資料的命令編號; _iow(type, nr, datatype)        用於寫入資料的命令; _iowr(type, nr, datatype)        用於雙向傳輸。

注意對幻數的編號千萬不能重複定義,如ioctl-number.txt已經說明『k'的編號已經被占用的範圍為:

使用說明 附註工具使用說明

附註工具使用說明 附註工具用途 附註工具主要用於更新利用word附註應用程式生成的帶域 的附註,該工具在word右鍵 更新鏈結 的基礎上進行了優化,故在使用時,不能再利用word右鍵 更新鏈結 而要用本工具的 更新當前鏈結 或 更新所有鏈結 使用說明 一 更換路徑 當利用word附註應用程式生成帶域...

使用說明 農用遮光網使用說明

農用遮光網使用說明 建築防塵網購買方 建築施工企業 在購買建築防塵網時,應該對 作出比較,可以分辨品牌 型號,且購買時應該在一定程度上了解信譽良莠。建築防塵網購買方 市場售賣方 在選購建築防塵網時,可以把 作為基礎,好的 可以用來彌補信譽不足,而差的 則需要按照你的服務收費。農用遮光網使用說明 用途...

Hibernate tools 使用說明

05年的8月份第一次接觸hibernate tools,使用起來感覺還不錯,但也沒有深入研究,後來由於一直在做乙個專案,再後來用了一陣myeclipse,現在換了公司,使用wtp all in one eclipse的乙個版本 生成domain的時候使用了hibernate tools,發現都不知怎...