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="//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="//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一下, 否则修改后的源是不生效的。
评论
查看更多