启动流程分析及各环节文件生成流程(ZedBoard为例)

启动流程分析及各环节文件生成流程(ZedBoard为例),第1张

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一下, 否则修改后的源是不生效的。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2575499.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-07
下一篇 2022-08-07

发表评论

登录后才能评论

评论列表(0条)

保存