Zynq中存儲(chǔ)程序的地方有QSPI Flash,SD卡,EMMC。
Zynq的程序分為三部分,上電啟動(dòng)的引導(dǎo)程序(fsbl),FPGA的程序,arm程序。這里以arm程序存儲(chǔ)位置為主進(jìn)行討論。
1 ARM為裸機(jī)程序
裸機(jī)程序比較小,可以將全部程序(fsbl,F(xiàn)PGA的程序,arm程序)一起存儲(chǔ)在QSPI Flash,SD卡,EMMC中的任何一個(gè)位置。
1.1 固化在QSPI FLASH
使用JTAG和sdk固化。
或者先運(yùn)行程序,然后通過(guò)程序?qū)⒖蓤?zhí)行文件寫入到QSPI Flash中,然后將啟動(dòng)方式設(shè)置為QSPI Flash啟動(dòng),下次啟動(dòng)就可以從QSPI Flash啟動(dòng)了。
1.2 固化在SD卡
通過(guò)讀卡器將可執(zhí)行文件復(fù)制進(jìn)SD卡,將啟動(dòng)方式設(shè)置為SD卡啟動(dòng),下次啟動(dòng)就可以從SD卡啟動(dòng)了。
1.3 固化在EMMC中
先運(yùn)行sd卡中的程序(或者通過(guò)jtag運(yùn)行程序),然后通過(guò)程序?qū)⒖蓤?zhí)行文件寫入到emmc中,然后將啟動(dòng)方式設(shè)置為emmc啟動(dòng),下次啟動(dòng)就可以從emmc啟動(dòng)了。
2 ARM為運(yùn)行linux的程序
linux跟文件系統(tǒng)一般比較大,全部固化在QSPI Flash中裝不下。可以在QSPI Flash中固化一部分。
2.1 部分固化在QSPI FLASH中
可以在QSPI Flash中固化 fsbl+uboot+FPGA的程序+linux內(nèi)核+設(shè)備樹(shù),將根文件系統(tǒng)存儲(chǔ)在emmc中。
fsbl+uboot本身已經(jīng)可以運(yùn)行,uboot運(yùn)行后會(huì)將其余部分拷貝到內(nèi)存繼續(xù)運(yùn)行。以下是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文件拷貝到內(nèi)存中,第四行是處理內(nèi)存中的fpga程序,第五行是將linux內(nèi)核文件拷貝到內(nèi)存中,第六行是將設(shè)備樹(shù)文件拷貝到內(nèi)存中。然后開(kāi)始運(yùn)行內(nèi)核。內(nèi)核運(yùn)行后會(huì)去運(yùn)行emmc中的根文件系統(tǒng)。
可以看出 fsbl+uboot+FPGA的程序和裸機(jī)程序是一樣的,剩下的就是uboot執(zhí)行程序的一部分。如果linux內(nèi)核+設(shè)備樹(shù)存儲(chǔ)在別的地方,只需要將上述程序修改為從相應(yīng)地方拷貝到內(nèi)存就可以。
固化的話,可以在sd卡中先運(yùn)行程序,然后按照設(shè)定將QSPI Flash分區(qū)并將對(duì)應(yīng)的執(zhí)行程序復(fù)制進(jìn)QSPI Flash中,將emmc格式化為ext4文件系統(tǒng)在將跟文件系統(tǒng)復(fù)制進(jìn)emmc中。再將啟動(dòng)方式設(shè)置為QSPI Flash啟動(dòng),下次啟動(dòng)就可以從qspi啟動(dòng)了。
Qspi存儲(chǔ)程序的分區(qū)大小可以自定義但是要能存的下程序,比如fpga程序3Mb不能只給個(gè)2Mb的分區(qū)。
2.2 固化在SD卡
通過(guò)讀卡器將可執(zhí)行文件復(fù)制進(jìn)SD卡,將啟動(dòng)方式設(shè)置為SD卡啟動(dòng),下次啟動(dòng)就可以從SD卡啟動(dòng)了。
2.3 固化在EMMC中
先運(yùn)行sd卡中的程序,然后通過(guò)程序?qū)⒖蓤?zhí)行文件寫入到emmc中,然后將啟動(dòng)方式設(shè)置為emmc啟動(dòng),下次啟動(dòng)就可以從emmc啟動(dòng)了。
3 區(qū)別與聯(lián)系
可以看出帶Linux的就是多了一段跳轉(zhuǎn),固化在QSPI Flash中的時(shí)候由于全部程序比較大需要分散放。fsbl+第一段ARM程序需要在一起并且名字是固定的為BOOT.BIN(這是芯片內(nèi)部預(yù)置程序決定的)。
-
FlaSh
+關(guān)注
關(guān)注
10文章
1649瀏覽量
149494 -
Linux
+關(guān)注
關(guān)注
87文章
11373瀏覽量
211298 -
程序
+關(guān)注
關(guān)注
117文章
3806瀏覽量
81710 -
Zynq
+關(guān)注
關(guān)注
10文章
611瀏覽量
47488 -
emmc
+關(guān)注
關(guān)注
7文章
221瀏覽量
53207
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
讓STM32應(yīng)用與存儲(chǔ)位置無(wú)關(guān)
win10 IE瀏覽器無(wú)法更改臨時(shí)文件夾存儲(chǔ)位置
Keil C51 使用C語(yǔ)言編寫程序,怎么設(shè)置程序的起始存儲(chǔ)位置從0x1000開(kāi)始
【求助】指定變量在各個(gè)片上存儲(chǔ)區(qū)域的存儲(chǔ)位置時(shí)出現(xiàn)...
Proteus中程序的調(diào)試及仿真的方法
調(diào)試TMS570的F021庫(kù)時(shí) cmd文件設(shè)置了程序放到指定位置,但實(shí)際指定位置的內(nèi)存卻全是FF,會(huì)是什么原因?
linux中程序調(diào)試的方法

Proteus中程序的調(diào)試(Proteus與ICCAVR的聯(lián)合調(diào)試)

單片機(jī)中程序和數(shù)據(jù)存放位置、與電腦內(nèi)存和硬盤的類比,單片機(jī)和計(jì)算機(jī)程序啟動(dòng)流程對(duì)比

如何開(kāi)發(fā)與位置無(wú)關(guān)的 STM32 完整工程
如何開(kāi)發(fā)與存儲(chǔ)位置無(wú)關(guān)的STM32應(yīng)用?

怎么更改電腦上的云存儲(chǔ)位置,更改電腦上的云存儲(chǔ)位置教程

電腦相片云存儲(chǔ)位置,如何快速找到電腦相片云存儲(chǔ)位置

評(píng)論