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