最近在學習嵌入式Linux驅動開發,大致了解了驅動的基本開發流程,本文主要針對字符設備驅動開發做一個簡要介紹,也當作是對這幾天工作的一個小小總結。
計算機系統是由軟硬件相互協調共同完成工作的,作為專用計算機系統的嵌入式系統也不例外,既要有CPU、SDRAM、FLASH、IO等硬件,同時也少不了操作系統和應用軟件等軟件的支持,而作為應用程序與硬件的橋梁——驅動程序,是整個嵌入式系統開發過程中的關鍵環節。驅動開發涉及底層,而了解底層作用機制對於整個系統的開發意義重大。
Linux內核中有60%以上是驅動程序,它不僅支持驅動以靜態形式編譯進內核,而且允許驅動以模塊的形式動態加載進內核,大大減小了內核的大小,同時便於調試分析。
Linux將所有的設備當作文件進行處理,Linux系統的設備分為三類:字符設備、塊設備和網絡設備。字符設備的驅動有一個固定的模板,主要編寫file_operations結構體中的成員函數,這些函數最終會在應用程序進行Linux的open()、write()、read()、ioctl()、close()等系統調用時被調用。
驅動開發作用在內核空間,應用程序開發作用在用戶空間。下面以GPIO端口驅動LED亮滅為例。
1、查看開發板原理圖和芯片數據手冊;
從上圖圖中可以看出GPF4~GPF7 分別控制D12~D9,當GPF4~GPF7被配置為輸出模式,同時向該引腳輸出0時LED亮,輸出1時LED滅。
mini2440 LED驅動程序開發 http://www.linuxidc.com/Linux/2013-05/84300.htm
基於Tiny6410的LED驅動程序 http://www.linuxidc.com/Linux/2013-05/83997.htm
Linux設備驅動的Hello World—LED驅動 http://www.linuxidc.com/Linux/2013-04/82790.htm
mini2440 LED驅動程序經典分析 http://www.linuxidc.com/Linux/2013-01/77976.htm
Tiny6410-LED驅動 http://www.linuxidc.com/Linux/2012-07/65705.htm
從下圖可以看出GPFCON控制寄存器對應的每個引腳由兩位決定,01時表示輸出,所以GPF7~GPF4為0101時,四個引腳配置為輸出,所以GPFCON=0x55FF。GPFDAT的八位分別對應八個引腳,0表示輸出0,1表示輸出1,譬如要使D9~D12都亮,則GPFDAT=0x0F。GPFUP對應的八位為1時表示上拉失效,為0時對應位上拉。同時可以看出GPFCON、GPFDAT、GPFUP的物理地址分別是0x56000050、0x56000054、0x56000058。
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2014-06/103124p2.htm