基于Linux系統的多種串行總線(xiàn)統一接口的實(shí)現
2.1 注冊一個(gè)新設備號
首先可為統一接口的總線(xiàn)定義一個(gè)新的設備號240,而且以后注冊的總線(xiàn)子設備都以此為主設備號。假如現在注冊了一個(gè)1-Wire和一個(gè)I2C總線(xiàn)接口,那么,它們兩者的主設備號都為240,而次設備號不同。如果1-Wire的次設備號為0,而I2C的次設備號為1,那么就可將兩條總線(xiàn)區分開(kāi)來(lái)了。此時(shí)的程序如程序片段一所示。
程序片段一:

2.2 設備接口層
為了實(shí)現統一的接口,有必要定義一個(gè)統一的字符設備接口buses_ops,應用程序訪(fǎng)問(wèn)總線(xiàn)都通過(guò)這個(gè)接口,這樣,所討論的統一接口問(wèn)題也就實(shí)現了。該接口的主要函數成員如程序片段二所示。
程序片段二:


應用程序打開(kāi)設備的時(shí)候,利用子設備號可以找到總線(xiàn)對應的底層適配器,也就是說(shuō),子設備號兼具了適配器索引的功能,其具體實(shí)現如程序片段三所示。
程序片段三:

事實(shí)上,buses_dev是設備層和適配器層的橋梁,在open操作里被賦值給文件指針的私有數據域。那么,在讀與寫(xiě)函數中,就可以反其道而行,通過(guò)文件指針的私有數據域就可獲得buses_dev數據結構體。
2.3 適配器接口層
適配器負責對底層數據的操作,由于不同的總線(xiàn)之間存在共性,所以,一般來(lái)說(shuō),它們都包含了單字節讀、單字節寫(xiě)、多字節讀、多字節寫(xiě)以及一些特殊控制。綜上所述,該數據結構如程序片段四所示。
程序片段四:

評論