2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩14頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、實(shí)例解析實(shí)例解析linux內(nèi)核內(nèi)核I2C體系結(jié)構(gòu)體系結(jié)構(gòu)一、概述談到在linux系統(tǒng)下編寫I2C驅(qū)動(dòng),目前主要有兩種方式,一種是把I2C設(shè)備當(dāng)作一個(gè)普通的字符設(shè)備來(lái)處理,另一種是利用linuxI2C驅(qū)動(dòng)體系結(jié)構(gòu)來(lái)完成。下面比較下這兩種驅(qū)動(dòng)。第一種方法的好處(對(duì)應(yīng)第二種方法的劣勢(shì))有:●思路比較直接,不需要花時(shí)間去了解linux內(nèi)核中復(fù)雜的I2C子系統(tǒng)的操作方法。第一種方法問(wèn)題(對(duì)應(yīng)第二種方法的好處)有:●要求工程師不僅要對(duì)I2C設(shè)備的操

2、作熟悉,而且要熟悉I2C的適配器操作;●要求工程師對(duì)I2C的設(shè)備器及I2C的設(shè)備操作方法都比較熟悉,最重要的是寫出的程序可移植性差;●對(duì)內(nèi)核的資源無(wú)法直接使用。因?yàn)閮?nèi)核提供的所有I2C設(shè)備器及設(shè)備驅(qū)動(dòng)都是基于I2C子系統(tǒng)的格式。I2C適配器的操作簡(jiǎn)單還好,如果遇到復(fù)雜的I2C適配器(如:基于PCI的I2C適配器),工作量就會(huì)大很多。本文針對(duì)的對(duì)象是熟悉I2C協(xié)議,并且想使用linux內(nèi)核子系統(tǒng)的開發(fā)人員。網(wǎng)絡(luò)和一些書籍上有介紹I2C子系

3、統(tǒng)的源碼結(jié)構(gòu)。但發(fā)現(xiàn)很多開發(fā)人員看了這些文章后,還是不清楚自己究竟該做些什么。究其原因還是沒(méi)弄清楚I2C子系統(tǒng)為我們做了些什么,以及我們?cè)鯓永肐2C子系統(tǒng)。本文首先要解決是如何利用現(xiàn)有內(nèi)核支持的I2C適配器,完成對(duì)I2C設(shè)備的操作,然后再過(guò)度到適配器代碼的編寫。本文主要從解決問(wèn)題的角度去寫,不會(huì)涉及特別詳細(xì)的代碼跟蹤。二、I2C設(shè)備驅(qū)動(dòng)程序編寫首先要明確適配器驅(qū)動(dòng)的作用是讓我們能夠通過(guò)它發(fā)出符合I2C標(biāo)準(zhǔn)協(xié)議的時(shí)序。在Linux內(nèi)核源

4、代碼中的driversi2cbusses目錄下包含著一些適配器的驅(qū)動(dòng)。如S3C2410的驅(qū)動(dòng)i2cs3c2410.c。當(dāng)適配器加載到內(nèi)核后,接下來(lái)的工作就要針對(duì)具體的設(shè)備編寫設(shè)備驅(qū)動(dòng)了。編寫I2C設(shè)備驅(qū)動(dòng)也有兩種方法。一種是利用系統(tǒng)給我們提供的i2cdev.c來(lái)實(shí)現(xiàn)一個(gè)i2c適配器的設(shè)備文件。然后通過(guò)在應(yīng)用層操作i2c適配器來(lái)控制i2c設(shè)備。另一種是為i2c設(shè)備,獨(dú)立編寫一個(gè)設(shè)備驅(qū)動(dòng)。注意:在后一種情況下,是不需要使用i2cdev.c的

5、。1、利用i2cdev.c操作適配器,進(jìn)而控制i2c設(shè)備i2cdev.c并沒(méi)有針對(duì)特定的設(shè)備而設(shè)計(jì),只是提供了通用的read()、write()和ioctl()等接口,應(yīng)用層可以借用這些接口訪問(wèn)掛接在適配器上的i2c設(shè)備的存儲(chǔ)空間或寄存器,并控制I2Cstructi2c_msg__u16addrslaveaddress__u16flags標(biāo)志(讀、寫)__u16lenmsglength__u8bufpointertomsgdata針對(duì)s

6、mbus算法,需要熟悉structi2c_smbus_ioctl_data。使用的命令是I2C_SMBUS。對(duì)于smbus算法,不需要考慮“多開始信號(hào)時(shí)序”問(wèn)題。structi2c_smbus_ioctl_data__u8read_write讀、寫__u8comm命令__u32size數(shù)據(jù)長(zhǎng)度標(biāo)識(shí)unioni2c_smbus_data__userdata數(shù)據(jù)下面以一個(gè)實(shí)例講解操作的具體過(guò)程。通過(guò)S3C2410操作AT24C02e2pro

7、m。實(shí)現(xiàn)在AT24C02中任意位置的讀、寫功能。首先在內(nèi)核中已經(jīng)包含了對(duì)s3c2410中的i2c控制器驅(qū)動(dòng)的支持。提供了i2c算法(非smbus類型的,所以后面的ioctl的命令是I2C_RDWR)staticconststructi2c_algithms3c24xx_i2c_algithm=.master_xfer=s3c24xx_i2c_xfer.functionality=s3c24xx_i2c_func另外一方面需要確定為了實(shí)現(xiàn)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論