當前位置首頁 > 計算機 > 嵌入式開發(fā)
搜柄,搜必應! 快速導航 | 使用教程

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

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

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

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

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

    設備的注冊與注銷,devfs注冊:,設備的注冊與注銷,,devfs,注銷:,devfs_unregister_chrdev,(MAJOR, MOD_NAME);,devfs_unregister,(devfs_handle);,,,設備的注冊與注銷, devfs注銷:,設備的注冊與注銷,方法二,注冊:,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,,設備的注冊與注銷,方法二注冊:,中斷的申請與釋放,申請:,request_irq,(irq , irq_handler, flag, dev_name, dev_id);,dev_id,用于共享中斷信號線釋放:,free_irq,(irq, dev_id);,,,中斷的申請與釋放申請:,用戶空間與內核空間的數據拷貝,方法一:,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ū)別在第一種方法會進行用戶地址空間指針的有效性檢查。

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

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

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

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

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

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

    點擊閱讀更多內容
    最新文檔
    傳統文化道德不是高懸的明月而是腳下的星光.pptx
    世界無煙日關注青少年成長健康無煙為成長護航.pptx
    五四青年節(jié)詩詞贊歌五四青年自強不息.pptx
    XX學校班主任培訓用心管理慧做班主任.pptx
    拒絕熬夜健康養(yǎng)生規(guī)律作息遠離亞健康.pptx
    兒童成長手冊時光里的童真印記.pptx
    幼兒園夏季傳染病預防指南預見夏天健康童行夏季傳染病預防科普.pptx
    高中生心理健康教育主題班會快樂學習高效學習正視壓力學會減壓.pptx
    員工職業(yè)道德與職業(yè)素養(yǎng)培訓遵守職業(yè)道德提高職業(yè)修養(yǎng).pptx
    2025職業(yè)病防治法宣傳周健康守護職防同行.pptx
    XX幼兒園防災減災安全教育臨災不亂安全童行學會保護自己.pptx
    在2025年縣教育工作大會暨高考備考工作推進會上的講話發(fā)言材料.docx
    在2025年縣全面從嚴治黨和黨風廉政會議上的講話發(fā)言材料.docx
    在2025年全市慶?!拔逡弧濒邉趧幽7侗碚么髸系闹v話發(fā)言材料多篇.docx
    2025年稅務局青年代表在五四青年座談會上的發(fā)言材料3篇.docx
    在2025年市委全體會議上的主持講話發(fā)言材料.docx
    2025年黨風廉政建設工作要點材料.docx
    在2025年全市青年干部慶祝五四青年節(jié)大會上的講話發(fā)言材料多篇.docx
    在入黨積極分子培訓班上的講話發(fā)言材料.docx
    縣文旅局黨組書記在五一假期及夏季旅游安全生產工作部署會議上的講話發(fā)言材料.docx
    賣家[上傳人]:212751380547735770658
    資質:實名認證