zedboard运行linaro系统

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

内容简介: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.hsdboot 数据,让我们的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


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

查看所有标签

猜你喜欢:

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

Objective-C编程

Objective-C编程

[美] Aaron Hillegass / 夏伟频、李骏 / 华中科技大学出版社 / 2012-9-25 / 58.00元

《Objective-C编程》讲述Objective-C编程语言和基本的iOS/Mac开发知识。作者首先从基本的编程概念讲起(变量、条件语句、循环结构等),接着用浅显易懂的语言讲解Objective-C和Foundation的知识,包括Objective-C的基本语法、 Foundation常用类 、内存管理、常用设计模式等,最后手把手教读者编写完整的、基于事件驱动的iOS/Mac应用。作者还穿插......一起来看看 《Objective-C编程》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具