0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Zynq中程序存儲位置和設(shè)置方法

CHANBAEK ? 來源:嵌入式隨筆 ? 作者:嵌入式隨筆 ? 2023-10-17 17:00 ? 次閱讀

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中的任何一個(gè)位置。

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不能只給個(gè)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中的時(shí)候由于全部程序比較大需要分散放。fsbl+第一段ARM程序需要在一起并且名字是固定的為BOOT.BIN(這是芯片內(nèi)部預(yù)置程序決定的)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • FlaSh
    +關(guān)注

    關(guān)注

    10

    文章

    1608

    瀏覽量

    147562
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11161

    瀏覽量

    208461
  • 程序
    +關(guān)注

    關(guān)注

    115

    文章

    3743

    瀏覽量

    80661
  • Zynq
    +關(guān)注

    關(guān)注

    9

    文章

    604

    瀏覽量

    47072
  • emmc
    +關(guān)注

    關(guān)注

    7

    文章

    195

    瀏覽量

    52475
收藏 人收藏

    評論

    相關(guān)推薦

    讓STM32應(yīng)用與存儲位置無關(guān)

    最近有客戶詢問,能否使用 STM32CubeIDE 在編譯時(shí)通過設(shè)置某個(gè)編譯選項(xiàng),讓STM32 應(yīng)用與存儲位置無關(guān)。這樣的優(yōu)勢是能使同一個(gè)固件被燒在 STM32 Flash 里的不同位置, 而在系統(tǒng)
    發(fā)表于 09-05 11:43 ?758次閱讀

    win10 IE瀏覽器無法更改臨時(shí)文件夾存儲位置

    臨時(shí)文件修改不了存儲位置的問題。這是怎么回事呢?接下來,小編就給大家介紹下win10系統(tǒng)下無法更改ie臨時(shí)文件位置的解決方案。具體方法如下: 1、每次用ie修改,注銷后還是沒有改變。2、可以通過修改注冊表
    發(fā)表于 03-08 13:46

    Keil C51 使用C語言編寫程序,怎么設(shè)置程序的起始存儲位置從0x1000開始

    使用STC 的IAP系列單片機(jī),打算自己寫一段更新程序。求教C語言編寫的話要如何設(shè)置程序的起始存儲位置,該段程序準(zhǔn)備
    發(fā)表于 02-09 17:27

    【求助】指定變量在各個(gè)片上存儲區(qū)域的存儲位置時(shí)出現(xiàn)...

    由于程序的運(yùn)算量很大,想把L1D和L2當(dāng)做普通RAM,并將指定的數(shù)組變量存儲在L1D和L2中。我的操作方法如下: 1. 先對L1DCFG和L2CFG寄存器進(jìn)行操作,將L1D和L2配置為普通RAM而非
    發(fā)表于 05-13 06:40

    C語言中局部變量的存儲位置是如何分配的?

    ADS下C語言中局部變量的存儲位置是如何分配的?
    發(fā)表于 04-26 06:31

    Proteus中程序的調(diào)試及仿真的方法

    1.仿真的方法:將編譯好的程序載入單片機(jī)1雙擊繪制完電路原理圖中的單片機(jī)→在彈出的窗口中,點(diǎn)擊“Program File”后邊的小文件夾2找到之前編譯好的C語言程序文件(2.2中的第⑤步所在
    發(fā)表于 11-23 06:07

    存儲位元與存儲單元是什么含義

    存儲位元與存儲單元是什么含義?數(shù)據(jù)通信的方式可以分為哪幾種呢?
    發(fā)表于 01-21 07:17

    調(diào)試TMS570的F021庫時(shí) cmd文件設(shè)置程序放到指定位置,但實(shí)際指定位置的內(nèi)存卻全是FF,會是什么原因?

    在使用TMS570調(diào)試TI的F021庫時(shí),cmd文件已經(jīng)設(shè)置了代碼的存儲位置,但是在查看內(nèi)存數(shù)據(jù)時(shí),指定的存儲位置都是0xFFFFFFFF,有人遇到過同樣的問題嗎?
    發(fā)表于 04-17 10:21

    程序中內(nèi)存應(yīng)該如何分配?怎樣進(jìn)行動態(tài)內(nèi)存分配?

    程序在內(nèi)存中是分段存儲的。 代碼段:存放語句轉(zhuǎn)換的數(shù)字;程序運(yùn)行時(shí)不可修改; 全局段:用來記錄全局變量和靜態(tài)變量的存儲位置;不會隨著程序的運(yùn)
    的頭像 發(fā)表于 08-12 10:52 ?8663次閱讀
    <b class='flag-5'>程序</b>中內(nèi)存應(yīng)該如何分配?怎樣進(jìn)行動態(tài)內(nèi)存分配?

    linux中程序調(diào)試的方法

    這是一個(gè)基本的調(diào)試問題的方法。 我們在程序中懷疑的地方插入print語句來了解程序的運(yùn)行流程控制流和變量值的改變。
    發(fā)表于 06-16 09:34 ?1935次閱讀
    linux<b class='flag-5'>中程序</b>調(diào)試的<b class='flag-5'>方法</b>

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

    1.仿真的方法:將編譯好的程序載入單片機(jī)1雙擊繪制完電路原理圖中的單片機(jī)→在彈出的窗口中,點(diǎn)擊“Program File”后邊的小文件夾2找到之前編譯好的C語言程序文件(2.2中的第⑤步所在
    發(fā)表于 11-15 13:21 ?10次下載
    Proteus<b class='flag-5'>中程序</b>的調(diào)試(Proteus與ICCAVR的聯(lián)合調(diào)試)

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

    單片機(jī)中程序和數(shù)據(jù)存放位置、與電腦內(nèi)存和硬盤的類比,單片機(jī)和計(jì)算機(jī)程序啟動流程對比
    發(fā)表于 11-26 17:51 ?14次下載
    單片機(jī)<b class='flag-5'>中程序</b>和數(shù)據(jù)存放<b class='flag-5'>位置</b>、與電腦內(nèi)存和硬盤的類比,單片機(jī)和計(jì)算機(jī)<b class='flag-5'>程序</b>啟動流程對比

    如何開發(fā)與位置無關(guān)的 STM32 完整工程

    最近有客戶詢問,能否使用 STM32CubeIDE 在編譯時(shí)通過設(shè)置某個(gè)編譯選項(xiàng),讓STM32 應(yīng)用與存儲位置無關(guān)。
    的頭像 發(fā)表于 09-15 09:59 ?1553次閱讀

    如何修改邊沿存儲位的地址

    說明 使用“掃描 RLO 的信號上升沿”指令,可查詢邏輯運(yùn)算結(jié)果 (RLO) 的信號狀態(tài)從“0”到“1”的更改。該指令將比較 RLO 的當(dāng)前信號狀態(tài)與保存在邊沿存儲位( )中上一次查詢的信號狀態(tài)
    的頭像 發(fā)表于 06-28 16:20 ?705次閱讀
    如何修改邊沿<b class='flag-5'>存儲位</b>的地址

    如何開發(fā)與存儲位置無關(guān)的STM32應(yīng)用?

    如何開發(fā)與存儲位置無關(guān)的STM32應(yīng)用?
    的頭像 發(fā)表于 10-18 16:46 ?528次閱讀
    如何開發(fā)與<b class='flag-5'>存儲位置</b>無關(guān)的STM32應(yīng)用?