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

下載本文檔

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

文檔簡介

1、實例解析實例解析linux內(nèi)核內(nèi)核I2C體系結(jié)構(gòu)體系結(jié)構(gòu)一、概述談到在linux系統(tǒng)下編寫I2C驅(qū)動,目前主要有兩種方式,一種是把I2C設(shè)備當作一個普通的字符設(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è)備的操作,然后再過度到適配器代碼的編寫。本文主要從解決問題的角度去寫,不會涉及特別詳細的代碼跟蹤。二、I2C設(shè)備驅(qū)動程序編寫首先要明確適配器驅(qū)動的作用是讓我們能夠通過它發(fā)出符合I2C標準協(xié)議的時序。在Linux內(nèi)核源

4、代碼中的driversi2cbusses目錄下包含著一些適配器的驅(qū)動。如S3C2410的驅(qū)動i2cs3c2410.c。當適配器加載到內(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操作適配器,進而控制i2c設(shè)備i2cdev.c并沒有針對特定的設(shè)備而設(shè)計,只是提供了通用的read()、write()和ioctl()等接口,應(yīng)用層可以借用這些接口訪問掛接在適配器上的i2c設(shè)備的存儲空間或寄存器,并控制I2Cstructi2c_msg__u16addrslaveaddress__u16flags標志(讀、寫)__u16lenmsglength__u8bufpointertomsgdata針對s

6、mbus算法,需要熟悉structi2c_smbus_ioctl_data。使用的命令是I2C_SMBUS。對于smbus算法,不需要考慮“多開始信號時序”問題。structi2c_smbus_ioctl_data__u8read_write讀、寫__u8comm命令__u32size數(shù)據(jù)長度標識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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論