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文章
1633浏览量
147951 -
Linux
+关注
关注
87文章
11296浏览量
209348 -
程序
+关注
关注
117文章
3785浏览量
81006 -
Zynq
+关注
关注
10文章
609浏览量
47175 -
emmc
+关注
关注
7文章
203浏览量
52727
发布评论请先 登录
相关推荐
让STM32应用与存储位置无关
win10 IE浏览器无法更改临时文件夹存储位置
Keil C51 使用C语言编写程序,怎么设置程序的起始存储位置从0x1000开始
【求助】指定变量在各个片上存储区域的存储位置时出现...
Proteus中程序的调试及仿真的方法
调试TMS570的F021库时 cmd文件设置了程序放到指定位置,但实际指定位置的内存却全是FF,会是什么原因?
Proteus中程序的调试(Proteus与ICCAVR的联合调试)
![Proteus<b class='flag-5'>中程序</b>的调试(Proteus与ICCAVR的联合调试)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
单片机中程序和数据存放位置、与电脑内存和硬盘的类比,单片机和计算机程序启动流程对比
![单片机<b class='flag-5'>中程序</b>和数据存放<b class='flag-5'>位置</b>、与电脑内存和硬盘的类比,单片机和计算机<b class='flag-5'>程序</b>启动流程对比](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
如何开发与位置无关的 STM32 完整工程
如何修改边沿存储位的地址
![如何修改边沿<b class='flag-5'>存储位</b>的地址](https://file1.elecfans.com/web2/M00/8B/9F/wKgaomSb7T2ADnzUAAASH7LVhFo833.png)
评论