spi通用介面層用spi_device結構來表示乙個spi裝置,它的各個欄位的意義如下:
struct device dev
代表該spi裝置的device結構
struct spi_master *master
指向該spi裝置所使用的控制器
u32 max_speed_hz
該裝置的最大工作時鐘頻率
u8 chip_select
在控制器中的片選引腳編號索引
u16 mode
裝置的工作模式,包括時鐘格式,片選訊號的有效電平等等
u8 bits_per_word
裝置每個單位資料所需要的位元數
int irq
裝置使用的irq編號
char modalias[spi_name_size]
該裝置的名字,用於spi匯流排和驅動進行配對
int cs_gpio
片選訊號的gpio編號,通常不用我們自己設定,介面層會根據上面的chip_select欄位在spi_master結構中進行查詢並賦值
要完成向系統增加並註冊乙個spi裝置,我們還需要另乙個資料結構:
/* include/linux/spi/spi.h */
struct spi board_info ;
spi_board_info
物件用於描述
spi裝置資訊,其大部分欄位和spi_device結構相對應,bus_num欄位則用來指定所屬的控制器編號,通過spi_board_info結構,我們可以有兩種方式向系統增加spi裝置。第一種方式是在spi控制器驅動已經被載入後,我們使用通用介面層提供的如下api來完成:
struct spi_device *spi_new_device(struct spi_master *master, struct spi_board_info *chip);
第二種方式是在板子的初始化**中,定義乙個spi_board_info陣列,然後通過以下api註冊spi_board_info:
int spi_register_board_info(struct spi_board_info const *info, unsigned n);
上面這個api會把每個spi_board_info掛在全域性鍊錶變數board_list上,並且遍歷已經在系統中註冊了的控制器,匹配上相應的控制器並取得它們的spi_master結構指標,最終也會通過spi_new_device函式新增spi裝置。因為spi_register_board_info可以在板子的初始化**中呼叫,可能這時控制器驅動尚未載入,此刻無法取得相應的spi_master指標,不過不要擔心,控制器驅動被載入時,一定會呼叫spi_register_master函式來註冊spi_master結構,而spi_register_master函式會反過來遍歷全域性鍊錶board_list上的spi_board_info,然後通過spi_new_device函式新增spi裝置。
OSGI動態註冊和建立服務
1 需要引入 org.osgi org.osgi 3.0.0 2 建立乙個工廠類實現介面managedservicefactory public class wservicefactory implements managedservicefactory public void setcontext...
Vue元件的建立與註冊
元件優勢 元件化和模組化的不同 vue.js的元件的使用有3個步驟 使用 vue.extend 配合 vue.component 方法 my com1 使用元件,直接呼叫元件名即可 div 使用 vue.extend 來建立元件構造器 var com1 vue.extend vue.componen...
C 軟體註冊和註冊
原理就是軟體與序號產生器使用同一種演算法,將資料進行匹配。註冊後將資料寫入至登錄檔中。一種簡單的序號產生器的方式。1 軟體的實現 using system using system.collections.generic using system.linq using system.manageme...