基於ADSP-BF533的μClinux嵌入式系統移植與開發

來源:互聯網
上載者:User
 

基於ADSP-BF533的μClinux嵌入式系統移植與開發
[日期:2008-10-7] 來源:中電網  作者:吳 川,王 斌 [字型: ]

 

Blackfin處理器是基於由美國模擬器件公司(ADI)和Intel公司聯合開發的號架構(MSA)的首款第4代DSP產品,它是ADI公司16位產品的一個大系列。這一新產品是專為通訊和互連網應用而設計的通用DSP晶片,適合處理廣泛用於互連網中的大量映像、聲音、文本和資料流,也可應用於汽車電子可視系統、寬頻無線系統、消費類多媒體電子、數字攝像機、多通道VoIP、安全和監督、機頂盒和視頻電話會議等方面。本文所用到的ADSP-BF533是Blackfin系列處理器的典型代表。

1 μClinux簡介

μClinux從Linux 2.0/2.4核心派生而來,沿襲主流Linux的絕大部分特性。它是專門針對沒有MMU的CPU,並且為嵌入式系統做了許多小型化的工作。適用於沒有虛擬記憶體或記憶體管理單元(MMU)的處理器。由於μClinux在標準的Linux基礎上進行了適當的裁剪和最佳化,形成了一個高度最佳化的、代碼緊湊的嵌入式Linux。雖然它的體積很小,但μClinux仍然保留了Linux的大多數的優點:穩定、良好的移植性、優秀的網路功能、完備的對各種檔案系統的支援、以及標準豐富的API等。

μClinux的主要特點如下:

(1)記憶體管理

這部分是μClinux與傳統Linux區別最大的地方。對於μClinux來說,其設計針對沒有MMU的處理器,即μClinux不能使用處理器的虛擬記憶體管理技術,μClinux仍然採用儲存空間的分頁管理。系統在啟動時把實際儲存空間進行分頁,在載入應用程式時程式分頁載入,但是由於沒有MMU管理,因此實際上μClinux採用實儲存空間管理原則。這一點影響了系統工作的很多方面。

(2)μClinux的核心載入方式

μClinux的核心有2種可選的運行方式:可以在FLASH上直接運行,也可以載入到記憶體中運行。由於RAM的存取速率要比FLASH高,因此後者可以減少記憶體需要,運行速度也更快。

(3)μClinux的檔案系統

μClinux系統採用romfs檔案系統。這種檔案系統相對於一般的ext2檔案系統要求更少的空間。這是由於核心支援romfs檔案系統比支援ext2檔案系統需要更少的代碼,而且romfs檔案系統相對簡單建立檔案系統超級塊(superblock)需要的儲存空間更少。

(4)μClinux的應用程式庫

μClinux小型化的另一個做法是重寫應用程式庫。相對于越來越大且越來越全的庫glibc μClibc對libc做了精簡。

(5)可執行檔格式

μClinux系統使用flat可執行檔格式。另外,μClinux還提供通用的Linux API支援完整的TCP/IP協議堆棧和大量其他的網路通訊協定,支援包括NFSext2ROMfs等多種檔案系統。

2 建立μClinux開發環境

嵌入式系統的開發與一般的應用開發最大的差別在於,前者需要建立特殊的硬體環境,而後者一般基於特定的作業系統或分布式平台。後者的平台已經對硬體或網路媒質做了抽象,從而不需要由系統開發人員來完成這些工作。而在嵌入式系統開發中,這也由開發人員完成。

嵌入式系統開發環境一般分成主機端(HOST)和目標板(TARGET)兩個部分。主機端是開發平台,用於運行開發過程中的各種工具(如Linux作業系統和ADI提供的整合式開發環境Visual DSP++等);目標板是運行和測試平台,是嵌入式系統的最終駐留環境。在主機端和目標板之間需要通過某種方式進行通訊,如使用RS 232串口或網口。通訊的目的在於發送控制指令和傳輸資料,同時獲得反饋資訊。圖1是系統移植工作的硬體環境。

目標板的硬體平台1所示:

主機端的PC使用COM1和BF533的UART相串連,通過串口完成對目標板的必要控制功能。本文設計的ADSP-BF533目標板上配備有1塊SMSC LAN91C111乙太網路卡晶片和主機端建立原始(raw)IP串連,使用鏈路層地址完成大批量資料的傳送。

在硬體環境建立之後,就需要建立軟體開發環境。軟體環境主要是指Blackfin體繫結構的交叉編譯環境。建立交叉編譯環境首先要有交叉開發工具。交叉編譯工具是指一組運行在某一種處理器上,卻可以編譯出另一種處理器上執行的指令的工具。它由一套用於編譯、彙編和連結核心及應用程式的組件組成,通過編譯可以使μClinux核心和應用程式在目標裝置上運行。

編譯μClinux一般使用GNU開發套件作為交叉編譯器工具鏈,它包括一系列的開發和調試工具。在官方網站http:∥blackfin.μClinux.org上提供了Blackfin系列處理器核心的交叉編譯工具。下載後按照說明解壓到Linux系統的相應檔案夾裡,並設定系統內容變數,使這些交叉編譯工具所在的目錄為全域環境變數。至此就建立好了μClinux的軟體開發環境。

3 利用U-Boot引導核心

U-Boot(Universal Boot Loader)是當前比較流行的遵循GPL條件的開放源碼項目。也是是嵌入式Linux系統常用的Boot Loader之一。其完成的功能是初始化硬體裝置、改變處理器運行模式、重組中斷向量和建立記憶體空間映射圖,從而將系統的軟硬體帶到一個合適的狀態或者使用者定製的特定狀態,以便為最終載入作業系統核心準備好正確的環境。

U-Boot具有源碼公開的特點,開發人員可根據自身需要進行裁減;支援多種處理器和嵌入式作業系統核心;具有多種裝置驅動源碼:支援種引導方式;具有功能強大且成熟、穩定等諸多優點,故本文採用U-Boot引導μClinux核心。U-Boot嚴重依賴於底層硬體,不同的CPU或嵌入式板極裝置需要不同的U-Boot,不過因為本文的重點是μClinux的移植,所以這裡不再詳述U-Boot的具體實現過程。

當系統上電後,U-Boot從地址OxO開始執行,將儲存空間映射重新設定,1所示,並會執行μClinux的固化核心。

U-Boot可以使用ADI的模擬軟體Visual DSP++通過模擬器或JTAG口下載到目標板上。

4 μClinux核心的編譯和移植

作為作業系統的核心,μClinux核心負責管理系統的進程、記憶體、裝置驅動程式、檔案系統和網路系統,決定著系統的各種效能。μClinux核心採用模組化的組織圖,通過增減核心模組的方式來增減系統的功能。

4.1 核心配置

雖然μClinux的核心代碼大部分獨立於處理器和其體繫結構,但是最底層的代碼還是基於特定系統的。雖然各個系統存在相同之處,但是它們的中斷處理上下文、記憶體映射的維護、任務上下文和初始化過程是獨特的。這些例行程式放置在μClinux代碼樹的arch/目錄下。這裡需要根據自己的硬體平台來配置核心代碼。配置過程如下:

可以從官方網站http://blackfin.μClinux.org處下載μClinux-list的核心原始碼。運行解壓命令:將tar-xvfμClinux-dist.tar.gz解壓完畢後,就會產生/μClinux-dist目錄,加入該目錄後按如下順序編譯核心:

(1)make menuconfig;進入菜單方式配置指令;

(2)選擇所使用的平台類型和所使用的庫

本文設計的目標板選擇:AnalogDevices/BF533-EZ-KIT和μC-libc庫。在配置欄中,選擇Load an AlternateConfiguration File,按確認,退出配置欄;

(3)make dep;尋找依存關係;

(4)make clean;清除以前構造核心時產生的所有目標檔案、模組檔案和一些臨時檔案;

(5)make lib_only;編譯庫檔案;

(6)make user_only;編譯使用者應用程式檔案;

(7)make romfs;產生romfs檔案系統;

(8)make image;產生鏡像檔案然後通過Jtag口輸入到目標板;

(9)make;通過各個目錄的makefile檔案進行,會在各目錄下產生一大堆目標檔案。

在上述步驟完成後,就完成了對μClinux源碼的編譯工作。最後會在/μClinux-dist/images目錄下看到3個核心檔案:linux.dxe,linux.bin和zImage.bin。如果編譯不成功,需要根據編譯過程的提示資訊找到錯誤並重新編譯,直到成功為止。

4.2 修改配置核心代碼

直接由原始碼編譯產生的核心映像檔案一般不會啟動成功,需要根據自己的目標板進行配置。需要修改系統啟動初始設定檔案crt0_ram.s,sysinit.c和ram.ld。

在crt0_ram.s中需要根據自己的目標板修改基地址、儲存空間大小和起始地址。在sysinit.c中需要修改片選設定,分別對FLASH和SDRAM進行片選設定。在ram.ld中修改核心串連載入地址。做完上面的修改,重新編譯產生linux.dxe等檔案。

4.3 μClinux核心的下載與執行

μClinux核心有2種可選的運行方式:一種是在FLASH上直接運行;另一種是載入到記憶體中運行,系統啟動時從FLASH中讀取壓縮的核心代碼(儲存空間空間有限,所以一般需要壓縮核心代碼)到記憶體中解壓,然後開始執行,這種方法比第一種的速度更快(RAM的存取速度比FLASH的快)。所以選取第二種方法。

編譯好的核心檔案可以由Visual DSP++開發裝置,通過網口或串口把linux.dxe下載到目標板的FLASH中,從設定的入口地址(一般為0x1000)執行即可啟動核心。

啟動μClinux就可以在超級終端看到μClinux的歡迎資訊和簡單的shell提示符,介面3所示。

5 在μClinux下添加應用程式

為了方便,μClinux使用者層的應用程式代碼都放在/μClinux—dist/user/目錄下,否則要自己重新定義很多宏,而且容易出錯。具體實現過程如下:

(1)在工作目錄的user目錄下建立應用程式的檔案夾user/app然後編寫應用程式,編寫方法和普通的應用程式一樣;

(2)在檔案/user/Makefile裡添加如下一句以便把使用者的應用加入到μClinux系統的編譯列表中;

dir_MYM(CONFIG_USER_MYAPP)+=app

(3)在/config/config.in裡加入如下語句:

這樣在編譯時間會多1個配置選項,當選擇這一選項時,字串“CONFIG USER MYAPP”就會定義為“Y,參考上一個步驟,dir Y+=app,應用會被編譯入核心

(4)為便於核心配置在/config/config.help中加入有關該應用的協助說明;

(5)回到/μClinux-dist目錄,執行make編譯μClinux系統核心和這裡的應用程式。

6 結 語

對於嵌入式系統開發人員來說,要將嵌入式作業系統應用到嵌入式系統中,首先要做的工作是根據不同的硬體平台移植作業系統,掌握移植的方法非常重要。

本文所述的移植方法已經成功應用於多重專案的開發。所述的移植雖然是針對Blackfin處理器晶片ADSP-BF533,但重點闡述的是移植的思路和方法。對將μClinux移植到其他處理器為核心的硬體平台也有借鑒作用。

本文從如何將嵌入式作業系統μClinux與特定硬體相結合出發,分析移植μClinux到ADSP-BF533的過程。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.