1. ZYNQ的啟動(dòng)流程
Zynq7000就如同他的名字一樣,Zynq-7000 Extensible Processing Platform,是一個(gè)可擴(kuò)展處理平臺(tái),簡(jiǎn)單說(shuō)就是有個(gè)FPGA做外設(shè)的A9雙核處理器。
所以,它的啟動(dòng)流程自然也和FPGA完全不同,而與傳統(tǒng)的ARM處理器類似。
Zynq7000支持從多種設(shè)備啟動(dòng),包括JTAG,NAND,parallel NOR,Serial NOR (Quad-SPI),以及SD卡。按手冊(cè)說(shuō)明除了JTAG之外的啟動(dòng)方式均支持安全啟動(dòng),使用AES、SHA256加密后的啟動(dòng)代碼,(不過(guò)在勘誤里說(shuō)到,當(dāng)前硅片版本的無(wú)法正常使用secure configuration功能,所以俺就不介紹它鳥)。
還是按照時(shí)間順序來(lái)介紹下具體流程吧
1. 在器件上電運(yùn)行后,處理器自動(dòng)開始Stage-0 Boot,也就是執(zhí)行片內(nèi)BootROM中的代碼
2. BootROM會(huì)初始化CPU和一些外設(shè),以便讀取下一個(gè)啟動(dòng)階段所需的程序代碼,F(xiàn)SBL(First Stage Bootloader)。
不過(guò)這又有一個(gè)問(wèn)題了----之前說(shuō)到,Zynq支持多種啟動(dòng)設(shè)備,BootROM怎么知道從哪個(gè)啟動(dòng)設(shè)備里去加載FSBL?這就得靠幾個(gè)特殊的MIO引腳來(lái)選擇了,
BootROM會(huì)去讀取MIO[2..8],從而確定啟動(dòng)設(shè)備,將選定設(shè)備的頭192Kbyte內(nèi)容,也就是FSBL,復(fù)制到OCM(On Chip Memory)中,并將控制器交給FSBL。
3. FSBL啟動(dòng)時(shí)可以使用整塊256Kb的OCM,當(dāng)FSBL開始運(yùn)行后,器件就正式由咱自己控制了。Xilinx提供了一份FSBL代碼,如果沒什么特殊要求,可以直接使用。
按照手冊(cè)說(shuō)明,F(xiàn)SBL應(yīng)該完成以下幾件事。
1). 使用XPS提供的代碼,繼續(xù)初始化PS
2). 將bitstream寫入PL(配置FPGA),不過(guò)這一步也可以以后再做
3). 將接下來(lái)啟動(dòng)用的Second Stage Bootloader(SSBL,一般就是U-Boot一類的東西),或者裸奔程序,復(fù)制到內(nèi)存中
4). 跳到SSBL運(yùn)行去
4. 接下來(lái)的步驟就沒啥特別了,Uboot開始運(yùn)行,初始化好Linux啟動(dòng)環(huán)境,然后開始運(yùn)行Linux系統(tǒng)。
2. 啟動(dòng)時(shí)SD卡文件內(nèi)容
1. zImage、BOOT.BIN、devicetree_ramdisk.dtb、ramdisk8M.image.gz
2. zynq芯片上電初始化,進(jìn)入u-boot,會(huì)自動(dòng)加載devicetree、zImage和rootfs,然后啟動(dòng)Linux
3. BOOT、Devicetree和zImage,放到SD卡的第一個(gè)分區(qū)里(分區(qū)方式在,第一個(gè)區(qū)BOOT 50MB fat32格式,第二個(gè)區(qū)rootfs ext4格式)。
Linaro的rootfs在這里下載:
下載后,通過(guò)下面的命令解壓到SD卡的第二個(gè)分區(qū)里即可:
sudo tar --strip-components=3 -C /media/rootfs -xzpf linaro-precise-ubuntu-desktop-20120626-247.tar.gz binary/boot/filesystem.dir
3. SD卡文件內(nèi)容一(zImage)
詳細(xì)步驟:以下操作均在root用戶下進(jìn)行,官方參考網(wǎng)址的東西僅是“參考”的
1. 下載交叉編譯器
在ubuntu里下載arm-2010.09-62-arm-xilinxa9-linux-gnueabi.bin安裝文件,在網(wǎng)站https://code.google.com/p/zedboard-book-source/downloads/list上的
download里下載,放到/tools/中
2. 同步xilinx的linux kernel
mkdir /kernel
cd /kernel
git clone git://git.xilinx.com/(project name)
(project name) has 3:
linux-xlnx.gitLinux sources
u-boot-xlnx.gitU-boot sources
qemu-xarm.gitZynq-7000 AP SoC QEMU system model
然后就等著吧,總共1.3G的代碼,下載完畢后,
cd /kernel/
ls
有個(gè)新的文件夾linux-xlnx,這個(gè)就是zynq的linux kernel代碼了。。
如果你的網(wǎng)絡(luò)不支持git,可以用http代理服務(wù),先建立一個(gè) git-proxy.sh文件,在里面寫上:
#!/bin/sh
exec corkscrew $*
然后export一下,
bash> export GIT_PROXY_COMMAND="http://git-proxy.sh"
上面 上的方法,我的實(shí)際情況比較特殊,網(wǎng)絡(luò)服務(wù)器還要用戶名和密碼,怎么辦呢,稍微麻煩一點(diǎn):
將git-proxy.sh中的內(nèi)容修改成這樣滴:
#!/bin/sh
exec corkscrew 172.16.0.252 8080 $* /disk2data/authfile
然后再在git-proxy.sh同目錄下建立一個(gè)authfile文件,內(nèi)容為
用戶名:密碼
最后export GIT_PROXY_COMMAND="http://git-proxy.sh"
至此我的電腦也可以無(wú)憂無(wú)慮的git啦
3. 安裝交叉編譯器
cd //tools/
chmod 755 arm-2010.09-62-arm-xilinxa9-linux-gnueabi.bin
./ arm-2010.09-62-arm-xilinxa9-linux-gnueabi.bin
然后出現(xiàn)了安裝界面,選擇安裝的文件夾等等,可以自己設(shè),嫌麻煩就一路回車或者“yes”就行了。不過(guò)要記住安裝的目錄,這個(gè)一會(huì)兒編譯的時(shí)候要用到….
4. 設(shè)置交叉編譯環(huán)境
官網(wǎng) 上說(shuō)下載ia32-libs的庫(kù),
apt-get install ia32-libs
但是我的電腦因?yàn)橹芭渲眠^(guò)android的編譯環(huán)境,已經(jīng)安裝了,直接修改設(shè)置/etc/bash.bashrc文件就可以了:
在命令行上輸入gedit /etc/bash.bashrc,添加以下內(nèi)容:
export ARCH=arm
export CROSS_COMPILE=arm-xilinx-linux-gnueabi-
export PATH=/home/(…)/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin:$PATH
5. 編譯zynq的內(nèi)核
由于zedboard內(nèi)核還沒有被加入到zynq的內(nèi)核中,我們就先用zc702/770的板卡配置來(lái)測(cè)試一下環(huán)境吧:
cd //kernel/linux-2.6-xlnx
make ARCH=arm xilinx_zynq_defconfig -- 配置內(nèi)核
make ARCH=arm -- 編譯
大概需要幾分鐘吧,編譯就完成了,查看
cd /myPath/kernel/linux-xlnx/arch/arm/boot
里面的zImage就是剛剛生成的內(nèi)核
============ 如果git沒安裝且用apt-get install git時(shí)找不到服務(wù)器 ===============
修改 /etc/apt/source.list 來(lái)增加源的服務(wù)器來(lái)獲得軟件的列表
deb natty main restricted universe multiverse
deb natty-security main restricted universe multiverse
deb natty-updates main restricted universe multiverse
deb natty-backports main restricted universe multiverse
deb natty-proposed main restricted universe multiverse
deb-src natty main restricted universe multiverse
deb-src natty-security main restricted universe multiverse
deb-src natty-updates main restricted universe multiverse
deb-src natty-backports main restricted universe multiverse
deb-src natty-proposed main restricted universe multiverse
deb karmic main multiverse restricted universe
deb karmic-backports main multiverse restricted universe
deb karmic-proposed main multiverse restricted universe
deb karmic-security main multiverse restricted universe
deb karmic-updates main multiverse restricted universe
deb-src karmic main multiverse restricted universe
deb-src karmic-backports main multiverse restricted universe
deb-src karmic-proposed main multiverse restricted universe
deb-src karmic-security main multiverse restricted universe
deb-src karmic-updates main multiverse restricted universe
在修改完源列表后, 切記要 sudo apt-get update一下, 否則修改后的源是不生效的。
評(píng)論
查看更多