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文章
1644瀏覽量
148757 -
Linux
+關注
關注
87文章
11351瀏覽量
210504 -
程序
+關注
關注
117文章
3798瀏覽量
81457 -
Zynq
+關注
關注
10文章
610瀏覽量
47320 -
emmc
+關注
關注
7文章
219瀏覽量
52935
發布評論請先 登錄
相關推薦
讓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>,更改電腦上的云<b class='flag-5'>存儲位置</b>教程](https://file1.elecfans.com/web3/M00/05/1E/wKgZPGd86JiAbyMBAAALblSWBEs401.png)
電腦相片云存儲位置,如何快速找到電腦相片云存儲位置
![電腦相片云<b class='flag-5'>存儲位置</b>,如何快速找到電腦相片云<b class='flag-5'>存儲位置</b>](https://file1.elecfans.com/web3/M00/04/D0/wKgZPGd4zA-AM4reAATGk2iLRCg267.png)
評論