文章目录

  • 前言
  • 一、创建FSBL
  • 二、创建设备树
    • 使用SDK创建设备树
    • 定制设备树
  • 三、编译U-BOOT
  • 四、制作BOOT.BIN文件
  • 五、编译内核源码
  • 六、编译 rootfs
  • 七、格式化内存卡
  • 八、加载系统到内存卡

前言

上一节我们创建了我们的主工程文件,并且生成了bit-stream,加载了Xilinx SDK,接下来我们在SDK创建FSBL文件以及设备树。
FSBL是 ZYNQ 第一启动引导加载代码,它的主要任务就是初始化 DDR,并将用户代码(例如 U-Boot、bit 文件或者是 SDK裸机代码)从存储设备中拷贝到 DDR 中运行。

一、创建FSBL

按照如下步骤:
·Open Vivado
·Export Hardware & Bitstream
·Launch Xilinx SDK

打开 Xilinx SDK后按照如下步骤创建FSBL:

Navigate to File > New > Application Project
Give the project a new name, like FSBL
Click Next
Select Zynq FSBL and click Finish

配置完成后,等待FSBL编译完成。生成的fsbl.elf文件在./fsbl/debug中。

二、创建设备树

使用SDK创建设备树

工程导入SDK后,需要使用Xilinx Device Tree Tool 去建立设备树,请检查这个工具的版本。
配置设备数编译环境

mkdir device-tree-xlnx
cd device-tree-xlnx
sudo apt-get install device-tree-compiler
git clone https://github.com/Xilinx/device-tree-xlnx/archive/xilinx-v2018.3.tar.gz
tar -zxvf xilinx-v2018.3.tar.gz

在SDK中添加设备树资源文件

XIlinx Tools>Repositories
Add a global repository
Navigate to where you cloned the Xilinx/device-tree-xlnx

创建设备树

Select File>New>Board Support Package
Create a name for your project, e.g. device_tree_bsp_0
Select device_tree in the Board Support Package OS menu
Click Finish

在设备树的工程文件中使用下面的方式创建设备树:

dtc -I dts -O dtb -o devicetree.dtb system-top.dts

可以使用如下方式把设备树文件转换成人可读的文件

dtc -I dtb -O dts -o devicetree.dts devicetree.dtb

定制设备树

1、修改system-top.dts文件,主要修改了 bootargs 属性、添加了 model 属性、网口 0 的 MAC 地址以及给 qspi 进行了分区操作。
2、
以下三个文件是之后需要的:

三、编译U-BOOT

1、把设备树文件复制到U-BOOT源码中;
将前面生成的设备树文件

pcw.dtsi、pl.dtsi、system-top.dts 、zynq-7000.dtsi

四个文件拷贝到 U-Boot 源码目录下的 arch/arm/dts 目录下
2、修改U-BOOT的Makefile 文件,arch/arm/dts/Makefile 文件中,找到dtb-$(CONFIG_ARCH_ZYNQ)这里,将 system-top.dtb(.dts 编译之后得到的就是.dtb 文件)添加上去,这样当 CONFIG_ARCH_ZYNQ 宏被选中的时候,system-top.dts 才会被编译进去。
3、修改UBOOT的配置文件,zynq-common.h 和 zynq_zc70x.h 都在 include/configs 目录下
zynq_zc70x.h文件:CONFIG_ZYNQ_I2C0 和 CONFIG_ZYNQ_EEPROM 宏定义给去掉
zynq-common.h 文件:

CONFIG_CPU_FREQ_HZ改为766666687
CONFIG_SF_DEFAULT_SPEED改为50000000
CONFIG_ENV_SIZE(环境变量大小),由(128 << 10)修改为 0x20000
CONFIG_ENV_OFFSET(环境变量存储位置偏移量),由 0xE0000 修改为 0x500000

4、defconfig 配置
在源码目录下执行如下指令:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zynq_zc702_defconfig

“ARCH=arm”指定了 u-boot 运行的机器架构,“CROSS_COMPILE=arm-linux-gnueabihf-”指定了交叉编译工具的前缀,交叉编译工具我们使用的是 xilinx 官方提供的,在我们安装 petalinux 的时候也安装了,在 petalinux 安装目录下的 tools/linux-i386 目录
5、menuconfig 图形化配置
在 U-Boot 源码目录下,执行下面这条命令进入到 menuconfig 图形化配置界面

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
配置如下:
Boot media --->[*] Support for booting from SD/EMMC
SPL / TPL --->[ ] Enable SPL
Command line interface --->
Memory commands --->[ ] eeprom - EEPROM subsystem
Device access commands --->[ ] i2c
Device Tree Control --->(system-top) Default Device Tree for DT control
// 将设备树设置为 system-top(也就是 system-top.dts)
Device Drivers --->
Serial drivers --->
[ ] Enable an early debug UART for debugging

配置完成之后保存退出,执行下面这条命进行编译:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j10

编译完成后会在当前文件夹下生产u-boot.bin文件。
如果不能识别编译器,则执行:

source /opt/pkg/petalinux/settings.sh

四、制作BOOT.BIN文件

需要的三个文件: fsbl.elf, ocpoc_rev1.bit and uboot.bin。
1、进入XSDK工作环境
2、选择 Xilinx Tools -> Create Boot Image
3、设置两个文件的输出路径,路径中的“bootimage”是我们在 FSBL 目录下新建的文件夹。红色方框中的 BIF 是 Boot Image 的配置文件,BIN 是启动文件。
4、首先添加的是 FSBL,在 Partion type 一栏默认的文件类型为 bootloader,然后指定 FSBL.elf 所在的文件路径。
5、再次点击“Add”按钮,添加 FPGA 配置文件,Partion type 一栏的文件类型变成了 datafile,BIT 文件必须跟在 FSBL 后面,文件添加的顺序不能弄错。
6、然后点击“Add”按钮,添加u-boot.bin软件。
7 、点击 Create Image生成 boot.bin文件到指定的文件夹.

五、编译内核源码

1、把设备树文件复制到内核源码中
这里我们直接将前面 U-Boot 源码 arch/arm/dts 目录下的那四个设备树文件(pl.dtsi、pcw.dtsi、system-top.dts 和 zynq-7000.dtsi)直接拷贝到内核源码目录下的arch/arm/boot/dts 目录中,不用进行修改。
2、修改makefile文件
同样我们也需要修改 arch/arm/boot/dts 目录下的 Makefile 文件,将设备树system-top.dts 添加上去
3、defconfig 配置
在内核源码目录下执行下面这条命令对内核进行 defconfig 配置:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- xilinx_zynq_defconfig

4、defconfig 配置
这里我们暂时就不进行配置,以后有需要的时候再配,先保持默认!
5、编译内核

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage -j10

编译完成之后会在 arch/arm/boot/目录下生成一个名为 zImage 的内核镜像文件,后面我们在用。
6、编译设备树
内核与 u-boot 不同的是,U-Boot 的设备树默认是与内核一起编译的,并且产生的 dtb 文件已经与 U-Boot 镜像文件集成在一起了;在内核里边我们需要单独编译出设备树的 dtb 文件,前面已经将我们所需要的设备树文件拷贝到内核的 arch/arm/boot/dts 目录下了,接下来执行这条命令编译 system-top.dtb 文件:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- system-top.dtb -j10

编译成功之后会在 arch/arm/boot/dts 目录下生成 system-top.dtb 文件。

六、编译 rootfs

1、新建一个 petalinux 工程
根文件系统我们直接使用 petalinux 进行编译即可,首先进入 petalinux 的安装目录,使用 petalinux-create 命令新建一个 petalinux 工程,如下:

petalinux-create --type project --template zynq --name ALIENTEK-ZYNQ

2、导入 hdf 硬件描述符

cd ALIENTEK-ZYNQ
petalinux-config --get-hw-description /home/zynq/hdf/Navigator_7010.sdk

在弹出来的配置界面中,我们不用进行任何配置,直接保存退出即可!等待它配置完成。完成之后产生的根文件系统压缩包在 images/linux 目录下。
因为我们要使用 SD 卡启动,并且 SD 卡会有一个 EXT4 格式的分区专门存放根文件系统,所以我们要使用压缩格式的根文件系统,例如 rootfs.tar.gz 或 rootfs.tar.bz2。
3、编译根文件系统

petalinux-build -c rootfs

七、格式化内存卡

1、先安装格式化管理软件:

sudo apt-get install gparted
sudo gparted

2、选择SD卡
在右上角选择正确的SD卡,不要选错。
3、删除所有分区
可以直接选择,右键删除. 有时候可能需要Unmount那个分区才能删除。
4、创建BOOT分区
创建第一个分区设定为如下属性:

 New size(MiB): '100', File system: 'fat32', and Label: 'boot'.

5、创建EXT4分区
创建文件系统分区设定为如下属性:

 Free space preceding(MiB): '0', Free space following(MiB): '0', File system: 'ext4', and Label: 'rootFs'.

6、点击OK格式化内存卡完成
7、在加载文件之前,最好先重新插拔一次。

八、加载系统到内存卡

系统共分为如下几个文件

1、zImage(内核镜像,内核源码目录 arch/arm/boot/zImage)
2、system-top.dtb(内核设备树 dtb 文件,内核源码目录 arch/arm/boot/dts/system-top.dtb)
3、design_navigator_7010_wrapper.bit(pl 端 bitstream 文件,/home/zynq/hdf/Navigator_7010.sdk/design_navigator_7010_wrapper.bit)。
4、BOOT.BIN。

ZYNQ飞控的设计-飞控操作系统构建相关推荐

  1. Linux操作系统, 构建自己的内核-陈屹-专题视频课程

    Linux操作系统, 构建自己的内核-237人已学习 课程介绍         本课程的目的是遵从人的认知方式,由感性到理性,由小到大,由浅入深,从一个最简单的引导扇区开始,逐步增添代码,最后形成一个 ...

  2. TVM设计与构架构建

    TVM设计与构架构建 本文档适用于希望了解TVM体系结构和/或在项目上进行积极开发的开发人员.该页面的组织如下: • 实例编译流程Example Compilation Flow,描述TVM把一个模型 ...

  3. zynq中mgtx应用_【干货分享】ZYNQ常用外设设计 (上)

    2. IO的电压为1.8V. 3. 默认使用的参数为:115200波特率以及其他对应参数,见图 21. Step2: 在Vivado的Block Design中配置ZYNQ7 Processing S ...

  4. 计算机网络题简单建设校园网络,计算机网络课程设计—校园网络构建方案设计和实现.doc...

    计算机网络课程设计-校园网络构建方案设计和实现 <计算机网络>课程设计报告 题目:校园网络构建方案设计和实现 组别/组长: 专 业: 计算机网络技术 院 系: 信息工程学院 信息工程学院制 ...

  5. 计算机网络题简单建设校园网络,计算机网络课程设计校园网络构建方案设计和实现.doc...

    计算机网络课程设计校园网络构建方案设计和实现 <计算机网络>课程设计报告 题目:校园网络构建方案设计和实现 组别/组长: 专 业: 计算机网络技术 院 系: 信息工程学院 信息工程学院制目 ...

  6. 可以自己设计飞控(从硬件到软件)

    我也是看到一个群里的一个人发的图有感,可能并没有那么难.(后来发现这个人是弄的固定翼飞控) 之前无名的博文里也看到有的人自己设计 当然也有学生自己弄的,他这可能是弄的那种小型四轴.这种我觉得一方面应该 ...

  7. 飞控计算机功能硬件设计,飞控计算机测试设备的设计与实现论文

    飞控计算机测试设备的设计与实现论文 为了对飞控计算机进行全面准确测试,本文提出了一种飞控计算机测试设备的软硬件设计方案.硬件部分主要是设计工控机中的两块板卡,产生测试系统需要的信号.软件部分以Wind ...

  8. 基于ZYNQ移动机器人控制器设计(3)控制器硬件方案选型

    本章介绍控制器硬件的方案选型,首先回答为什么选择 ZYNQ 平台来进行移动机器 人控制器方案设计,分析 ZYNQ 的架构与我们提出的控制器设计方案有哪些与生俱来的 契合.接着花了较多的篇幅来阐释锁定 ...

  9. Zynq LTE基站设计与实现

    采用赛灵思Zynq-7000 All Programmalbe SoC能让毫微微.微微以及其他小型蜂窝基站设计的集成度.灵活性和低功耗达到全新的高度. 小型蜂窝属于低功率无线基站,运行于授权频谱范围内 ...

最新文章

  1. linux 自定义外壳,管道在自定义的linux外壳
  2. html <link>标签
  3. Android与Javascript交互示例(二)
  4. 《C专家编程》第三章——分析C语言的声明
  5. 1000种对Java的响应没有死
  6. 田渊栋团队新作:为什么非对比自监督学习效果好?
  7. 【数据结构笔记】Leetcode买卖股票的最佳时机 系列总结
  8. android webview 多次加载,关于WebView 重定向行为导致的多次加载的问题
  9. 阿里、腾讯、华为人力资源体系
  10. 越南无线网dns服务器设置,越南dns 服务器地址
  11. 百度杀毒,360安全卫士的那些私下的功夫 。
  12. 【Javascript】length属性
  13. Win10下HyperV Centos如何剪贴
  14. 一万块的iPhone X来了,你看好苹果的黑科技吗?
  15. 该怎么回答面试官问“你有什么优缺点?”
  16. 相似度论文系列-1:入门方法Towards a Unified Multi-Dimensional Evaluator for Text Generation
  17. Fiddler对手机或模拟器的网络请求抓包
  18. SqlServer高效汉字转拼音的存储过程
  19. Preisach模型
  20. (转)日语自我介绍大全

热门文章

  1. echart基本使用
  2. Strassen矩阵乘法(C++)
  3. 如何在SpringBootOAuth服务器中实现双因素身份验证?第一部分:配置
  4. 三星手机电池循环清零代码_巅峰对决申真谞离奇“滑标”三星杯决赛首局柯洁轻松告捷...
  5. C#获取网页的HTML码、下载网站图片
  6. 微信小程序客服消息(带流程图)
  7. 数据结构与算法看这篇就够了
  8. 同一台服务器同一个IP都是80端口发布多个网站
  9. 【MFC】MFC消息映射
  10. 3DS MAX 2022下载及安装教程 3dmax软件下载安装