zynq+linux固化程序,MiZ702学习笔记6——ZYNQ如何固化程序
上次,我们讲到了EMIO的使用,其实那就是一个最简的“PS + PL”运用的体现。我们之前是通过JTAG先下载bit流文件,再下载elf文件,之后点击Run As来运行的程序。但是这样只要一断电,程序就没了。那么今天我们就来试试如何让程序断电不消失。
之前,JTAG的方法是通过TCL脚本来初始化PS,然后用JTAG收发信息,可用于在线调试。这次我们得想办法把,程序放到一个非易失的存储器件里。
那我们先要稍微了解下zynq的启动过程,启动过程有3个阶段:
阶段 0:即传统的BootROM过程,zynq芯片里有个rom里面固化了一段不可修改的程序,只有zynq一上电,这段程序就会执行,它将对zynq的NAND、NOR、SD等基本外设控制器进行初始化。把SD卡这类易失的存储器件初始化好了之后,就会把其中的程序拷贝到zynq的OCM(On-chip memory),那么这个被拷贝到片上RAM执行的程序就是我们今天要制作的文件——BOOT.bin。
这里有个疑问,zynq他怎么知道BOOT.bin是在SD还是NAND或是NOR?看到MiZ702按键旁的拨码开关了吗?MiZ702默认拨码的顺序,就是让BootRom去SDRAM中寻找启动代码。怎么配置拨码开关详见MiZ702的硬件使用手册。
阶段 1:说到BOOT.bin,他其实是由3个文件制作而成,第一个是FSBL.elf, 第二个是bit文件,第三个是运行在PS
上的elf文件。第二个和第三个上次我们已经见过了,bit文件是由vivado产生里面包含了zynq PS的配置部分内容,
以及PL部分的逻辑内容。第三个文件就是SDK里写的用户程序生成的。那么第一个文件FSBL.elf是干嘛的呢?
它做的这个事情就是第一阶段的内容:,根据bit文件,首先配置PS部分,PS完成初始化后,会去配置PL部分,之后会去加载第二阶段的代码。
阶段 2:这一阶段是可选的,完成Linux系统启动过程(U-BOOT)。我们这次是还是裸奔,不需要。
再回到最初的问题,如何制作BOOT.bin。因为制作BOOT.bin需要三个文件,第二个和第三个我们已经有了,现在就差FSBL.elf了。
下面就介绍如何生成FSBL.elf,SDK可以完成这个过程,虽然你自己也可以写,但是xilinx提供了,你不用吗?哈哈!
过程如下:
1、直接双击SDK,选择一个工作空间之后,新建一个FSBL的工程:
那么,编译之后,就会生成FSBL.elf,再把上一个工程的生成的bit和elf文件找到,就可以开始,制作BOOT.bin了。
2、在SDK的工具栏找到:Xilinx Tool->Creat Zynq Boot Image
3、分别添加以上3个文件,但是最好按顺序添加,因为FSBL最先启动,然后配置PS,最后配置PL,所以顺序就是1、FSBL.elf 2、bit 3、程序的elf。
4、点击add,添加FSBL.elf
5、点击add,添加LED_wrapper.bit
6、点击add,添加led.elf
7、点击Creat Image生成BOOT.bin
看到这条信息的时候,就是BOOT.bin制作好的时候:
在之前设定的文件夹下找到,BOOT.bin并且将其拷到SD卡中,再把SD卡插到MiZ702,打开电源,和上次工程出现的现象重现了,这次断电之后,程序也不会消失了~~
这次,我把1、FSBL.elf 2、bit 3、程序的elf,这三个文件,以及BOOT.bin都上传,大家可以试试。最后提醒下放大SD卡的bin文件,一定得叫BOOT.bin,不然不识别,具体为什么可以参考FSBL的源代码。
zynq+linux固化程序,MiZ702学习笔记6——ZYNQ如何固化程序相关推荐
- Zynq linux的I2C驱动学习笔记
最近在用米尔的Z-TURN BOARD单板做小项目.顺便也加强学习I2C驱动,记一篇做记录. I2C总线知识非常简单,SDA,SCL,他们的时序规则是:I2C总线是由数据线SDA和时钟SCL构成的串 ...
- 微信小程序开发学习笔记001--认识微信小程序,第一个微信小程序
第一天,认识微信小程序,第一个微信小程序 1.什么是微信小程序? 是h5网页嘛?不是 微信张小龙说: 小程序是一种不需要下载安装即可使用的应用, 它实现了应用"触手可及"的梦想,用 ...
- 九十分钟极速入门Linux——Linux Guide for Developments 学习笔记
转载自: 九十分钟极速入门Linux--Linux Guide for Developments 学习笔记 http://mp.weixin.qq.com/s?__biz=MzAwNTMxMzg1MA ...
- GTK+图形化应用程序开发学习笔记(一)—概述
GTK+图形化应用程序开发学习笔记(一)-概述 一.什么是GNOME. GNOME的意思是"GNU Network Object Model Environment"(GNU网络对 ...
- Linux性能优化实战学习笔记:第四十六讲=====实战分析
Linux性能优化实战学习笔记:第四十六讲 一.上节回顾 不知不觉,我们已经学完了整个专栏的四大基础模块,即 CPU.内存.文件系统和磁盘 I/O.以及网络的性能分析和优化.相信你已经掌握了这些基础模 ...
- Linux C编程一站式学习笔记2
Linux C编程一站式学习笔记 chap2 常量.变量和表达式 本书以C99为标准 一.继续hello world 加入更多注释的hello world 可以用ctrl+(shift)+v复制到vi ...
- Spark学习笔记1——第一个Spark程序:单词数统计
Spark学习笔记1--第一个Spark程序:单词数统计 笔记摘抄自 [美] Holden Karau 等著的<Spark快速大数据分析> 添加依赖 通过 Maven 添加 Spark-c ...
- 《鸟哥的Linux私房菜》学习笔记
<鸟哥的Linux私房菜>学习笔记 这是一份学习<鸟哥的Linux私房菜>的学习笔记,记笔记的原则是,感觉平时可能会用到的 就记录的详细一些,感觉暂时用不上的,只需要知道要解决 ...
- Linux性能优化实战学习笔记:第十讲==中断
Linux性能优化实战学习笔记:第十讲 一.坏境准备 1.拓扑图 2.安装包 在第9节的基础上 在VM2上安装hping3依奈包 ? 1 2 3 4 5 6 7 wget http://www.tcp ...
最新文章
- lr如何监控linux,LoadRunner如何监控Linux系统资源
- 为什么python对空格,缩进要求这么高?缩进稍微不对就报错!
- globalmapper如何选取图像上的点_20. 用于纹理合成和转移的图像缝合
- c语言窗口程序 画圆,C语言画圆问题。怎么跳过画图界面直接出来了?
- 【详解!思路清晰】1095 解码PAT准考证 (25分)
- Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制
- 使用迭代器时如何避免ConcurrentModificationException
- uva 10723——Cyborg Genes
- 一些JavaScript基本函数
- 需求阶段如何书写Use Case
- HTML Email 编写指南
- 服务器多个网站开启quarz,GitHub - WuLex/QuartzSynchroData: 多个不同站点服务器数据同步到总服务器(数据中心)...
- grep搜索字串包含特殊字符怎么办
- 计算机等级考试一级宝典,计算机等级考试一级通关宝典
- 图表控件MsChart使用demo
- 装机电脑用什么软件测试,有什么一键装机的软件比较好用?
- 如何清理 C 盘空间
- 2018-09-27工作日报
- 中国芯片自给率激增,芯片库存高企的美国阻止中国发展先进工艺
- 时间是6G研发成功的关键
热门文章
- Java编码规范注意
- 山东中医院大学计算机科学与技术,2021年山东中医药大学计算机科学与技术专业招生...
- 基于JAVA+SpringMVC+Mybatis+MYSQL的大学生综合成绩测评系统
- 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_05 List集合_4_Vector集合
- centos安装桌面和远程连接
- dingding post POST请求
- angular $location服务获取url
- jquery学习--对象
- MSDN电子杂志上有关TFS的文章
- java的字符串指针数组,C语言字符串中的指针与数组