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



《嵌入式Linux設(shè)備驅(qū)動程序開發(fā)ppt課件》由會員分享,可在線閱讀,更多相關(guān)《嵌入式Linux設(shè)備驅(qū)動程序開發(fā)ppt課件(58頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、第一講 嵌入式系統(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ā)需要宿主機(jī)(Host pc),因?yàn)榍度胧较到y(tǒng)一般沒有大容量的存儲設(shè)備。,由于host pc的處理器與嵌入式微處理器通常不同,為了生成能夠在嵌入式系統(tǒng)中運(yùn)行的代碼,需要進(jìn)行交叉編譯。,交叉編譯:
2、在宿主機(jī)上編譯可以在目標(biāo)系統(tǒng)上運(yùn)行的二進(jìn)制文件。,交叉編譯環(huán)境嵌入式系統(tǒng)的開發(fā)需要宿主機(jī)(Host pc),因,交叉編譯環(huán)境,一般包括:,Gcc,編譯器,,for c,c++,Binutil,,一些輔助工具,包括,objdump(,可反編譯二進(jìn)制文件)、,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
3、.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,在目標(biāo)系統(tǒng)上運(yùn)行,gdbserver,
4、在主機(jī)上運(yùn)行,gdb,一般通過以太網(wǎng)建立連接,嵌入式Linux一般調(diào)試方法使用Gdbserver和gdb,Makefile簡介,Linux,開發(fā)一般有大量源代碼,為了避免大量重復(fù)的鍵入,gcc,進(jìn)行編譯,定義了,Makefile,文件,用于自動編譯,#,make,該操作會調(diào)用,Makefile,Makefile,一般定義了:,Gcc,編譯工具,編譯命令,目標(biāo)文件,依賴關(guān)系,,Makefile簡介Linux開發(fā)一般有大量源代碼,為了避免,Makefile簡介,例,:,test.o: test.c test.h,gcc -c -g test.c,,-g,生成調(diào)試信息,-,c,只編譯不鏈接成為可執(zhí)行
5、文件,-,o,確定輸出文件名稱,-,O,優(yōu)化,-,w,禁止警告信息,-,Wall,打開所有類型警告信息,,Makefile簡介例:,Makefile變量,makefile,變量-,預(yù)定義變量,$* 不包含擴(kuò)展名的目標(biāo)文件名,$+ 所有的依賴文件,以空格分開,并以出現(xiàn)的先后為序,可能包含重復(fù)的依賴文件。,$< 第一個依賴文件的名稱,$? 所有的依賴文件,以空格分開,這些依賴文件的修改日期比目標(biāo)的創(chuàng)建日期晚。,$@ 目標(biāo)的完整名稱。,$^ 所有的依賴文件,以空格分開,不包含重復(fù)的依賴文件。,,,Makefile變量makefile 變量-預(yù)定義變量,簡單Make指令說明,# Make clea
6、n ——,清除編譯過程的中間文件,# make dep ——,設(shè)置,Makefile,文件中各個目標(biāo)所依賴的文件列表,簡單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ū)動程序向
7、應(yīng)用程序屏蔽了硬件在實(shí)現(xiàn)上的細(xì)節(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ū)動程序,進(jìn)程間通信,進(jìn)程控制,,進(jìn)程調(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è)備之間的軟件層,負(fù)責(zé)完成二者間的,I/O,操作;,在,LINUX,系統(tǒng)里,對用戶程序,設(shè)備驅(qū)動隱藏了設(shè)備的具體細(xì)節(jié),為不同設(shè)備提供了一
8、致的接口;,設(shè)備驅(qū)動是嵌入式系統(tǒng)開發(fā)的重要內(nèi)容之一,設(shè)備驅(qū)動的作用設(shè)備驅(qū)動是位于應(yīng)用和物理設(shè)備之間的軟件層,負(fù)責(zé),設(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、,觸摸屏、掃描儀、打印機(jī)、并口、鼠標(biāo)、游戲桿等。,塊設(shè)備,塊設(shè)備是指支持面向塊訪問的設(shè)備,每塊包含2的,N,次冪字節(jié)數(shù)據(jù),例如,IDE,設(shè)備
9、(磁盤)、,floppy disk 、CD-ROM、Ramdisk,等。,塊設(shè)備接口必須支持掛裝文件系統(tǒng)。,網(wǎng)絡(luò)設(shè)備——即能夠和其他主機(jī)交換數(shù)據(jù)的設(shè)備接口。,設(shè)備文件類型通常有字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備三種,主設(shè)備號與次設(shè)備號,LINUX,系統(tǒng)中,設(shè)備由一個主設(shè)備號和一個次設(shè)備號來標(biāo)識;,主設(shè)備號唯一標(biāo)識了設(shè)備類型,即設(shè)備驅(qū)動程序類型,它是塊設(shè)備表或字符設(shè)備表中設(shè)備表項(xiàng)的索引。,次設(shè)備號僅由設(shè)備驅(qū)動程序解釋,一般用于識別在若干可能的硬件設(shè)備中,,I/O,請求所涉及到的那個設(shè)備。,主設(shè)備號與次設(shè)備號LINUX系統(tǒng)中,設(shè)備由一個主設(shè)備號和一個,主設(shè)備號與次設(shè)備號,主設(shè)備號(Major Number
10、)相同的設(shè)備使用相同的驅(qū)動程序,而次設(shè)備號(minor Number)用來區(qū)分該類型不同的設(shè)備實(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é)點(diǎn)的添加,設(shè)備在/,dev,路徑下,可用如下命令添加,dev,節(jié)點(diǎn),,b,代表塊設(shè)備,,C,表示字符設(shè)備,mknod /dev/hda1 b 127 1,,塊設(shè)備,主設(shè)備號127,次設(shè)備號1,Linux設(shè)備節(jié)點(diǎn)的添加設(shè)備在
11、/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ù)
12、,release( ),設(shè)備驅(qū)動構(gòu)成設(shè)備驅(qū)動構(gòu)成:,設(shè)備驅(qū)動構(gòu)成,設(shè)備的讀寫操作,Read(),Write(),設(shè)備的控制操作,ioctl( ),設(shè)備的中斷和輪詢處理,對于不支持中斷的硬件設(shè)備,讀寫時需要輪流查詢設(shè)備狀態(tài),以便決定是否繼續(xù)進(jìn)行數(shù)據(jù)傳輸。如果設(shè)備支持中斷,則可以按中斷方式進(jìn)行操作,,設(shè)備驅(qū)動構(gòu)成設(shè)備的讀寫操作,模塊化的字符設(shè)備驅(qū)動程序框架,int init_module(void),{,,硬件初始化;,注冊設(shè)備;,注冊中斷;,},void cleanup_module(void),{,,釋放中斷資源;,釋放該設(shè)備;,釋放其他的系統(tǒng)資源;,},模塊化的字符設(shè)備驅(qū)動程序框架int i
13、nit_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)
14、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
15、; },devfs_handle =,devfs_register,(NULL, MOD_NAME, ,result, 0,,,,該方法的優(yōu)點(diǎn):無需創(chuàng)建設(shè)備節(jié)點(diǎn),由系統(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 ){
16、 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
17、*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ū)別在第一種方法會進(jìn)行用戶地址空間指針的有效性檢查。,,用戶空間與內(nèi)核空間的數(shù)據(jù)拷貝方法一:,設(shè)備驅(qū)動模塊的安裝與卸載,安裝驅(qū)動模塊,insmod driver_name.o,卸載驅(qū)動模塊,rmmod driver_name,瀏覽系統(tǒng)中的模塊,lsmod,,設(shè)備驅(qū)動模塊的安
18、裝與卸載安裝驅(qū)動模塊,驅(qū)動程序?qū)嵗?---I,2,C,I2C,總線,用兩根線串接多個設(shè)備,支持多設(shè)備之間的隨機(jī)訪問,提供沖突檢測機(jī)制,實(shí)現(xiàn)對設(shè)備的管理,1992,年,1.0,版規(guī)定的快速模式的數(shù)據(jù)率達(dá)到,400Kbps,1998,年,2.0,版規(guī)定的高速模式數(shù)據(jù)率達(dá)到,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.,支
19、持起始位和終止位的產(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é)議時序,起始信號,當(dāng),SCL,為邏輯,1,時,,SDA,由,1,到,0,的轉(zhuǎn)變表示了起始位,表示一次數(shù)據(jù)傳輸?shù)拈_始,并喚醒所有在,I2C,總線上的設(shè)備,數(shù)據(jù)源,/,目的地址,,Master,發(fā)出一個,7,位的地址,即,Slave,設(shè)備的,I2C,總線地址,每個,Slave,有一個唯一地址,這個地址
20、不是,Master,的地址,數(shù)據(jù)傳輸方向位,表明是從,Slave,讀數(shù)據(jù)還是向,Slave,寫數(shù)據(jù),MC9328MX1 協(xié)議時序起始信號,當(dāng)SCL為邏輯1時,S,MC9328MX1 協(xié)議時序,D.,應(yīng)答位,被選址的,Slave,設(shè)備通過返回一個應(yīng)答位向,Master,告知其已經(jīng)接收到了數(shù)據(jù)。通過將,SDA,線在起始位之后第,9,個時鐘周期從邏輯,1,變?yōu)檫壿?0,來實(shí)現(xiàn)的。此應(yīng)答位不受控制寄存器,I2CR,中,TXAK,或者狀態(tài)寄存器中,I2CSR,中,RXAK,的影響。,E.,數(shù)據(jù),,I2C,按照數(shù)據(jù)傳輸方向逐字節(jié)的完成數(shù)據(jù)傳輸。在,SCL,時鐘周期的中,,SCL=0,時可以改變數(shù)據(jù),而,S
21、CL=1,則必須保持?jǐn)?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è)備可以不釋放總線,而重新開始一次獨(dú)立的數(shù)據(jù)傳輸過程。,MC9328MX1 協(xié)議時序D.應(yīng)答位,被選
22、址的Slave設(shè),MC9328MX1 I2C 寄存器,MC9328MX1 I2C 寄存器,MC9328MX1 I2C 寄存器,1.I2C,地址寄存器,IADR,,如果,MC9328,是,I2C,總線上的,Slave,設(shè)備,則此寄存器中存放相應(yīng)的地址。,2.I2C,分頻寄存器,IFDR,,用來控制,I2C,總線的時鐘頻率,支持多達(dá),64,種的頻率,最快數(shù)據(jù)率為,400Kbps,3.I2C,控制寄存器,控制,I2C,的中斷,設(shè)置,Maser/Slave,模式、接收,/,傳輸模式、傳輸應(yīng)答使能等位等,4.I2C,狀態(tài)寄存器,I2CSR,,表明當(dāng)前,I2C,總線的狀態(tài),如有無中斷產(chǎn)生,是否接收到了應(yīng)答
23、信號,總線是否忙等,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
24、總線操作流程,1.模塊初始化,2.產(chǎn)生起始位,總線空閑,通過對I2DR寄存器的讀/寫來發(fā)出START信號,3.數(shù)據(jù)傳輸,中斷方式,檢測ICF位來確定當(dāng)前字節(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位置位來實(shí)現(xiàn);,在讀取最后一個字節(jié)之前必須產(chǎn)生一個中止
25、位信號。,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è)置為接收模式,進(jìn)行一次啞讀操作。如果是,Slave,接受模式,則將,Slave,
26、設(shè)置為發(fā)送模式,進(jìn)行一次啞寫操作。,I2C 總線操作流程5.產(chǎn)生重復(fù)起始位,I2C 總線操作流程,7.仲裁淘汰,如果一個設(shè)備試圖占用總線而失敗,則該設(shè)備將被設(shè)為Slave模式,而且IAL被置位。,Slave程序首先要檢測IAL位以判斷,本設(shè)備進(jìn)入Slave狀態(tài)是否是由于仲裁淘汰引起的。,I2C 總線操作流程7.仲裁淘汰,嵌入式Linux設(shè)備驅(qū)動程序開發(fā)ppt課件,I2C總線驅(qū)動程序分析,1.I2C總線驅(qū)動程序,實(shí)現(xiàn)I2C的時序,2.I2C設(shè)備驅(qū)動程序,調(diào)用I2C總線驅(qū)動提供的接口,實(shí)現(xiàn)對設(shè)備的操作;首先實(shí)現(xiàn)I2C總線驅(qū)動,對于每一個具體的I2C設(shè)備,需要單獨(dú)實(shí)現(xiàn)其驅(qū)動。,I2C總線驅(qū)動程序分析
27、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)鍵函
28、數(shù):i2c_aa_xfer,I2C總線驅(qū)動程序分析,5.其他關(guān)鍵函數(shù):,i2c_aa_ioctl:,設(shè)置總線頻率,讀取總線狀態(tài),I2c_aa_cleanup:,釋放中斷,從設(shè)備列表數(shù)組中刪除當(dāng)前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ū)動
29、程序分析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ū)動分別單獨(dú)實(shí)現(xiàn);類似的驅(qū)動包括串口驅(qū)動與串口設(shè)備驅(qū)動等。,I2C設(shè)備驅(qū)動程序分析本例驅(qū)動程序沒有提供通用的文件操作接口,
- 溫馨提示:
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. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專題黨課講稿:以高質(zhì)量黨建保障國有企業(yè)高質(zhì)量發(fā)展
- 廉政黨課講稿材料:堅(jiān)決打好反腐敗斗爭攻堅(jiān)戰(zhàn)持久戰(zhàn)總體戰(zhàn)涵養(yǎng)風(fēng)清氣正的政治生態(tài)
- 在新錄用選調(diào)生公務(wù)員座談會上和基層單位調(diào)研座談會上的發(fā)言材料
- 總工會關(guān)于2025年維護(hù)勞動領(lǐng)域政治安全的工作匯報(bào)材料
- 基層黨建工作交流研討會上的講話發(fā)言材料
- 糧食和物資儲備學(xué)習(xí)教育工作部署會上的講話發(fā)言材料
- 市工業(yè)園區(qū)、市直機(jī)關(guān)單位、市紀(jì)委監(jiān)委2025年工作計(jì)劃
- 檢察院政治部關(guān)于2025年工作計(jì)劃
- 辦公室主任2025年現(xiàn)實(shí)表現(xiàn)材料
- 2025年~村農(nóng)村保潔員規(guī)范管理工作方案
- 在深入貫徹中央8項(xiàng)規(guī)定精神學(xué)習(xí)教育工作部署會議上的講話發(fā)言材料4篇
- 開展深入貫徹規(guī)定精神學(xué)習(xí)教育動員部署會上的講話發(fā)言材料3篇
- 在司法黨組中心學(xué)習(xí)組學(xué)習(xí)會上的發(fā)言材料
- 國企黨委關(guān)于推動基層黨建與生產(chǎn)經(jīng)營深度融合工作情況的報(bào)告材料
- 副書記在2025年工作務(wù)虛會上的發(fā)言材料2篇