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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論