基于32位RISC處理器之SoC平臺的Linux操作系統實(shí)現
摘要: 本文會(huì )介紹如何在兼容ARM V4指令集的32位RISC處理器(FA526)所構建的SoC平臺上(即FIE8100),運用智原科技所提供的FA526-Linux開(kāi)發(fā)包通過(guò)armboot裝載Linux操作系統。使開(kāi)發(fā)人員可以在基于FIE8100 SoC的仿真平臺-MediaCreative!上進(jìn)行二次開(kāi)發(fā)和驗證設計。
智原科技的FIE8100 SoC平臺是利用智原科技所開(kāi)發(fā)并驗證過(guò)的大量硅知識產(chǎn)權構建而成的高性能用于低功耗,可攜式視頻相關(guān)應用開(kāi)發(fā)的SoC平臺,它也可用于基于FA526 CPU的SoC設計的驗證。
基于FA526-Linux軟件開(kāi)發(fā)套件,開(kāi)發(fā)人員可以將Linux-2.4.19軟件環(huán)境在FIE8100平臺上安裝實(shí)現,通過(guò)完成對平臺上所有IP的驅動(dòng)程序安裝和對FA526的內部調試。
FA526介紹
FA526是一顆有著(zhù)廣泛用途的32位RISC處理器。它包括一個(gè)同步CPU內核(core),獨立的指令/數據緩存(cache),獨立的指令/數據暫存器(scratchpads),一個(gè)寫(xiě)緩存(write buffer),一個(gè)內存管理單元(memory management unit)和JTAG在線(xiàn)仿真(ICE)接口。CPU內核是6級流水線(xiàn)(pipeline)的哈佛(Harvard)結構,包括:取指令(fetch),解碼(decode),搬移(shift),執行(execution),數據訪(fǎng)存(memory),寫(xiě)回(write)。為了提高整體性能,FA526 CPU也包含了一個(gè)分支運算緩存(Branch Target Buffer:BTB)來(lái)減少分支運算的開(kāi)銷(xiāo)(penalties)。
圖1 FA526功能模塊圖
FA526 CPU內核的指令是兼容ARM V4的結構,并使用AMBA AHB 接口于外部設備進(jìn)行通訊。因此,FA526 CPU有著(zhù)廣泛的應用領(lǐng)域,特別是針對那些需要高性能和低功耗的應用。FA526 CPU 內核是完全同步的,并且其基于單相時(shí)鐘(single-phase clock)的結構可以很容易地實(shí)現集成開(kāi)發(fā)系統級芯片(System on Chip: SoC)。FA526 CPU內核的方塊圖如圖1所示。
FA526 CPU內每個(gè)功能模塊的說(shuō)明如下:
CPU Core
FA526完全兼容ARM V4結構,包括V4指令集和一個(gè)寄存器指令集??偣?0個(gè)通用寄存器和6個(gè)處理器狀態(tài)寄存器。FA526提供7種處理器模式,包括:Supervisor, System, FIQ, IRQ, abort, undefined and user.
分支運算緩存(Branch Target Buffer:BTB)
分支運算緩存可通過(guò)一種分支處理預言(branch prediction)機能來(lái)提高處理器的性能。憑借此精確分支處理預言,BTB可解決控制相關(guān)(dependency)和減少分支運算開(kāi)銷(xiāo)(branch penalty)。FA526在分支處理預言里采用2位計數器算法,并提供一個(gè)無(wú)效的全BTB輸入的操作(Entries operation)。
圖2 基于FA526 CPU的FIE8100系統架構
圖3 基于FIE8100 SoC的開(kāi)發(fā)板:MediaCreative!
指令緩存和數據緩存(ICache and DCache)
指令/數據緩存運用本地編程(program's locality)的方式來(lái)提高處理器性能。它在一個(gè)快速本地內存里存儲最近期使用過(guò)的指令或數據。他們的大小通常為8K或16K
內存管理單元(MMU)
FA526 MMU有一個(gè)標準的可配置的4路組關(guān)聯(lián)快表(4-way set-associative TLB)。它可在地址傳輸緩存最近期使用過(guò)的頁(yè)表(page),它也是和ARM架構完全兼容的。
指令/數據暫存器(IScratchpad and DScratchpad)
暫存器是一個(gè)靠近處理器內核的快速片上SRAM。一些要求性能高的代碼和數據可被預抓取(pre-fetched)到暫存器并全速的執行。這主要用于嵌入式應用。暫存器可以是1 Kbytes, 2 Kbytes或4 Kbytes。
總線(xiàn)界面單元(Bus Interface Unit:BIU)
總線(xiàn)界面單元可從CPU內核里接受內存訪(fǎng)問(wèn)的請求并通過(guò)外部系統總線(xiàn)執行指令和數據。FA526的總線(xiàn)界面單元使用AMBA 2.0(AHB)的界面協(xié)議。AHB是一種流水總線(xiàn)協(xié)議。它使用單相時(shí)鐘運算方式,使得設計人員能夠在SoC集成上很容易地采用。
寫(xiě)回(Write Buffer: WB)
寫(xiě)回可以在進(jìn)入下一個(gè)內存層時(shí)避免寫(xiě)延遲和減少寫(xiě)堵塞。FA526寫(xiě)回緩存包括一個(gè)8個(gè)字的地址緩沖器和一個(gè)4個(gè)字的數據緩沖器。
ASIE Interface
ASIE可用于處理器功能的擴展。它提供兩個(gè)擴展功能:協(xié)助器的連接和指令擴展(coprocessor connection and extension instruction).
在線(xiàn)仿真器(ICE)
FA526提供兩種ICE協(xié)議:Faraday ICE 調試器和ARM ICE調試器。
省電控制單元(Power Saving Control Unit)
省電節省控制單元控制著(zhù)整個(gè)芯片時(shí)鐘以減少操作功耗。當軟件程序發(fā)現CPU已長(cháng)時(shí)間的處在空閑狀態(tài),它會(huì )強制讓處理器進(jìn)入省電模式。處理器支持兩種省電模式:Idle and Sleep。在Idle模式下,處理器內部電路的時(shí)鐘除了省電控制單元都停止下來(lái)。在Sleep模式下,處理器內部電路包括PLL都停止。在省電模式下,處理器可以通過(guò)一個(gè)中斷或一個(gè)ICE驅動(dòng)來(lái)喚醒。這樣的啟動(dòng)時(shí)間需要16個(gè)時(shí)鐘周期,大約5個(gè)微秒從Sleep模式到喚醒。
FIE8100 SoC 平臺介紹
FIE8100 SoC平臺集成了眾多外設,系統架構如下圖2所示。一顆高性能處理器內核和功耗管理以特別應對MPEG-4和JPEG的市場(chǎng)需求。目前,智原的MPEG4/JPEG Codec所支持的格式為Simple Profile Version 3.1,其包含XviD編碼和一部分的DivX編碼。
FIE8100 SoC平臺包含了非常豐富的功能模塊以支持多種應用,包括:FA526(32Bit RISC CPU), MPEG-4/JPEG 編解碼引擎, USB2.0 設備控制器, USB2.0 PHY(物理層), LCD 控制器, DMA 控制器,TV Encoder(解碼器),Capture(視頻捕捉器)和AMBA總線(xiàn)架構。為了讓用戶(hù)能將自己的IP或功能模塊順利的運行在FA526上,智原將AHB總線(xiàn)從CPU的引線(xiàn)中拉出,以及搭配各類(lèi)接口和片外芯片,開(kāi)發(fā)制作了一個(gè)基于FIE8100 SoC的仿真平臺: MediaCreative!。如圖3所示。
基于FA526的Linux安裝
開(kāi)發(fā)系統之介紹
所需主開(kāi)發(fā)環(huán)境
開(kāi)發(fā)Linux的主系統開(kāi)發(fā)環(huán)境需要有:
硬件:
* 兼容Intel x86的PC
* 標準16550 UART接口
軟件:
* Linux操作系統 (RedHat 7.3~8.0或更高版本)
* FA526-Linux 軟件包
通用平臺系統所需的器件:
- MediaCreative! (含FIE8100/FWAB326AA芯片) x 1
- 64MB SDRAM x 1
- 32MB Flash x 1
FA526的Linux安裝
介紹
本章節將介紹FA526-Linux的架構和實(shí)現安裝。
FA526-Linux可以將Linux-2.4.19軟件環(huán)境在Faraday FA526處理器和外設IP上安裝實(shí)現。
FA526-Linux軟件包
FA526-Linux軟件包以“arm-linux-20050429.tgz”打包文件遞交。(此程序發(fā)布于A(yíng)pril 29, 2005)
表1 安裝Linux所需的硬盤(pán)空間
安裝FA526-Linux軟件包,流程如下:
1. 拷貝文件 arm-linux-20050429.tgz 至目錄 /usr/src.
# cp arm-linux-20050429.tgz /usr/src
2. 解包文件"arm-linux-20050429.tgz".
# cd /usr/src
# tar zxvf arm-linux-20050429.tgz
3. 安裝Toolchain (GCC-2.95.3, Binutils-2.11.2, GLIBC-2.2.3) 至目錄/usr/local.
# cp /usr/src/arm-linux/toolchain/arm-linux-toolchain.tgz /usr/local/
# cd /usr/local
# tar zxvf arm-linux-toolchain.tgz
# rm -f arm-linux-toolchain.tgz
此步驟將在目錄 /usr/local/arm解壓GCC-2.95.3, Binutils-2.11.2 和 GLIBC-2.2.3的輸出文件.
4. 添加 GCC 執行路徑至shell環(huán)境。
可執行以下命令來(lái)添加路徑:
# export PATH=$PATH:/usr/local/arm/2.95.3/bin
在完成了以上四個(gè)安裝步驟后,你就可以繼續安裝FA526 Linux 內核或做應用了。
FA526-Linux目錄結構
假設主目錄是 /usr/src/arm-linux/。當你在/usr/src/arm-linux/下解壓打包文件,如:arm-linux20050429.tgz,系統會(huì )自動(dòng)生成一組目錄,如圖4。
在表2中,列出了這些源目錄的定義。用戶(hù)的應用程序包含在目錄/usr/src/arm-linux/user/下,而客戶(hù)定制的RAM-Disk則包含在目錄/usr/src/arm-linux/images/下。
表2 FA526 軟件包目錄
FA526-Linux的構建和開(kāi)發(fā)
本節將描述在嵌入式系統里配置和構建FA526-Linux內核。
內核目錄樹(shù) (Kernel Tree)
FA526的Linux內核子目錄在以下的目錄里:
/usr/src/arm-linux/arm-linux-2.4.19/
FA526-Linux目錄的結構和標準Linux內核一樣,版本是2.4.19. 以下表格列出了Linux內核子目錄的內容。
(為書(shū)寫(xiě)簡(jiǎn)略,<TOPDIR> 代表 /usr/src/arm-linux/arm-linux-2.4.19)
表3內核子目錄內容。
圖4 FA526 軟件包目錄樹(shù)
圖5 FA526-Linux xconfig介面
構建內核
本節描述了如何為FA526架構生成內核的映像
配置內核
構建內核的第一步是配置內核。配置文件在目錄<TOPDIR>/.config
通常,用戶(hù)可能為了一些如下的因素要求重新配置FA526-Linux:
定制處理器和板子的功能:修改UART時(shí)鐘,系統時(shí)鐘等。
定制硬件設備:添加或刪除某些特殊設備。
定制內核功能:添加或刪除一個(gè)內核的功能,如網(wǎng)絡(luò )支持。
圖6 FA526-Linux menuconfig介面 圖7 配置RAM-Disk的大小
Linux內核配置為配置這些可選項目提供了兩種常用方式:
轉換目錄至<TOPDIR>
1. 使用菜單顯示來(lái)選擇項目:
# make menuconfig
2. 使用GUI顯示來(lái)選擇項目:
# make xconfig
在圖5里,顯示了針對FA526和CPE開(kāi)發(fā)板的FA526-Linux的xconfig 介面。
在圖6里顯示了針對FA526和CPE開(kāi)發(fā)板的FA526-Linux的menuconfig介面
FA526系統中的主要選項有以下幾種:
(CPE) ARM system type
默認值選中CPE開(kāi)發(fā)板來(lái)支持Faraday CPE(Common Platform Environment)。
[*] Support FA526 processor
設置FA526系列處理器選項來(lái)支持FA526 CPU.
(FIE8100) Platform environment
選擇平臺設定:A320,FIE8100, FIE7000
(44000000) System clock
FIE8100的默認值是44MHz。開(kāi)發(fā)人員必須根據實(shí)際的電路板設定來(lái)做調整。
(22118400) UART clock
FIE8100的UART時(shí)鐘是22.184MHz開(kāi)發(fā)人員可根據實(shí)際的電路板設定來(lái)設置UART時(shí)鐘頻率。
Making內核
如果是第一次make Linux內核,你可以清除所有目標文件,并重新創(chuàng )建從屬文件(dependency)。如果要修改內核的配置,則需要調用“make dep”。操作步驟如下:
# make clean
# make dep
FA526-Linux 提供了內核腳本文件(shell-script) “mkbootp.sh”, 這可以使Make內核更容易。
# ./mkbootp.sh
此操作可創(chuàng )建名為bootpImage的最終內核映像文件(kernel image)和名為vmlinux 的內核ELF文件。以下操作是修改mkbootp.sh的一個(gè)例子:
1 使用定制的ram-disk: 為你的特殊規格的ramdisk修改“make bootpImage INITRD=<your ramdisk>”??尚薷摹癉efault RAM disk size”來(lái)滿(mǎn)足ramdisk的大小(見(jiàn)圖7). 可在“Block devices”配置界面里通過(guò)“make xconfig”來(lái)設置。
2 復制輸出映像到特定目錄: 在mkbootp.sh檔案上修改這一行“cp <source> <target>”以符合你的需求。
Mkbootp.sh的內容是:
“make bootpimage INITRD =/usr/src/arm-linux/images/ramdisk.gz”
“cp arch/arm/boot/bootpImage /tftpboot/mbootpImage”
建立ARMBOOT
FA526-Linux使用ARMBOOT來(lái)裝載操作系統。
配置ARMBOOT
FA526的ARMBOOT使用一個(gè)名為“faraday.h”配置文件來(lái)配置各種不同的硬件環(huán)境。此文件被放在 /usr/src/arm-linux/armboot-1.1.0/faraday.h。其可修改的內容和值包括(通常不需要改動(dòng)):
修改系統時(shí)鐘。對于MediaCreative!平臺,它的默認值是44MHz.
修改UART時(shí)鐘。對于MediaCreative!平臺,應是22.1184MHz.
修改Flash塊號。對于MediaCreative!平臺,Flash的塊號是1。
Marking Armboot
一旦你已經(jīng)修改了MAC和IP,就可以通過(guò)以下的命令來(lái)建立ARMBOOT:
# cd /usr/src/arm-linux/armboot-1.1.0
# make
系統會(huì )在目錄里自動(dòng)生成"armboot.bin"文件。你應該根據這個(gè)指令將armboot燒入到FIE8100的Flash器件里,并且編寫(xiě)特定鏡像文件armboot.bin至Flash地址: 0x80400000.
FA526-Linux操作系統裝載工具(OS Loader)-ARMBOOT
作為L(cháng)inux業(yè)界里最著(zhù)名的OS Loader,ARMBOOT可以從終端協(xié)議(如:Kermit)來(lái)裝載鏡像文件和啟動(dòng)Linux內核.它也可以提供Flash的使用方法和以太網(wǎng)TFTP的傳輸功能。
圖8 設置tftp 服務(wù)器
運行ARMBOOT
FA526-Linux軟件包提供的ARMBOOT代碼可執行以下任務(wù):
Flash的編程
通過(guò)UART或以太網(wǎng)傳輸數據至PC
裝載或分配Linux內核
可從閃存(Flash)里或通過(guò)ICE來(lái)運行ARMBOOT
經(jīng)由ICE運行ARMBOOT
可通過(guò)以下步驟:
1. 通過(guò)JTAG ICE連接FA526目標器和PC.
2. 打開(kāi)AXD調試器,然后裝載armboot.bin到內存地址為0x0.
3. 設置指針到0x0,然后運行。
ARMBOOT 環(huán)境變量
ARMBOOT維持著(zhù)一批用于各種功能的環(huán)境變量??赏ㄟ^(guò)以下命令來(lái)顯示它們:
CPE> printenv
可通過(guò)命令“setenv name value”來(lái)設置環(huán)境變量,這里的“name”是環(huán)境變量名,“value”是你想設定的值。具體變量見(jiàn)表4。
表4 環(huán)境變量的描述
ARMBOOT命令之參考
在表5里,是ARMBOOT里最常用的幾個(gè)命令。也可在A(yíng)RMBOOT的終端下鍵入"help"來(lái)顯示這些命令。
表5 ARMBOOT 命令集
通過(guò)ARMBOOT啟動(dòng)FA526-Linux
在開(kāi)發(fā)階段的許多部分里,開(kāi)發(fā)人員必須要做前期規劃來(lái)修改或下載代碼直到得到想要的結果。在這樣的情況下,需要armboot來(lái)下載和運行代碼。具體步驟如下:
1.在Linux 主機上設置tftp服務(wù)器,并設置 /etc/xinetd.d/tftp. 如圖8所示。
2. 在此狀態(tài)下使用Linux making shell (mkbootp.sh)編譯代碼,并生成Linux代碼至目錄 /tftpboot. 要運行Linux代碼, 需按以下步驟執行:
* 重啟 FIE8100 開(kāi)發(fā)板(MediaCreative!).
* 選擇 "90) GO ARMBOOT".
* 確認Linux-Host和FIE8100的IP地址是正確的, (printenv), 如圖9所示.
* 輸入命令:tftp 0x2000000 mbootpImage, 以下載代碼,如圖10所示.
* 通過(guò)命令“go 0x2000000“啟動(dòng)Linux,將出現Linux 啟動(dòng)的信息,如圖11所示。
Linux的使用:
在完成以上的操作后,armboot就燒入在MediaCreative!開(kāi)發(fā)板上的Flash里了。要通過(guò)armboot來(lái)運行Linux操作系統對FIE8100平臺進(jìn)行開(kāi)發(fā)驗證,可執行以下操作:
* 開(kāi)啟MediaCreative!開(kāi)發(fā)板,運行“MPEG4 Burnin",會(huì )出現Linux運行選項,如圖12所示:
* 鍵入“空格”鍵,進(jìn)入Linux操作系統,如圖13所示。
圖9 armboot的環(huán)境設置
圖10 從armboot下載Linux代碼
圖11 Linux 啟動(dòng)信息
圖12 Linux 啟動(dòng)選項界面
圖13 Linux 操作環(huán)境
結語(yǔ)
我們利用智原科技所提供的FIE8100的開(kāi)發(fā)板上移植了Linux 2.4.19的操作系統。智原科技的ARM CPU在開(kāi)發(fā)上與ARM的開(kāi)發(fā)工具兼容,使移植的過(guò)程十分順利。FIE8100的外設又很完整,不管是UART口或是乙太網(wǎng)口都能利用。我們還會(huì )利用這個(gè)開(kāi)發(fā)板實(shí)現MPEG4編解碼,并將編碼后的壓縮檔存在SD卡上,再將SD卡上的壓縮檔解碼播放到LCD屏?!?/P>
評論