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