0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Zynq中程序存储位置和设置方法

CHANBAEK 来源:嵌入式随笔 作者:嵌入式随笔 2023-10-17 17:00 次阅读

Zynq中存储程序的地方有QSPI Flash,SD卡,EMMC。

Zynq的程序分为三部分,上电启动的引导程序(fsbl),FPGA的程序,arm程序。这里以arm程序存储位置为主进行讨论。

1 ARM为裸机程序

裸机程序比较小,可以将全部程序(fsbl,FPGA的程序,arm程序)一起存储在QSPI Flash,SD卡,EMMC中的任何一个位置。

1.1 固化在QSPI FLASH

使用JTAG和sdk固化。

或者先运行程序,然后通过程序将可执行文件写入到QSPI Flash中,然后将启动方式设置为QSPI Flash启动,下次启动就可以从QSPI Flash启动了。

1.2 固化在SD卡

通过读卡器将可执行文件复制进SD卡,将启动方式设置为SD卡启动,下次启动就可以从SD卡启动了。

1.3 固化在EMMC中

先运行sd卡中的程序(或者通过jtag运行程序),然后通过程序将可执行文件写入到emmc中,然后将启动方式设置为emmc启动,下次启动就可以从emmc启动了。

2 ARM为运行linux的程序

linux跟文件系统一般比较大,全部固化在QSPI Flash中装不下。可以在QSPI Flash中固化一部分。

2.1 部分固化在QSPI FLASH中

可以在QSPI Flash中固化 fsbl+uboot+FPGA的程序+linux内核+设备树,将根文件系统存储在emmc中。

fsbl+uboot本身已经可以运行,uboot运行后会将其余部分拷贝到内存继续运行。以下是uboot中的zynq-common.h中的一部分程序。

"qspiboot=echo Copying Linux from QSPI flash to RAM... && " 
 "sf probe 0 0 0 && " 
 "sf read ${bitstream_load_address} 0x120000 ${bitstream_size} && " 
 "fpga loadb 0 ${bitstream_load_address} ${bitstream_size} && " 
 "sf read ${kernel_load_address} 0x540000 ${kernel_size} && " 
 "sf read ${devicetree_load_address} 0x520000 ${devicetree_size} && " 
 "bootz ${kernel_load_address} - ${devicetree_load_address}�"

第三行是将fpga文件拷贝到内存中,第四行是处理内存中的fpga程序,第五行是将linux内核文件拷贝到内存中,第六行是将设备树文件拷贝到内存中。然后开始运行内核。内核运行后会去运行emmc中的根文件系统。

可以看出 fsbl+uboot+FPGA的程序和裸机程序是一样的,剩下的就是uboot执行程序的一部分。如果linux内核+设备树存储在别的地方,只需要将上述程序修改为从相应地方拷贝到内存就可以。

固化的话,可以在sd卡中先运行程序,然后按照设定将QSPI Flash分区并将对应的执行程序复制进QSPI Flash中,将emmc格式化为ext4文件系统在将跟文件系统复制进emmc中。再将启动方式设置为QSPI Flash启动,下次启动就可以从qspi启动了。

Qspi存储程序的分区大小可以自定义但是要能存的下程序,比如fpga程序3Mb不能只给个2Mb的分区。

2.2 固化在SD卡

通过读卡器将可执行文件复制进SD卡,将启动方式设置为SD卡启动,下次启动就可以从SD卡启动了。

2.3 固化在EMMC中

先运行sd卡中的程序,然后通过程序将可执行文件写入到emmc中,然后将启动方式设置为emmc启动,下次启动就可以从emmc启动了。

3 区别与联系

可以看出带Linux的就是多了一段跳转,固化在QSPI Flash中的时候由于全部程序比较大需要分散放。fsbl+第一段ARM程序需要在一起并且名字是固定的为BOOT.BIN(这是芯片内部预置程序决定的)。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FlaSh
    +关注

    关注

    10

    文章

    1550

    浏览量

    146646
  • Linux
    +关注

    关注

    87

    文章

    10991

    浏览量

    206736
  • 程序
    +关注

    关注

    114

    文章

    3631

    浏览量

    79543
  • Zynq
    +关注

    关注

    9

    文章

    600

    浏览量

    46620
  • emmc
    +关注

    关注

    6

    文章

    180

    浏览量

    52017
收藏 人收藏

    评论

    相关推荐

    让STM32应用与存储位置无关

    最近有客户询问,能否使用 STM32CubeIDE 在编译时通过设置某个编译选项,让STM32 应用与存储位置无关。这样的优势是能使同一个固件被烧在 STM32 Flash 里的不同位置, 而在系统
    发表于 09-05 11:43 656次阅读

    win10 IE浏览器无法更改临时文件夹存储位置

    临时文件修改不了存储位置的问题。这是怎么回事呢?接下来,小编就给大家介绍下win10系统下无法更改ie临时文件位置的解决方案。具体方法如下: 1、每次用ie修改,注销后还是没有改变。2、可以通过修改注册表
    发表于 03-08 13:46

    Keil C51 使用C语言编写程序,怎么设置程序的起始存储位置从0x1000开始

    使用STC 的IAP系列单片机,打算自己写一段更新程序。求教C语言编写的话要如何设置程序的起始存储位置,该段程序准备
    发表于 02-09 17:27

    【求助】指定变量在各个片上存储区域的存储位置时出现...

    由于程序的运算量很大,想把L1D和L2当做普通RAM,并将指定的数组变量存储在L1D和L2中。我的操作方法如下: 1. 先对L1DCFG和L2CFG寄存器进行操作,将L1D和L2配置为普通RAM而非
    发表于 05-13 06:40

    C语言中局部变量的存储位置是如何分配的?

    ADS下C语言中局部变量的存储位置是如何分配的?
    发表于 04-26 06:31

    嵌入式开发中程序下载后存储在什么地方

    Q1:    嵌入式开发中程序下载后存储在什么地方?      嵌入式开发范围较广,根据系统处理器的处理能力以及资源分配情况,又有许多不同处理器。常说的有MCU、MPU等,两者有着不同的处理计算能力
    发表于 11-05 08:31

    Proteus中程序的调试及仿真的方法

    1.仿真的方法:将编译好的程序载入单片机1双击绘制完电路原理图中的单片机→在弹出的窗口中,点击“Program File”后边的小文件夹2找到之前编译好的C语言程序文件(2.2中的第⑤步所在
    发表于 11-23 06:07

    请问存储位置的内容如何固话到emmc中呢?

    接下来我该将该存储位置的内容如何固话到emmc中呢?应该会有个mmc write的操作,但是我在文档中没找到,所以不知道是要写到那个地址下,看到uboot env环境参数中有一段操作
    发表于 01-11 07:52

    存储位元与存储单元是什么含义

    存储位元与存储单元是什么含义?数据通信的方式可以分为哪几种呢?
    发表于 01-21 07:17

    调试TMS570的F021库时 cmd文件设置程序放到指定位置,但实际指定位置的内存却全是FF,会是什么原因?

    在使用TMS570调试TI的F021库时,cmd文件已经设置了代码的存储位置,但是在查看内存数据时,指定的存储位置都是0xFFFFFFFF,有人遇到过同样的问题吗?
    发表于 04-17 10:21

    程序中内存应该如何分配?怎样进行动态内存分配?

    程序在内存中是分段存储的。 代码段:存放语句转换的数字;程序运行时不可修改; 全局段:用来记录全局变量和静态变量的存储位置;不会随着程序的运
    的头像 发表于 08-12 10:52 8486次阅读
    <b class='flag-5'>程序</b>中内存应该如何分配?怎样进行动态内存分配?

    linux中程序调试的方法

    这是一个基本的调试问题的方法。 我们在程序中怀疑的地方插入print语句来了解程序的运行流程控制流和变量值的改变。
    发表于 06-16 09:34 1766次阅读
    linux<b class='flag-5'>中程序</b>调试的<b class='flag-5'>方法</b>

    单片机中程序和数据存放位置、与电脑内存和硬盘的类比,单片机和计算机程序启动流程对比

    单片机中程序和数据存放位置、与电脑内存和硬盘的类比,单片机和计算机程序启动流程对比
    发表于 11-26 17:51 14次下载
    单片机<b class='flag-5'>中程序</b>和数据存放<b class='flag-5'>位置</b>、与电脑内存和硬盘的类比,单片机和计算机<b class='flag-5'>程序</b>启动流程对比

    如何开发与位置无关的 STM32 完整工程

    最近有客户询问,能否使用 STM32CubeIDE 在编译时通过设置某个编译选项,让STM32 应用与存储位置无关。
    的头像 发表于 09-15 09:59 1254次阅读

    如何开发与存储位置无关的STM32应用?

    如何开发与存储位置无关的STM32应用?
    的头像 发表于 10-18 16:46 342次阅读
    如何开发与<b class='flag-5'>存储位置</b>无关的STM32应用?