gm8142作為混雜裝置新增驅動,由於原本ad7193驅動使用的是gpio模擬的spi介面,所以gm8142直接在這個基礎是移植驅動,也用模擬的spi介面。
步驟如下:
1、定義驅動結構體
static struct spi_driver gm8142_driver = ,
.probe = gm8142_probe,
.remove = gm8142_remove,
};其中,gm8142_probe為探測介面,呼叫時發生在裝置和驅動對應上要為**之好時,此介面需要自己實現,主要完成gpio口的初始化,並且讀取晶元的id來驗證通訊是否正常和其他的一些初始化工作。gm8142_remove介面也要自己實現,完成資源的釋放等工作。
2、定義裝置結構體
static const struct file_operations gm8142_fops =;和
static struct miscdevice gm8142_miscdev =
; static const struct file_operations gm8142_fops結構體包含了這個裝置操作的一系列函式,都要自己實現。這個結構體最終是賦值給static struct miscdevice gm8142_miscdev 這個混雜裝置的結構體的。
3、將以上的結構體啟用,編寫乙個初始化介面
static int __init gm8142_init(void)
ret = misc_register(&gm8142_miscdev);
if (ret)
}該函式依次註冊驅動(使用剛才定義的驅動結構體變數gm8142_driver),然後註冊裝置(使用剛才定義的裝置結構體變數gm8142_miscdev),在這個過程之後,裝置和驅動都聯絡上了,因為他們會自動尋找對方。
4、編寫裝置和驅動刪除函式
static void __exit gm8142_exit(void)
spi_unregister_driver(&gm8142_driver);
}5、最後將3、4兩步的初始化函式初始化、刪除函式匯入到呼叫入口如下:
module_init(gm8142_init);
module_exit(gm8142_exit);
6、呼叫一些巨集新增資訊
module_description(drv_desc);
module_version(drv_version);
module_author("merlin ");
module_license("gpl v2");
巨集的說明:
module_init和module_exit行使用了核心的特殊巨集來表示上述兩個函式所扮演的角色。另外乙個特殊巨集 (module_license)用來表示核心,該模組採用自由許可證;如果沒有這樣的宣告,核心在裝載該模組時會產生抱怨,還有如下一些常用的巨集
特殊巨集說明
module_author(author)
描述模組作者
module_description(description)
說明模組用途的簡短描述
module_version(version_string)
**修訂號
module_device_table(table_info)
告訴使用者空間模組所支援的裝置
module_alias(alternate_name)
模組的別名
7、openwrt1407/target/linux/ar71xx/files/arch/mips/ath79目錄下新增dev-spi-gpio.c、dev-spi-gpio.h和mach-dragino2.c三個檔案,在dev-spi-gpio更改你的模擬spi介面驅動程式用到的那幾個gpio口。
8、編譯驅動模組。如果核心不更新, 可以只制定這個驅動包編譯,如:make package/utils/gm8142/compile v=s,那麼就可只編譯這個包,可能會同時生成ipk檔案和ko檔案,驅動載入要用ko檔案。用到:
insmod ***xx.kormmod ***xx
ko 是核心模組檔案,是核心載入的某個模組,一般是驅動程式,
.so 檔案是動態鏈結庫檔案,相當於 win下的 .dll 檔案
.ipk檔案是和rpm十分類似個包格式,是檔案空間更小
在openwrt下.ko檔案一般在/build_dir下,ipk檔案一般在/bin目錄下,可以搜尋來具體定位。
9、安裝完成之後打卡/dev檢視,gm8142裝置的名稱。
在基於shader的D3D程式中實現2D面板
3d遊戲中,很多東西都需要以2d的形式展現,比如人物的狀態列,物品欄等,那麼如何才能在3d場景中放置它們呢?我在這裡介紹一種通過簡化變換過程而實現的方法.大家知道,乙個模型頂點在顯示到螢幕上,一共要經過4次變換,分別是世界變換,攝象機變換,投影變換以及視口變換.在世界變換中,我們通過乙個仿射矩陣把這...
在A3D中顯示Box
繪製乙個box 參考 配置a3d開發環境 我們講解測試環境的 新建乙個專案demo。開啟main.as,輸入如下 加粗 package 開始的時候我們在package裡面匯入了需要用到的類,然後在main類裡定義了4個變數。1 object3d是所有a3d中物件的基類。它是乙個容器,能存放其他的3d...
在 D 天內送達包裹的能力
傳送帶上的包裹必須在 d 天內從乙個港口運送到另乙個港口。傳送帶上的第 i 個包裹的重量為 weights i 每一天,我們都會按給出重量的順序往傳送帶上裝載包裹。我們裝載的重量不會超過船的最大運載重量。返回能在 d 天內將傳送帶上的所有包裹送達的船的最低運載能力。示例 1 輸入 weights 1...