基于ADSP-BF533的μClinux嵌入式系統(tǒng)移植與開發(fā)
U—Boot(Universal Boot Loader)是當前比較流行的遵循GPL條件的開放源碼項目。也是是嵌入式Linux系統(tǒng)常用的Boot Loader之一。其完成的功能是初始化硬件設備、改變處理器運行模式、重組中斷向量和建立內(nèi)存空間映射圖,從而將系統(tǒng)的軟硬件帶到一個合適的狀態(tài)或者用戶定制的特定狀態(tài),以便為最終加載操作系統(tǒng)內(nèi)核準備好正確的環(huán)境。
U—Boot具有源碼公開的特點,開發(fā)人員可根據(jù)自身需要進行裁減;支持多種處理器和嵌入式操作系統(tǒng)內(nèi)核;具有多種設備驅(qū)動源碼:支持種引導方式;具有功能強大且成熟、穩(wěn)定等諸多優(yōu)點,故本文采用U—Boot引導μClinux內(nèi)核。U—Boot嚴重依賴于底層硬件,不同的CPU或嵌入式板極設備需要不同的U—Boot,不過因為本文的重點是μClinux的移植,所以這里不再詳述U—Boot的具體實現(xiàn)過程。
當系統(tǒng)上電后,U—Boot從地址OxO開始執(zhí)行,將存儲器映射重新配置,如圖1所示,并會執(zhí)行μClinux的固化內(nèi)核。
U一Boot可以使用ADI的仿真軟件Visual DSP++通過仿真器或JTAG口下載到目標板上。
4 μClinux內(nèi)核的編譯和移植
作為操作系統(tǒng)的核心,μClinux內(nèi)核負責管理系統(tǒng)的進程、內(nèi)存、設備驅(qū)動程序、文件系統(tǒng)和網(wǎng)絡系統(tǒng),決定著系統(tǒng)的各種性能。μClinux內(nèi)核采用模塊化的組織結(jié)構(gòu),通過增減內(nèi)核模塊的方式來增減系統(tǒng)的功能。
4.1 內(nèi)核配置
雖然μClinux的內(nèi)核代碼大部分獨立于處理器和其體系結(jié)構(gòu),但是最底層的代碼還是基于特定系統(tǒng)的。雖然各個系統(tǒng)存在相同之處,但是它們的中斷處理上下文、內(nèi)存映射的維護、任務上下文和初始化過程是獨特的。這些例行程序放置在μClinux代碼樹的aroh/目錄下。這里需要根據(jù)自己的硬件平臺來配置內(nèi)核代碼。配置過程如下:
可以從官方網(wǎng)站http://blackfin.μClinux.org處下載μClinux—list的內(nèi)核源代碼。運行解壓命令:將tar— xvfμClinux—dist.tar.gz解壓完畢后,就會生成/μClinux—dist目錄,加入該目錄后按如下順序編譯內(nèi)核:
(1)make menuconfig;進入菜單方式配置指令;
(2)選擇所使用的平臺類型和所使用的庫
本文設計的目標板選擇:AnalogDevices/BF533一EZ—KIT和μC—libc庫。在配置欄中,選擇Load an AlternateConfiguration File,按確認,退出配置欄;
(3)make dep;尋找依存關系;
(4)make clean;清除以前構(gòu)造內(nèi)核時生成的所有目標文件、模塊文件和一些臨時文件;
(5)make lib_only;編譯庫文件;
(6)make user_only;編譯用戶應用程序文件;
(7)make tomfs;生成romfs文件系統(tǒng);
(8)make image;生成鏡像文件然后通過Jtag口輸入到目標板;
(9)make;通過各個目錄的makefile文件進行,會在各目錄下生成一大堆目標文件。
在上述步驟完成后,就完成了對μClinux源碼的編譯工作。最后會在/μClinux—dist/images目錄下看到3個內(nèi)核文件:linux.dxe,linux.bin和zlmage.bin。如果編譯不成功,需要根據(jù)編譯過程的提示信息找到錯誤并重新編譯,直到成功為止。
4.2 修改配置內(nèi)核代碼
直接由源代碼編譯生成的內(nèi)核映像文件一般不會啟動成功,需要根據(jù)自己的目標板進行配置。需要修改系統(tǒng)啟動初始化文件crt0_ram.s,sysinit.c和ram.1d。
在crt0_ram.s中需要根據(jù)自己的目標板修改基地址、存儲器大小和起始地址。在sysinit.c中需要修改片選設置,分別對FLASH和 SDRAM進行片選設置。在ram.1d中修改內(nèi)核連接加載地址。做完上面的修改,重新編譯生成linux.dxe等文件。
4.3 μClinux內(nèi)核的下載與執(zhí)行
μClinux內(nèi)核有2種可選的運行方式:一種是在FLASH上直接運行;另一種是加載到內(nèi)存中運行,系統(tǒng)啟動時從FLASH中讀取壓縮的內(nèi)核代碼(存儲器空間有限,所以一般需要壓縮內(nèi)核代碼)到內(nèi)存中解壓,然后開始執(zhí)行,這種方法比第一種的速度更快(RAM的存取速度比FLASH的快)。所以選取第二種方法。
編譯好的內(nèi)核文件可以由Visual DSP++開發(fā)裝置,通過網(wǎng)口或串口把linux.dxe下載到目標板的FLASH中,從設定的入口地址(一般為Oxl000)執(zhí)行即可啟動內(nèi)核。
啟動μClinux就可以在超級終端看到μClinux的歡迎信息和簡單的shell提示符,界面如圖3所示。
評論