一区二区偷拍美女撒尿视频 , 一区精品在线 , 高清在线一区二区三区亚洲综合 , 四虎国产精品免费久久麻豆

當前位置首頁 > 計算機 > 嵌入式開發(fā)
搜柄,搜必應(yīng)! 快速導(dǎo)航 | 使用教程  [會員中心]

嵌入式Linux設(shè)備驅(qū)動程序開發(fā)ppt課件

文檔格式:PPT| 58 頁|大小 577.73KB|積分 20|2024-12-01 發(fā)布|文檔ID:253203481
第1頁
下載文檔到電腦,查找使用更方便 還剩頁未讀,繼續(xù)閱讀>>
1 / 58
此文檔下載收益歸作者所有 下載文檔
  • 版權(quán)提示
  • 文本預(yù)覽
  • 常見問題
  • 第一講 嵌入式系統(tǒng)概述,電信學(xué)院 崔寅鳴,Mobile: 13602731383,E-mail: ymcui@,嵌入式Linux設(shè)備驅(qū)動程序開發(fā),電子信息工程學(xué)院 楊昕欣,嵌入式Linux設(shè)備驅(qū)動程序開發(fā)電子信息工程學(xué)院 楊昕欣,本講主要內(nèi)容,交叉編譯環(huán)境,Makefile,簡介,設(shè)備驅(qū)動相關(guān)概念,設(shè)備驅(qū)動程序的開發(fā)流程,I2C,驅(qū)動程序?qū)嵗?,,,本講主要內(nèi)容交叉編譯環(huán)境,交叉編譯環(huán)境,嵌入式系統(tǒng)的開發(fā)需要宿主機(Host pc),因為嵌入式系統(tǒng)一般沒有大容量的存儲設(shè)備由于host pc的處理器與嵌入式微處理器通常不同,為了生成能夠在嵌入式系統(tǒng)中運行的代碼,需要進行交叉編譯交叉編譯:在宿主機上編譯可以在目標系統(tǒng)上運行的二進制文件交叉編譯環(huán)境嵌入式系統(tǒng)的開發(fā)需要宿主機(Host pc),因,交叉編譯環(huán)境,一般包括:,Gcc,編譯器,,for c,c++,Binutil,,一些輔助工具,包括,objdump(,可反編譯二進制文件)、,as(,匯編器)、,ld(,鏈接器)等,Glibc,,提供系統(tǒng)調(diào)用和基本函數(shù)的,c,庫,C header,Gdb,調(diào)試器,交叉編譯環(huán)境一般包括:,交叉編譯環(huán)境的建立,以,root,用戶登陸,linux,系統(tǒng),將,/usr/local,目錄備份,然后清空,將,BSP0.3.6/Toolchain/,中的,armLinuxXToolChain01.tar.gz,glibc2.1.3.tar.gz,inst_glibc2.1.3,ftp,上傳到,/usr/local,執(zhí)行,# tar xvfz armLinuxXToolChain01.tar.gz,# tar xvfz glibc2.1.3.tar.gz,# rm -rf arm-elf-linux/lib,# cp -R arm/gnu/release/arm-linux/lib arm-elf-linux/,交叉編譯環(huán)境的建立以root用戶登陸linux系統(tǒng),嵌入式Linux一般調(diào)試方法,使用,Gdbserver,和,gdb,在目標系統(tǒng)上運行,gdbserver,在主機上運行,gdb,一般通過以太網(wǎng)建立連接,嵌入式Linux一般調(diào)試方法使用Gdbserver和gdb,Makefile簡介,Linux,開發(fā)一般有大量源代碼,為了避免大量重復(fù)的鍵入,gcc,進行編譯,定義了,Makefile,文件,用于自動編譯,#,make,該操作會調(diào)用,Makefile,Makefile,一般定義了:,Gcc,編譯工具,編譯命令,目標文件,依賴關(guān)系,,Makefile簡介Linux開發(fā)一般有大量源代碼,為了避免,Makefile簡介,例,:,test.o: test.c test.h,gcc -c -g test.c,,-g,生成調(diào)試信息,-,c,只編譯不鏈接成為可執(zhí)行文件,-,o,確定輸出文件名稱,-,O,優(yōu)化,-,w,禁止警告信息,-,Wall,打開所有類型警告信息,,Makefile簡介例:,Makefile變量,makefile,變量-,預(yù)定義變量,$* 不包含擴展名的目標文件名,$+ 所有的依賴文件,以空格分開,并以出現(xiàn)的先后為序,可能包含重復(fù)的依賴文件。

    < 第一個依賴文件的名稱,$? 所有的依賴文件,以空格分開,這些依賴文件的修改日期比目標的創(chuàng)建日期晚@ 目標的完整名稱^ 所有的依賴文件,以空格分開,不包含重復(fù)的依賴文件Makefile變量makefile 變量-預(yù)定義變量,簡單Make指令說明,# Make clean ——,清除編譯過程的中間文件,# make dep ——,設(shè)置,Makefile,文件中各個目標所依賴的文件列表,簡單Make指令說明# Make clean ——清除編譯,使用Makefile方法,嵌入式,Linux,中,Makefile,更加復(fù)雜,可在已有,Makefile,文件基礎(chǔ)上更改,使用Makefile方法嵌入式Linux中Makefile更,Linux系統(tǒng)中的設(shè)備文件,Linux,將所有外部設(shè)備看成是一類特殊文件,稱之為“設(shè)備文件”,如果說系統(tǒng)調(diào)用是,Linux,內(nèi)核和應(yīng)用程序之間的接口,那么設(shè)備驅(qū)動程序則可以看成是,Linux,內(nèi)核與外部設(shè)備之間的接口設(shè)備驅(qū)動程序向應(yīng)用程序屏蔽了硬件在實現(xiàn)上的細節(jié),使得應(yīng)用程序可以像操作普通文件一樣來操作外部設(shè)備,,Linux系統(tǒng)中的設(shè)備文件Linux將所有外部設(shè)備看成是一類,設(shè)備驅(qū)動程序是內(nèi)核重要部分,系統(tǒng)調(diào)用接口,文件子系統(tǒng),I/o,設(shè)備,字符、塊設(shè)備,,設(shè)備驅(qū)動程序,進程間通信,進程控制,,進程調(diào)度,,內(nèi)存管理,硬件控制程序,內(nèi)核簡略結(jié)構(gòu):,設(shè)備驅(qū)動程序是內(nèi)核重要部分系統(tǒng)調(diào)用接口文件子系統(tǒng)I/o設(shè)備字,設(shè)備驅(qū)動的大致結(jié)構(gòu),設(shè)備驅(qū)動的大致結(jié)構(gòu),設(shè)備驅(qū)動的作用,設(shè)備驅(qū)動是位于應(yīng)用和物理設(shè)備之間的軟件層,負責完成二者間的,I/O,操作;,在,LINUX,系統(tǒng)里,對用戶程序,設(shè)備驅(qū)動隱藏了設(shè)備的具體細節(jié),為不同設(shè)備提供了一致的接口;,設(shè)備驅(qū)動是嵌入式系統(tǒng)開發(fā)的重要內(nèi)容之一,設(shè)備驅(qū)動的作用設(shè)備驅(qū)動是位于應(yīng)用和物理設(shè)備之間的軟件層,負責,設(shè)備驅(qū)動完成的工作,對設(shè)備初始化和釋放,把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù),讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請求的數(shù)據(jù),檢測和處理設(shè)備出現(xiàn)的錯誤,設(shè)備驅(qū)動完成的工作對設(shè)備初始化和釋放,設(shè)備文件類型,通常有字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備三種,字符設(shè)備,字符設(shè)備是能夠像字節(jié)流一樣被訪問的設(shè)備,例如字符終端、串口、鍵盤、聲卡、,LCD、,觸摸屏、掃描儀、打印機、并口、鼠標、游戲桿等。

    塊設(shè)備,塊設(shè)備是指支持面向塊訪問的設(shè)備,每塊包含2的,N,次冪字節(jié)數(shù)據(jù),例如,IDE,設(shè)備(磁盤)、,floppy disk 、CD-ROM、Ramdisk,等塊設(shè)備接口必須支持掛裝文件系統(tǒng)網(wǎng)絡(luò)設(shè)備——即能夠和其他主機交換數(shù)據(jù)的設(shè)備接口設(shè)備文件類型通常有字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備三種,主設(shè)備號與次設(shè)備號,LINUX,系統(tǒng)中,設(shè)備由一個主設(shè)備號和一個次設(shè)備號來標識;,主設(shè)備號唯一標識了設(shè)備類型,即設(shè)備驅(qū)動程序類型,它是塊設(shè)備表或字符設(shè)備表中設(shè)備表項的索引次設(shè)備號僅由設(shè)備驅(qū)動程序解釋,一般用于識別在若干可能的硬件設(shè)備中,,I/O,請求所涉及到的那個設(shè)備主設(shè)備號與次設(shè)備號LINUX系統(tǒng)中,設(shè)備由一個主設(shè)備號和一個,主設(shè)備號與次設(shè)備號,主設(shè)備號(Major Number)相同的設(shè)備使用相同的驅(qū)動程序,而次設(shè)備號(minor Number)用來區(qū)分該類型不同的設(shè)備實例主設(shè)備號與次設(shè)備號主設(shè)備號(Major Number)相同的,內(nèi)核設(shè)備驅(qū)動模塊,設(shè)備驅(qū)動程序以兩種方式添加到內(nèi)核:,Build in,直接把驅(qū)動程序編譯到內(nèi)核代碼中,Module,以模塊的方式加載驅(qū)動程序,內(nèi)核設(shè)備驅(qū)動模塊設(shè)備驅(qū)動程序以兩種方式添加到內(nèi)核:,Linux設(shè)備節(jié)點的添加,設(shè)備在/,dev,路徑下,可用如下命令添加,dev,節(jié)點,,b,代表塊設(shè)備,,C,表示字符設(shè)備,mknod /dev/hda1 b 127 1,,塊設(shè)備,主設(shè)備號127,次設(shè)備號1,Linux設(shè)備節(jié)點的添加設(shè)備在/dev路徑下,設(shè)備驅(qū)動大致構(gòu)成,Linux,的設(shè)備驅(qū)動程序大致可以分為如下幾個部分:驅(qū)動程序的注冊與注銷、設(shè)備的打開與釋放、設(shè)備的讀寫操作、設(shè)備的控制操作、設(shè)備的中斷和輪詢處理,,設(shè)備驅(qū)動大致構(gòu)成Linux的設(shè)備驅(qū)動程序大致可以分為如下幾個,設(shè)備驅(qū)動構(gòu)成,設(shè)備驅(qū)動構(gòu)成:,驅(qū)動程序的注冊與注銷,register_chrdev( ),或者,register_blkdev( ),unregister_chrdev( ),或,unregister_blkdev( ),設(shè)備的打開與釋放,通過調(diào)用,file_operations,結(jié)構(gòu)中的函數(shù),open( ),file_operations,結(jié)構(gòu)中的函數(shù),release( ),設(shè)備驅(qū)動構(gòu)成設(shè)備驅(qū)動構(gòu)成:,設(shè)備驅(qū)動構(gòu)成,設(shè)備的讀寫操作,Read(),Write(),設(shè)備的控制操作,ioctl( ),設(shè)備的中斷和輪詢處理,對于不支持中斷的硬件設(shè)備,讀寫時需要輪流查詢設(shè)備狀態(tài),以便決定是否繼續(xù)進行數(shù)據(jù)傳輸。

    如果設(shè)備支持中斷,則可以按中斷方式進行操作,,設(shè)備驅(qū)動構(gòu)成設(shè)備的讀寫操作,模塊化的字符設(shè)備驅(qū)動程序框架,int init_module(void),{,,硬件初始化;,注冊設(shè)備;,注冊中斷;,},void cleanup_module(void),{,,釋放中斷資源;,釋放該設(shè)備;,釋放其他的系統(tǒng)資源;,},模塊化的字符設(shè)備驅(qū)動程序框架int init_module(,file_operations,結(jié)構(gòu),struct file_operations driver_fops = {,open: driver_open,,release: driver_release,,read: driver_read,,write: driver_write,,poll: driver_poll,,ioctl: driver_ioctl,,fasync: driver_fasync, };,file_operations結(jié)構(gòu)struct file_o,file_operations,結(jié)構(gòu),open:,用于打開文件設(shè)備,release:,在關(guān)閉文件的調(diào)用,read:,用于從設(shè)備中讀取數(shù)據(jù),write:,向設(shè)備發(fā)送數(shù)據(jù),poll:,查詢設(shè)備是否可讀或可寫,ioctl:,提供執(zhí)行設(shè)備特定命令的方法,fasync:,用于設(shè)備的異步通知操作,,file_operations結(jié)構(gòu)open: 用于打開文件設(shè),設(shè)備的注冊與注銷,,devfs,注冊:,result =,devfs_register_chrdev,(0, MOD_NAME, ,//,申請主設(shè)備號,,if ( result < 0 ) { return -ENODEV; },devfs_handle =,devfs_register,(NULL, MOD_NAME, ,result, 0,,,,該方法的優(yōu)點:無需創(chuàng)建設(shè)備節(jié)點,由系統(tǒng)自動完成。

    設(shè)備的注冊與注銷,devfs注冊:,設(shè)備的注冊與注銷,,devfs,注銷:,devfs_unregister_chrdev,(MAJOR, MOD_NAME);,devfs_unregister,(devfs_handle);,,,設(shè)備的注冊與注銷, devfs注銷:,設(shè)備的注冊與注銷,方法二,注冊:,result =,register_chrdev,(0, MOD_NAME, ,if ( result < 0 ){ return -ENODEV; },mknod,/dev/ MOD_NAME, C, MAJOR,MINOR,注銷:,unregister_chrdev,(Major, MOD_NAME);,rm,/dev/ MOD_NAME,,設(shè)備的注冊與注銷,方法二注冊:,中斷的申請與釋放,申請:,request_irq,(irq , irq_handler, flag, dev_name, dev_id);,dev_id,用于共享中斷信號線釋放:,free_irq,(irq, dev_id);,,,中斷的申請與釋放申請:,用戶空間與內(nèi)核空間的數(shù)據(jù)拷貝,方法一:,copy_to_user(void *to, const void *from,unsigned long count);,copy_from_user(void *to, const void *from,unsigned long count);,方法二:,_ _,copy_to_user(),_ _copy_from_user(),上述2種方法功能類似,區(qū)別在第一種方法會進行用戶地址空間指針的有效性檢查。

    用戶空間與內(nèi)核空間的數(shù)據(jù)拷貝方法一:,設(shè)備驅(qū)動模塊的安裝與卸載,安裝驅(qū)動模塊,insmod driver_name.o,卸載驅(qū)動模塊,rmmod driver_name,瀏覽系統(tǒng)中的模塊,lsmod,,設(shè)備驅(qū)動模塊的安裝與卸載安裝驅(qū)動模塊,驅(qū)動程序?qū)嵗?---I,2,C,I2C,總線,用兩根線串接多個設(shè)備,支持多設(shè)備之間的隨機訪問,提供沖突檢測機制,實現(xiàn)對設(shè)備的管理,1992,年,1.0,版規(guī)定的快速模式的數(shù)據(jù)率達到,400Kbps,1998,年,2.0,版規(guī)定的高速模式數(shù)據(jù)率達到,3.4Mbps,,,驅(qū)動程序?qū)嵗?--I2CI2C 總線,MC9328MX1 的I2C模塊特性,1.,符合,I2C,總線規(guī)范,2.,支持,3v/5v,兼容模式,3.,多重,Master,操作方式,4.,通過軟件編程,可支持,64,種不同的時鐘,5.,通過軟件控制應(yīng)答位的產(chǎn)生與否,6.,基于中斷的驅(qū)動方式,逐字節(jié)傳輸數(shù)據(jù),7.,支持起始位和終止位的產(chǎn)生和探測,8.,能夠產(chǎn)生重復(fù)起始位,9.,支持呼叫地址識別,10.,能夠獲知應(yīng)答位,11.,能夠獲知總線是否為“忙” 狀態(tài),MC9328MX1 的I2C模塊特性1.符合I2C總線規(guī)范,MC9328MX1 的I2C模塊結(jié)構(gòu),MC9328MX1 的I2C模塊結(jié)構(gòu),MC9328MX1 協(xié)議時序,起始信號,當,SCL,為邏輯,1,時,,SDA,由,1,到,0,的轉(zhuǎn)變表示了起始位,表示一次數(shù)據(jù)傳輸?shù)拈_始,并喚醒所有在,I2C,總線上的設(shè)備,數(shù)據(jù)源,/,目的地址,,Master,發(fā)出一個,7,位的地址,即,Slave,設(shè)備的,I2C,總線地址,每個,Slave,有一個唯一地址,這個地址不是,Master,的地址,數(shù)據(jù)傳輸方向位,表明是從,Slave,讀數(shù)據(jù)還是向,Slave,寫數(shù)據(jù),MC9328MX1 協(xié)議時序起始信號,當SCL為邏輯1時,S,MC9328MX1 協(xié)議時序,D.,應(yīng)答位,被選址的,Slave,設(shè)備通過返回一個應(yīng)答位向,Master,告知其已經(jīng)接收到了數(shù)據(jù)。

    通過將,SDA,線在起始位之后第,9,個時鐘周期從邏輯,1,變?yōu)檫壿?0,來實現(xiàn)的此應(yīng)答位不受控制寄存器,I2CR,中,TXAK,或者狀態(tài)寄存器中,I2CSR,中,RXAK,的影響E.,數(shù)據(jù),,I2C,按照數(shù)據(jù)傳輸方向逐字節(jié)的完成數(shù)據(jù)傳輸在,SCL,時鐘周期的中,,SCL=0,時可以改變數(shù)據(jù),而,SCL=1,則必須保持數(shù)據(jù)不變F.,應(yīng)答位,接收方接受到數(shù)據(jù)后將,SDA,線置,0,表示接收到數(shù)據(jù)的應(yīng)答信號在多字節(jié)傳輸中,如果不將,SDA,位置,0,,則表示所有數(shù)據(jù)已經(jīng)傳輸完成G.,終止位,表明一次數(shù)據(jù)傳輸?shù)慕Y(jié)束或,Master,設(shè)備中止通信SCL,為邏輯,1,時,,SDA,從,0,到,1,的一次變化表示了中止位的發(fā)出H.,重復(fù)起始位,,Master,在結(jié)束位周期可以不發(fā)中止信號,而重復(fù)發(fā)起始位信號如果起始位信號產(chǎn)生先于中止位信號的產(chǎn)生,稱為重復(fù)起始位這時,Master,設(shè)備可以不釋放總線,而重新開始一次獨立的數(shù)據(jù)傳輸過程MC9328MX1 協(xié)議時序D.應(yīng)答位,被選址的Slave設(shè),MC9328MX1 I2C 寄存器,MC9328MX1 I2C 寄存器,MC9328MX1 I2C 寄存器,1.I2C,地址寄存器,IADR,,如果,MC9328,是,I2C,總線上的,Slave,設(shè)備,則此寄存器中存放相應(yīng)的地址。

    2.I2C,分頻寄存器,IFDR,,用來控制,I2C,總線的時鐘頻率,支持多達,64,種的頻率,最快數(shù)據(jù)率為,400Kbps,3.I2C,控制寄存器,控制,I2C,的中斷,設(shè)置,Maser/Slave,模式、接收,/,傳輸模式、傳輸應(yīng)答使能等位等,4.I2C,狀態(tài)寄存器,I2CSR,,表明當前,I2C,總線的狀態(tài),如有無中斷產(chǎn)生,是否接收到了應(yīng)答信號,總線是否忙等,5.I2C,數(shù)據(jù),I/O,寄存器,I2DR,,存放需要發(fā)送的數(shù)據(jù)或接收到的數(shù)據(jù)在傳輸模式下,接收方發(fā)回的地址選中應(yīng)答位信號,觸發(fā),I2C,模塊發(fā)送本寄存器中的數(shù)據(jù)在接收模式下,對該寄存器的讀操作可以觸發(fā)下一個數(shù)據(jù)傳輸過程MC9328MX1 I2C 寄存器1.I2C地址寄存器IAD,I2C 模塊初始化,1.設(shè)定頻率,2.如果工作在Slave模式,則將地址寫入IADR寄存器中,3.通過設(shè)置I2CR寄存器中的IEN位,使能I2C模塊4.修改I2CR中的模式位,選擇Master或Slave模式,傳輸或者接收模式,設(shè)置中斷使能位等,I2C 模塊初始化1.設(shè)定頻率,I2C 總線操作流程,1.模塊初始化,2.產(chǎn)生起始位,總線空閑,通過對I2DR寄存器的讀/寫來發(fā)出START信號,3.數(shù)據(jù)傳輸,中斷方式,檢測ICF位來確定當前字節(jié)是否被傳輸完,檢測IIF位檢測是否接收到一個字節(jié),輪詢方式,禁用中斷使能位,輪詢IIF位,查看是否完成傳輸,I2C 總線操作流程1.模塊初始化,I2C 總線操作流程,4.產(chǎn)生停止位,如果Master處于接收狀態(tài),接收來自Slave的數(shù)據(jù),如果Master要結(jié)束本次傳輸,必須保證不在最后一個數(shù)據(jù)字節(jié)傳輸完后的第9個SCL時鐘產(chǎn)生應(yīng)答信號;,在讀取倒數(shù)第2個字節(jié)之前將I2CR寄存器的TXAK位置位來實現(xiàn);,在讀取最后一個字節(jié)之前必須產(chǎn)生一個中止位信號。

    I2C 總線操作流程4.產(chǎn)生停止位,I2C 總線操作流程,5.,產(chǎn)生重復(fù)起始位,如果,Master,要繼續(xù)占用總線,可以發(fā)出一個重復(fù)起始位,開啟一個新的數(shù)據(jù)傳輸,6.Slave,模式,檢測,I2CSR,寄存器的,IAAS,位判斷是否被選中在,Slave,數(shù)據(jù)傳輸周期中,,IAAS=0,在定址周期通過,SRW,可以確定,Slave,是發(fā)送還是接受,并且要相應(yīng)設(shè)置,MTX,位在數(shù)據(jù)傳輸周期中,,IAAS=0,,,SRW,位無效釋放總線的方式:如果是,Slave,發(fā)送模式,則將,Slave,設(shè)置為接收模式,進行一次啞讀操作如果是,Slave,接受模式,則將,Slave,設(shè)置為發(fā)送模式,進行一次啞寫操作I2C 總線操作流程5.產(chǎn)生重復(fù)起始位,I2C 總線操作流程,7.仲裁淘汰,如果一個設(shè)備試圖占用總線而失敗,則該設(shè)備將被設(shè)為Slave模式,而且IAL被置位Slave程序首先要檢測IAL位以判斷,本設(shè)備進入Slave狀態(tài)是否是由于仲裁淘汰引起的I2C 總線操作流程7.仲裁淘汰,嵌入式Linux設(shè)備驅(qū)動程序開發(fā)ppt課件,I2C總線驅(qū)動程序分析,1.I2C總線驅(qū)動程序,實現(xiàn)I2C的時序,2.I2C設(shè)備驅(qū)動程序,調(diào)用I2C總線驅(qū)動提供的接口,實現(xiàn)對設(shè)備的操作;首先實現(xiàn)I2C總線驅(qū)動,對于每一個具體的I2C設(shè)備,需要單獨實現(xiàn)其驅(qū)動。

    I2C總線驅(qū)動程序分析1.I2C總線驅(qū)動程序,I2C總線驅(qū)動程序分析,1.,關(guān)鍵結(jié)構(gòu)體,: i2c_adapter,提供,I2C,總線驅(qū)動接口的模版,對每一個具體的總線設(shè)備,要根據(jù)這個模版定義自己的相應(yīng)結(jié)構(gòu)體及接口,I2C總線驅(qū)動程序分析1.關(guān)鍵結(jié)構(gòu)體: i2c_adapte,I2C總線驅(qū)動程序分析,2.,關(guān)鍵結(jié)構(gòu)體,i2c_algorithm,定義訪問總線的函數(shù)接口,I2C總線驅(qū)動程序分析2.關(guān)鍵結(jié)構(gòu)體 i2c_algorit,I2C總線驅(qū)動程序分析,3.核心函數(shù):i2c_aa_init(void),I2C總線驅(qū)動程序分析3.核心函數(shù):i2c_aa_init(,4.,關(guān)鍵函數(shù):,i2c_aa_xfer,4.關(guān)鍵函數(shù):i2c_aa_xfer,I2C總線驅(qū)動程序分析,5.其他關(guān)鍵函數(shù):,i2c_aa_ioctl:,設(shè)置總線頻率,讀取總線狀態(tài),I2c_aa_cleanup:,釋放中斷,從設(shè)備列表數(shù)組中刪除當前i2c設(shè)備,I2C總線驅(qū)動程序分析5.其他關(guān)鍵函數(shù):,I2C設(shè)備驅(qū)動程序分析,1.關(guān)鍵結(jié)構(gòu)體:i2c_client,,I2C設(shè)備驅(qū)動程序分析1.關(guān)鍵結(jié)構(gòu)體:i2c_client,I2C設(shè)備驅(qū)動程序分析,2.,關(guān)鍵結(jié)構(gòu)體:,i2c_driver,,I2C設(shè)備驅(qū)動程序分析2.關(guān)鍵結(jié)構(gòu)體:i2c_driver,I2C設(shè)備驅(qū)動程序分析,3.,關(guān)鍵函數(shù),: i2c_klcd_init(void),I2C設(shè)備驅(qū)動程序分析3.關(guān)鍵函數(shù): i2c_klcd_i,I2C設(shè)備驅(qū)動程序分析,4.關(guān)鍵函數(shù):i2c_klcd_attach_adapter,I2C設(shè)備驅(qū)動程序分析4.關(guān)鍵函數(shù):i2c_klcd_att,I2C設(shè)備驅(qū)動程序分析,接口函數(shù)映射:,函數(shù)調(diào)用路徑:,I2c_control(&i2c_klcd_client,…),?,i2c_client,?,i2c_adapter,?,i2c_algorithm,?,i2c_ioctl,I2c_transfer(&i2c_klcd_client.adapter,&msg,1),?,i2c_adapter,?,i2c_algorithm,?,i2c_xfer,I2C設(shè)備驅(qū)動程序分析接口函數(shù)映射:,I2C設(shè)備驅(qū)動程序分析,本例驅(qū)動程序沒有提供通用的文件操作接口,不是一般意義上的驅(qū)動;,但體現(xiàn)了驅(qū)動程序中最重要的兩個概念:設(shè)備信息結(jié)構(gòu)體,底層訪問接口結(jié)構(gòu)體,本例的驅(qū)動同時也體現(xiàn)了一種常見的驅(qū)動開發(fā)模式:總線驅(qū)動與具體掛載設(shè)備的驅(qū)動分別單獨實現(xiàn);類似的驅(qū)動包括串口驅(qū)動與串口設(shè)備驅(qū)動等。

    I2C設(shè)備驅(qū)動程序分析本例驅(qū)動程序沒有提供通用的文件操作接口,。

    點擊閱讀更多內(nèi)容
    賣家[上傳人]:212751380547735770658
    資質(zhì):實名認證