開(kāi)發(fā)環(huán)境說(shuō)明
表 1
本文以TLZ7x-EasyEVM開(kāi)發(fā)板為例,核心板SoC芯片型號(hào)為XC7Z020,演示使用SD卡啟動(dòng)Zynq裸機(jī)程序的方法。 基于SD卡啟動(dòng)的裸機(jī)程序主要包含兩類(lèi),一是ARM(PS端)+FPGA(PL端)的All-Programmable-SoC-demos例程,二是純PS(不依賴(lài)PL端)的Baremetal(NoOS)裸機(jī)例程。兩類(lèi)裸機(jī)程序的運(yùn)行都需要依賴(lài)FSBL的BOOT.BIN文件和U-Boot的u-boot.bin文件引導(dǎo),主要區(qū)別在于Baremetal(NoOS)裸機(jī)例程不包含PL端xxx.bin程序。 從SD卡啟動(dòng)SoC裸機(jī)程序說(shuō)明
分別參照《基于TcL腳本生成Vivado工程及編譯》、《基于TcL腳本生成xsdk工程及編譯》文檔,編譯All-Programmable-SoC-demos例程。 將SD存儲(chǔ)卡格式化為FAT32格式,或者直接使用SD系統(tǒng)啟動(dòng)卡的boot分區(qū),SD系統(tǒng)啟動(dòng)卡boot分區(qū)即為FAT32格式。將PS端的xxx.elf程序和PL端xxx.bin程序復(fù)制到SD卡,另外將BOOT.BIN和u-boot.bin兩個(gè)文件也添加復(fù)制到SD卡。 以光盤(pán)"All-Programmable-SoC-demos\tl-axi-gpio-led-demo"例程為例,PS端程序?yàn)?quot;tl-axi-gpio-led-demo\sw\axi_gpio_baremetal_demo\bin\axi_gpio.elf",PL端程序?yàn)?quot;tl-axi-gpio-led-demo\hw\bin\axi_gpio_xc7z020.bin"。
表 2
| | FSBL\image\embeddedsw-[Git系列號(hào)]-[版本號(hào)\BOOT.BIN | 初始化DDR等外設(shè),加載U-Boot鏡像文件 | U-Boot\U-Boot-2017.01\image\u-boot.bin | | | | | |
設(shè)置u-boot環(huán)境變量
將開(kāi)發(fā)板撥碼開(kāi)關(guān)撥到101001(1~6),此模式為SD卡啟動(dòng)模式。開(kāi)發(fā)板上電啟動(dòng),快速按任意鍵進(jìn)入U(xiǎn)-Boot命令行修改環(huán)境變量。 在U-Boot命令行下執(zhí)行如下指令,設(shè)置需要加載的PL端xxx.bin程序,PL端程序名應(yīng)根據(jù)實(shí)際情況修改,如果是Baremetal(NoOS)例程則無(wú)需執(zhí)行此命令。
Uboot# setenv bitstream_image axi_gpio_xc7z020.bin
執(zhí)行如下指令,設(shè)置需要加載的PS端xxx.elf程序,PS端程序名應(yīng)根據(jù)實(shí)際情況修改。
Uboot# setenv app_image axi_gpio.elf
執(zhí)行如下指令設(shè)置啟動(dòng)方式為appboot,并保存設(shè)置好的環(huán)境變量。
Uboot# setenv sdboot 'run appboot'
Uboot# saveenv
從SD卡啟動(dòng)裸機(jī)程序
開(kāi)發(fā)板斷電,重新上電啟動(dòng)后,調(diào)試終端打印信息如下圖所示。打印"## Starting application at 0x00100000 ..."信息后,開(kāi)發(fā)板開(kāi)始運(yùn)行裸機(jī)程序。本次操作運(yùn)行的是tl-axi-gpio-led-demo的裸機(jī)程序,運(yùn)行程序后會(huì)打印"AXI GPIO TEST",并且可以看到底板的LED2在閃爍。
恢復(fù)U-Boot環(huán)境變量
經(jīng)過(guò)前面步驟修改過(guò)環(huán)境變量后,U-Boot啟動(dòng)時(shí)將會(huì)讀取相應(yīng)的裸機(jī)程序。如需正常啟動(dòng)Linux系統(tǒng),在U-Boot命令行下執(zhí)行如下指令恢復(fù)默認(rèn)的環(huán)境變量。
Uboot# env default -a
Uboot# saveenv
|