zedboard运行linaro系统

栏目: 编程工具 · 发布时间: 9年前

内容简介:zedboard运行linaro系统

1. Introduction

FPGA入门教程。

本文只讲如果在zedboard上运行linaro,不深讲原理,只讲操作。

2. 环境

2.1 硬件环境

zedboard

using the Xilinx Zynq®-7000 All Programmable SoC.

AES-Z7EV-7Z020-G

REV-D版本(!!始终没有弄好图形界面!!)

2.2 软件环境

Vivado 2016.4

Xilinx SDK 2016.4

Debian 9 x86_64

交叉编译器用vivado自带的arm-xilinx-linux-gnueabi-

3. 系统启动流程

zedboard运行linaro系统

(图片来自官方手册 Zynq-7000 All Programmable SoC: Embedded Design Tutorial – A Hands-On Guide to Effective Embedded System Design (UG1165) )

电源打开后,CPU0会执行已经写死在板子上BootROM中的程序,程序会根据 JP7-JP11 的设定状态来更新状态寄存器。

zedboard运行linaro系统

如上的状态表示从SD卡启动。还有NOR Flash、JTAG 等方式。

  1. 如果是SD卡模式启动,那么它会读取sd卡的第一分区,寻找 boot.bin (不分大小写)文件。该文件包含了FSBL( First Stage Boot Loader)程序,它接管CPU。CPU0会将该程序复制到内部256KB的片上内存中,并执行FSBL,进入下一个阶段。
  2. FSBL初始化DDR内存,GPIO等,接下来载入放在 boot.bin 中的位元流(bitstream),用它来对可编程逻辑区块(Programmable Logic, PL)进行设定,板子的蓝灯将亮起来(如果在制作 boot.bin 文件时没有添加bitstream,那么蓝灯不会亮,PL也没有设定,只是在跑arm)。
  3. CPU将交给 boot.bin 中的下一部分接管,可以是用户自己的程序(Note.1),或者是SSBL(Second Stage Boot Loader)。
  4. 如果SSBL是uboot,它可以做一些准备工作之后启动 linux 内核(或者用户程序),可以再继续引导启动sd卡第二个分区的系统,比如linaro-ubuntu。

几种开发模式:

开发模式 解释
纯PL开发
纯PS开发 典型的demo helloword
PS+PL(无OS) 没有操作系统,生成的elf文件包括了硬件配置信息(xmp)和裸跑的C程序。包含bit文件
PS+PL(含OS) 包含boot.bin(boot.elf, your_bitstream.bit, fsbl.elf),devicetree.dtb,linux内核镜像,文件系统

本文介绍的构建系统,属于上述表格中的最后一种。

我们需要的东西有:Boot.bin,devicetree.dtb, uboot,rootfs。

rootfs(文件系统),我们有两种选择:

  • ramdisk: 非常小,几乎没什么功能,运行在ram里,任何修改在重启之后就会丢失
  • 完整的Linux文件系统,比如Linaro Ubuntu

4. 准备SD卡

分成两个主分区

  • FAT32格式,>= 50MB
  • ext4格式,>= 你要安装的linux系统的大小

5. 生成BOOT.BIN

boot.bin文件包括:

包含的文件 解释
FSBL
bitstream 配置PL端的程序,可选,如果需要使用显示器输出,则必须。
SSBL 这里使用uboot

5.1 FSBL制作

打开vivado 2016.4 ,新建项目,选择zedboard zynq evaluation and development Kit。(全文没有重点指出的操作和设置,均为default即可)

先新建一个Block Design(左边Project Manager–》IP integrator–》create Block design),在Diagram视图中add IP。输入zynq选择唯一的 zynq7 process system,并点击上方的“Run Block automation”,

双击生成的:

zedboard运行linaro系统

弹出Re-customize IP窗口,上图红色圈中是我们需要取消的引脚。

从Clock Configuration中展开PL Fabric Clocks,取消FCLK_CLK0,确认之后,会发现上图中的FCLK_CLK0消失。

zedboard运行linaro系统

对于其他,以取消TTC为例,从Zynq Block Design中点击TTC,会自动跳转到对应的详细设计部分,取消勾选,再切换回zynq block design,取消掉其他红框里的内容,点击OK完成。

可以右键–》regenerate layout,自动调整下布局,则会变成下图的样子:

zedboard运行linaro系统

回到Block Design的sources视图,在System上右键选择Create HDL Wrapper。完成后点击左边Flow Navigator中的Generate BitStream。等待Vivado完成综合、实现、生成bitstream,右上角有进度,时间比较长。

点击File->Export->ExportHardware,勾选include bitstream,确认后点击File->Launch SDK,系统会自动开启SDK软件

在SDK中点击菜单File->New->Application Project。项目名fsbl(可以更改),OS平台standalone,语言为C,点击Next,Templates选项选择ZynqFSBL。

点击Finish,SDK会自动编译FSBL代码,并在工程Debug下生成fsbl.elf目标文件。Project Explorer –》binaries–》fsbl.elf。

5.2 编译Uboot

官方github地址

建议直接从release里选择版本,此处选择了xilinx-v2016.4。下载,解压出来。

设置环境变量,实际上新版本的vivado已经包含了xilinx-arm toolchain,因此只需要使用vivado目录下的环境变量设置脚本,即可使用 arm-xilinx-* 工具

# 你的vivado地址
source ~/d/fpga/Vivado/2016.4/settings64.sh
export CROSS_COMPILE=arm-xilinx-linux-gnueabi-

修改 include/configs/zynq_common.h 中 sdboot 数据,让我们的u-boot在启动的时候不会试图去加载ramdisk image(这一步可选):

"sdboot=if mmcinfo; then " \
  "run uenvboot; "\
  "echo Copying Linuxfrom SD to RAM... && " \
  "load mmc 0${kernel_load_address} ${kernel_image} && " \
  "load mmc 0${devicetree_load_address} ${devicetree_image} && " \
  "bootm${kernel_load_address} - ${devicetree_load_address} ; " \

生成zedboard配置文件并编译uboot

make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi-  zynq_zed_config
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi-

将得到的可执行文件 u-boot 修改为elf格式

mv u-boot u-boot.elf

5.3 生成BOOT.BIN

打开xilinx SDK,菜单Xilinx Tools–》Create Boot Image。

设置BIF文件路径(BIF文件用于指定当前boot.bin制作过程中用到的三个文件的路径,相当于一个项目配置文件),然后在下方的配置里按照 顺序 添加如下文件

  1. FSBL文件,默认在 你的项目路径/项目名.sdk/fsbl/Debug/fsbl.elf ,添加后,会自动识别分区格式为 bootloader ,
  2. bitstream文件,从vivado,File–》Export–》export bitstream file,保存到你想保存的位置,然后同FSBL文件一样,添加上,会自动识别分区格式为datafile。
  3. uboot文件,就是上一步编译出的 u-boot.elf 文件,同样添加上。

点击Create Image创建boot.bin,成功的话会在输出路径生成相应文件。

在sdk 底部的console会有个错误输出 awk: symbol lookup error: awk: undefined symbol: mpfr_z_sub 但是文件正常生成了,而且运行没有问题。不清楚这个错误有什么问题。

6. 编译内核和设备树

6.1 编译内核

从 xilinx 提供的官方linux kernel 的release下载,不要 git clone (或者clone时添加 --depth=1 来限制拉取的commit记录),否则文件夹会很大。

解压出来,配置编译环境、内核参数,并编译内核:

export ARCH=arm
export CROSS_COMPILE=arm-xilinx-linux-gnueabi-
# 安装uboot工具
sudo apt-get install u-boot-tools
make xilinx_zynq_defconfig
make uImage LOADADDR=0x00008000

注意:如果你的系统比较新,那么openssl库应该是1.1,由于openssl库升级的缘故,在编译现有的xilinx linux kernel时,会出现:

error: dereferencing pointer to incomplete type ‘RSA {aka struct rsa_st}’
  if (BN_num_bits(key->e) > 64)

的错误。现在xilinx官方邮件列表正在讨论这个问题。截止2017.4.7,尚未merge补丁。

所以需要将你本地的openssl库降级成1.0:

sudo apt-get install libssl1.0-dev

会自动卸载当前最新的版本1.1。

6.2 编译devicetree

设备树devicetree, 也称作Open Firmware(OF)或FlattenedDevice Tree(FDT)。本质上是一个字节码格式的数据结构,其中包含信息在内核启动时非常有用。bootloader在跳到内核入口点之前将这一块数据复制到RAM中的已知地址。

修改 arch/arm/boot/dts/zynq-zed.dts 文件:

chosen {
	# 默认bootargs是空的字符串,填充如下数据
	bootargs ="console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait devtmpfs.mount=0";
	stdout-path = "serial0:115200n8";
};

表示root目录在sd卡的第二个分区。

cd 到 arch/arm/boot/dts/ ,执行:

~/d/fpga/make_boot/linux-xlnx-xilinx-v2016.4/scripts/dtc/dtc –I dts –O dtb -o  ../../../devicetree.dtb ./zynq-zed.dts

dtc是xilinx官方kernel里带的一个工具, -I dts 表示输入格式是dtc, -O dtb 表示输出格式是dtb, -o 表示生成的dtb放哪里,最后是输入文件的位置。注意一定要先cd到dts文件所在目录,因为它引用了当前目录下别的文件。

7. linaro ubuntu

从 linaro发行版官网 下载ubuntu images developer版本或者其他版本,解压出下载的压缩包(网上有些文章用的是老版本的包,系统在 binary/boot/filesystem.dir ),将加压出的内容拷贝到sd卡第二个分区。

cd binary
# 我的自动挂载点是/media/find/root
sudo rsync -a ./* /media/find/root/
# 卸载,一定要等待写入结束
sudo umount /media/find/root
sudo umount /media/find/boot

8. 启动

将sd卡插好,usb 连接到PC,打开zedboard开关,PC上打开命令行,使用minicom连接。

8.1 minicom设置

sudo minicom -s
# 选择serial port setup,并设置 串口设备为 ttyACM0
A -    Serial Device      : /dev/ttyACM0  
# 确认 bps之类如下,波特率选为115200 8N1(数据位8,奇偶校验无,停止位1),
 E -    Bps/Par/Bits       : 115200 8N1

配置完成后,可通过 sudo minicom 连接设备

8.2 启动root分区的linaro ubuntu 系统

由于之前我们已经修改了bootargs,因此这里可以直接通过 boot 命令启动。

9. REV-D板子无法显示图形界面

尚未解决

Reference

Zedboard上运行Linaro系统(二):生成BOOT.BIN

coldnew 的zybo-board 有关的文章

zedboard 官方文档

ZedBoard启动教程

REV-C的板子可以直接使用官网的开箱即用程序

zedboard–zynq开发和启动(三)

zynq设备树详解

linux设备树学习

【参赛手记1】REV.C和REV.D版本ZedBoard的微妙差别——使用EMIO的发现

rev.d boot from SD


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

The Algorithm Design Manual

The Algorithm Design Manual

Steven S Skiena / Springer / 2011-11-14 / GBP 55.07

....The most comprehensive guide to designing practical and efficient algorithms.... Written by a well-known algorithms researcher who received the IEEE Computer Science and Engineering Teaching Aw......一起来看看 《The Algorithm Design Manual》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

SHA 加密
SHA 加密

SHA 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具