gm8142在 dev目錄中顯示

2021-06-27 09:50:12 字數 2257 閱讀 4663

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...