■ 高學群
Linux 系統作為嵌入式操作系統有著明顯的優勢,首先,Linux源代碼是開放的,全球的Linux 愛好者都是在不斷地開發完善Linux內核;其次,Linux 系統內核很小,最小可達約134KB。同時Linux 內核的更新速度很快并且可以定制。Linux 一大亮點就是免費。Linux 適應多種CPU 硬件平臺表現了嵌入式操作系統必須的特色。如今,Linux 操作系統不僅支持二三十種CPU,而且容易開發、使用和性能良好。Linux的平臺移植成為CPU 芯片行業的熱門項目,移植速度更是超過了Java。在網絡方面,Linux 內核的結構更有優勢,能夠完備的支持TCP/IP 協議并且能夠提供了最高千兆的以太網以及無線等網絡支持。
本設計選用Linux作為軟件平臺進行開發,內核版本2.6.39。
設備驅動在字面可以清楚的理解為“驅使硬件設備行動”。驅動是與底層硬件接觸,而不同硬件設備具有不同的工作方式,所以驅動要按照具體的工作方式讀寫硬件設備寄存器,完成中斷處理、物理內存向虛擬內存的映射等,使設備各功能能夠正常工作,如能夠收發數據的通信設備,能顯示文字的顯示設備等。
驅動的對象不是CPU 內核而是存儲器和外設。Linux把存儲器和外設分為字符設備、塊設備和網絡設備。字符設備是像觸摸屏、鼠標之類的以串行順序依次進行訪問的設備。塊設備是可以用任意順序進行訪問并經過系統的快速緩沖的設備。雖然字符設備不經過系統的快速緩沖,但是它們之間并沒有明顯的界限,就像有塊設備特點的Flash 設備,也可以把它看成一個字符設備來訪問。網絡設備主要是接收和發送數據包。
異步串口是通信最常用的資源。RS-232 和RS-485都是串行數據接口標準。RS-485比RS-232在傳輸速度、距離等方面都有著明顯優勢,同時一條總線上最多可連接32 個接收器。由于它們的時序完全一樣,只是在電氣特性上有所區別,所以它們之間也很容易實現轉換。
串口驅動位于tty 子系統。對于用戶來說,訪問串口與訪問其它字符設備的方法一樣,都是通過系統調用訪問設備文件從而訪問設備。串口主要有open 函數,read函數,write函數。因此驅動程序中也要實現這三個實現函數,如圖1 串口驅動包含以下部分:

圖1 串口驅動程序結構
本設計基于Linux-2..639內核源碼完成對串口驅動程序的開發。其主要代碼在linux-2.6.39drivers tyserialatmel_serial.c 中實現。其中部分函數如下:
(1)驅動加載與卸載函數

(2)開始發送數據

本設計基于Linux-2..639內核源碼完成對串口驅動程序的開發。其主要代碼在linux-2.6.39drivers tyserialatmel_serial.c 中實現。其中部分函數如下:
(1)驅動加載與卸載函數

(2)開始發送數據


在物聯網發展的今天,嵌入式系統都會擁有網絡模塊。以太網作為通信接口有著傳輸速度快、穩定等優點。它也可以作為嵌入式系統開發的調試的接口。Linux網絡驅動程序的體系結構如圖2 所示

圖2 Linux 網絡驅動程序的體系結構
網絡設備接口及以上層次的源碼都可以通過Linux 內核中找到,因此對于特定網絡硬件驅動程序的移植關鍵在于設備驅動功能層,包含接收數據、發送數據等控制。所有網絡設備在Linux 中都可以抽象為一個接口,網絡設備在內核中的運行情況由網絡設備接口(結構體struct net_device)來表示。以dev_base 為頭指針的設備鏈表(每個元素代表一個網絡設備接口)管理著所有網絡設備。大部分供系統訪問和協議層調用的設備方法都在結構體net_device 中,有init 函數(初始化)、open 和stop 函數(設備打開關閉)、hard_start_xmit 函數(數據包發送)以及中斷處理函數等。
本設計基于Linux-2.6.39內核源碼完成對網口驅動程序的開發。其主要代碼在linux-2.6.39drivers etfec.c中實現。其中部分功能如下:
(1)網絡設備驅動程序的模塊加載與卸載函數

(2)網絡設備驅動的初始化

(3)網絡設備打開與釋放

(4)數據包發送函數


嵌入式處理器能夠提供一個良好的人機交互平臺,屏幕主要有LCD,液晶等。幀緩沖存儲器是Linux 操作系統提供一個接口,以便連接顯示設備,并且能夠讓上層應用程序直接進行讀寫顯示緩沖區,方便用戶使用。
fbmem.c 中的file_operations 結構體是幀緩沖設備提供給用戶空間的,對應的xxxfb.c 文件實現對于特定幀緩沖設備關于fb_info結構體的注冊與注銷等,以及fb_ops中成員函數,LCD 控制器硬件寄存器由fb_ops 中成員函數操作。Linux 幀緩沖設備驅動程序結構見圖3。

圖3 幀緩沖設備驅動的程序結構
本設計基于Linux-2.6.39內核源碼完成對顯示屏驅動程序的開發。其主要代碼在linux-2.6.39driversvideoatmel_lcdfb.c 中實現。其中部分函數如下:
(1)幀緩沖設備驅動的模塊加載與卸載函數


(2)平臺驅動的探測與移除函數

(3)幀緩沖設備驅動的讀寫函數

在嵌入式系統中,有許多輸入設備,如觸摸屏、按鍵、鼠標等。本設計采用了6 個按鍵完成輸入功能,其底層驅動的結構如圖4。

圖4 按鍵驅動程序結構
(1)按鍵驅動模塊的加載和卸載函數

(2)實現設備操作函數


