Zynq中存儲程序的地方有QSPI Flash,SD卡,EMMC。
Zynq的程序分為三部分,上電啟動的引導(dǎo)程序(fsbl),FPGA的程序,arm程序。這里以arm程序存儲位置為主進(jìn)行討論。
1 ARM為裸機(jī)程序
裸機(jī)程序比較小,可以將全部程序(fsbl,F(xiàn)PGA的程序,arm程序)一起存儲在QSPI Flash,SD卡,EMMC中的任何一個位置。
1.1 固化在QSPI FLASH
使用JTAG和sdk固化。
或者先運(yùn)行程序,然后通過程序?qū)⒖蓤?zhí)行文件寫入到QSPI Flash中,然后將啟動方式設(shè)置為QSPI Flash啟動,下次啟動就可以從QSPI Flash啟動了。
1.2 固化在SD卡
通過讀卡器將可執(zhí)行文件復(fù)制進(jìn)SD卡,將啟動方式設(shè)置為SD卡啟動,下次啟動就可以從SD卡啟動了。
1.3 固化在EMMC中
先運(yùn)行sd卡中的程序(或者通過jtag運(yùn)行程序),然后通過程序?qū)⒖蓤?zhí)行文件寫入到emmc中,然后將啟動方式設(shè)置為emmc啟動,下次啟動就可以從emmc啟動了。
2 ARM為運(yùn)行linux的程序
linux跟文件系統(tǒng)一般比較大,全部固化在QSPI Flash中裝不下??梢栽赒SPI Flash中固化一部分。
2.1 部分固化在QSPI FLASH中
可以在QSPI Flash中固化 fsbl+uboot+FPGA的程序+linux內(nèi)核+設(shè)備樹,將根文件系統(tǒng)存儲在emmc中。
fsbl+uboot本身已經(jīng)可以運(yùn)行,uboot運(yùn)行后會將其余部分拷貝到內(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è)備樹文件拷貝到內(nèi)存中。然后開始運(yùn)行內(nèi)核。內(nèi)核運(yùn)行后會去運(yùn)行emmc中的根文件系統(tǒng)。
可以看出 fsbl+uboot+FPGA的程序和裸機(jī)程序是一樣的,剩下的就是uboot執(zhí)行程序的一部分。如果linux內(nèi)核+設(shè)備樹存儲在別的地方,只需要將上述程序修改為從相應(yīng)地方拷貝到內(nèi)存就可以。
固化的話,可以在sd卡中先運(yùn)行程序,然后按照設(shè)定將QSPI Flash分區(qū)并將對應(yīng)的執(zhí)行程序復(fù)制進(jìn)QSPI Flash中,將emmc格式化為ext4文件系統(tǒng)在將跟文件系統(tǒng)復(fù)制進(jìn)emmc中。再將啟動方式設(shè)置為QSPI Flash啟動,下次啟動就可以從qspi啟動了。
Qspi存儲程序的分區(qū)大小可以自定義但是要能存的下程序,比如fpga程序3Mb不能只給個2Mb的分區(qū)。
2.2 固化在SD卡
通過讀卡器將可執(zhí)行文件復(fù)制進(jìn)SD卡,將啟動方式設(shè)置為SD卡啟動,下次啟動就可以從SD卡啟動了。
2.3 固化在EMMC中
先運(yùn)行sd卡中的程序,然后通過程序?qū)⒖蓤?zhí)行文件寫入到emmc中,然后將啟動方式設(shè)置為emmc啟動,下次啟動就可以從emmc啟動了。
3 區(qū)別與聯(lián)系
可以看出帶Linux的就是多了一段跳轉(zhuǎn),固化在QSPI Flash中的時候由于全部程序比較大需要分散放。fsbl+第一段ARM程序需要在一起并且名字是固定的為BOOT.BIN(這是芯片內(nèi)部預(yù)置程序決定的)。
-
FlaSh
+關(guān)注
關(guān)注
10文章
1633瀏覽量
147939 -
Linux
+關(guān)注
關(guān)注
87文章
11292瀏覽量
209323 -
程序
+關(guān)注
關(guān)注
117文章
3785瀏覽量
81003 -
Zynq
+關(guān)注
關(guān)注
10文章
609瀏覽量
47174 -
emmc
+關(guān)注
關(guān)注
7文章
203瀏覽量
52721
發(fā)布評論請先 登錄
相關(guān)推薦
評論