電子發(fā)燒友App

硬聲App

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

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

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>為ZynqberryZero生成嵌入式Linux映像

為ZynqberryZero生成嵌入式Linux映像

2022-11-02 | zip | 0.69 MB | 次下載 | 免費(fèi)

資料介紹

描述

Trenz Electronic 的 Zynqberry 系列板是有趣的小型 Xilinx 基于 Zynq 的 FPGA 開發(fā)板,采用來(lái)自其微控制器對(duì)應(yīng)部件 Raspberry Pi 板的流行外形。正如您從名稱中猜到的那樣,ZynqberryZero 采用了 Raspberry Pi Zero 的外形尺寸。雖然本月早些時(shí)候我已經(jīng)介紹了如何為ZynqberryZero創(chuàng)建硬件設(shè)計(jì)裸機(jī)應(yīng)用程序,但在沒有嵌入式 Linux 映像的情況下,這并不是 ZynqberryZero 和 Raspberry Pi Zero 之間真正的蘋果對(duì)蘋果的比較。在 ZynqberryZero 上運(yùn)行。

ZynqberryZero 擁有與嵌入式 Linux 映像相同的硬件外設(shè),以利用包括 mico-USB OTG 端口、mini-HDMI 端口、MIPI/CSI 攝像頭連接器和 40 針 GPIO 以及用于 SPI、I2C 的標(biāo)準(zhǔn) Raspberry Pi 引出線、GPIO、5V電源和接地。

?

值得注意的是,雖然 Raspberry Pi Zero 的基本 Raspbian 映像是基于 Debian 的,但 PetaLinux 工具集會(huì)生成使用 RPM(Red hat Package Manager)的輕量級(jí) Red Hat 映像。因此,如果您嘗試在 ZynqberryZero 上遷移/復(fù)制任何 Raspberry Pi Zero 項(xiàng)目,請(qǐng)記住這一點(diǎn)。

創(chuàng)建 PetaLinux 項(xiàng)目

首先,從命令行獲取環(huán)境中的 PetaLinux 工具:

~$ source /tools/Xilinx/PetaLinux/2019.2/settings.sh

然后將目錄更改為您希望 PetaLinux 項(xiàng)目所在的文件夾。我個(gè)人喜歡將 PetaLinux 項(xiàng)目放在我為開發(fā)板創(chuàng)建硬件設(shè)計(jì)的 Vivado 項(xiàng)目的頂級(jí)目錄中。所以在我的在這種情況下,我的 ZynqberryZero 的 Vivado 項(xiàng)目位于我的主文件夾中的 zynqberry_zero_prj 中:

~$ cd ./zynqberry_zero_prj/
pYYBAGNh-RuAba-aAABSyIjRgAs779.png
?

接下來(lái)使用以下命令創(chuàng)建 PetaLinux 項(xiàng)目。為類型標(biāo)志傳遞項(xiàng)目,為模板標(biāo)志傳遞zynq。但是,請(qǐng)隨意傳遞項(xiàng)目名稱的所需名稱。

~/zynqberry_zero_prj$ petalinux-create --type project --template zynq --name zynqberry_zero_os

將目錄更改為最后一個(gè)命令創(chuàng)建的項(xiàng)目目錄:

~/zynqberry_zero_prj$ cd ./zynqberry_zero_os/

導(dǎo)入硬件設(shè)計(jì)

在新的 PetaLinux 項(xiàng)目中需要做的第一件事是導(dǎo)入從 Vivado 導(dǎo)出的適當(dāng)硬件平臺(tái),用于目標(biāo) FPGA 開發(fā)板。

在這種情況下,這將是在我之前的項(xiàng)目文章的最后一步中導(dǎo)出的硬件平臺(tái),該文章介紹了如何為位于 Vivado 項(xiàng)目頂層目錄中的 ZynqberryZero 生成基本硬件設(shè)計(jì),我還創(chuàng)建了 PetaLinux 項(xiàng)目在。

~/zynqberry_zero_prj/zynqberry_zero_os/$ petalinux-config --get-hw-description ../

導(dǎo)入硬件平臺(tái)后,系統(tǒng)硬件配置編輯器會(huì)自動(dòng)啟動(dòng):

poYBAGNh-R6AFej7AAE4_IJuhik649.png
?

為 ZynqberryZero 的嵌入式 Linux 映像配置系統(tǒng)硬件,以在 ZynqberryZero 的 QSPI 閃存和 SD 卡上的設(shè)備樹中查找引導(dǎo)二進(jìn)制文件。

Subsystem AUTO Hardware settings > Advanced bootable images storage Settings下,將映像存儲(chǔ)介質(zhì)更改為用于引導(dǎo)映像設(shè)置的主閃存,并將映像存儲(chǔ)介質(zhì)更改為用于dtb 映像設(shè)置的主 sd。

?
?
?
pYYBAGNh-SGAeJt3AABg2150_qs838.png
?
1 / 2
?

為了在功能方面與 Raspberry Pi Zero 更加匹配,我選擇將根文件系統(tǒng)類型從 initramfs 更改為擴(kuò)展 (EXT)。

The initramfs filesystem is writeable, but not persistent. Thus any changes are lost at each reboot because it is simply a complete set of directories as a normal root filesystem that is compressed into a single cpio archive loaded by the kernel at boot. The extended filesystem is the traditional filesystem type most think of. In this case it is ext4 in PetaLinux.

Change the root filesystem type from INITRAMFS to EXT. And uncheck the option for TFTP boot if you don't plan to boot your ZynqberryZero over a network connection.

poYBAGNh-SWAY7-kAABuyO1NuHs216.png
?

Exit and save the system hardware configuration editor.

Linux Kernel

Next configure kernel in the PetaLinux project by launching the configuration editor:

~/zynqberry_zero_prj/zynqberry_zero_os/$ petalinux-config -c kernel

Use the search function in the kernel configuration editor by pressing the / key at any time. Verify/modify the kernel to configure the following kernel modules:

CONFIG_MII=y
CONFIG_XILINX_GMII2RGMII=y
CONFIG_USB_USBNET=y
CONFIG_USB_NET_AX8817X=y
CONFIG_USB_NET_AX88179_178A=y
CONFIG_USB_NET_CDCETHER=y
# CONFIG_USB_NET_CDC_EEM is not set
CONFIG_USB_NET_CDC_NCM=y
# CONFIG_USB_NET_HUAWEI_CDC_NCM is not set
# CONFIG_USB_NET_CDC_MBIM is not set
# CONFIG_USB_NET_DM9601 is not set
# CONFIG_USB_NET_SR9700 is not set
# CONFIG_USB_NET_SR9800 is not set
# CONFIG_USB_NET_SMSC75XX is not set
CONFIG_USB_NET_SMSC95XX=y
# CONFIG_USB_NET_GL620A is not set
CONFIG_USB_NET_NET1080=y
# CONFIG_USB_NET_PLUSB is not set
# CONFIG_USB_NET_MCS7830 is not set
# CONFIG_USB_NET_RNDIS_HOST is not set
CONFIG_USB_NET_CDC_SUBSET_ENABLE=y
CONFIG_USB_NET_CDC_SUBSET=y
# CONFIG_USB_ALI_M5632 is not set
# CONFIG_USB_AN2720 is not set
CONFIG_USB_BELKIN=y
CONFIG_USB_ARMLINUX=y
# CONFIG_USB_EPSON2888 is not set
# CONFIG_USB_KC2190 is not set
CONFIG_USB_NET_ZAURUS=y
# CONFIG_USB_NET_CX82310_ETH is not set
# CONFIG_USB_NET_KALMIA is not set
# CONFIG_USB_NET_QMI_WWAN is not set
# CONFIG_USB_NET_INT51X1 is not set
# CONFIG_USB_SIERRA_NET is not set
# CONFIG_USB_VL600 is not set
# CONFIG_USB_NET_CH9200 is not set
CONFIG_FB_SIMPLE=y
# CONFIG_FRAMEBUFFER_CONSOLE is not set
CONFIG_SND_SIMPLE_CARD_UTILS=y
CONFIG_SND_SIMPLE_CARD=y
CONFIG_USBIP_CORE=y
# CONFIG_USBIP_VHCI_HCD is not set
# CONFIG_USBIP_HOST is not set
# CONFIG_USBIP_VUDC is not set
# CONFIG_USBIP_DEBUG is not set

這啟用了以太網(wǎng)控制器/USB 集線器芯片 LAN9514 的內(nèi)核驅(qū)動(dòng)程序。退出并保存內(nèi)核的系統(tǒng)硬件配置編輯器。

根文件系統(tǒng)

通過(guò)在 PetaLinux 中啟動(dòng)相應(yīng)的配置編輯器來(lái)配置根文件系統(tǒng):

~/zynqberry_zero_prj/zynqberry_zero_os/$ petalinux-config -c rootfs

啟用以下文件系統(tǒng)包(同樣,您可以隨時(shí)按 / 鍵使用內(nèi)核配置編輯器中的搜索功能來(lái)準(zhǔn)確查找每個(gè)包在菜單中的位置):

i2c-tools
alsa-plugins
alsa-lib-dev
libasound
alsa-conf-base
alsa-conf
alsa-utils
alsa-utils-aplay
busybox-httpd

接下來(lái),為 ZynqberryZero 添加自定義應(yīng)用程序:

~/zynqberry_zero_prj/zynqberry_zero_os$ petalinux-create -t apps --name fbgrab --enable
~/zynqberry_zero_prj/zynqberry_zero_os$ petalinux-create -t apps --name ffmpeg --enable
~/zynqberry_zero_prj/zynqberry_zero_os$ petalinux-create -t apps --name i2cpick --enable
~/zynqberry_zero_prj/zynqberry_zero_os$ petalinux-create -t apps --name rpicam --enable
~/zynqberry_zero_prj/zynqberry_zero_os$ petalinux-create -t apps --name startup --enable
~/zynqberry_zero_prj/zynqberry_zero_os$ petalinux-create -t apps --name webfwu --enable

Trenz 示例設(shè)計(jì)中提供了這些自定義應(yīng)用程序的源文件,因此只需將它們復(fù)制過(guò)來(lái):

從 Trenz 示例設(shè)計(jì)(這只是 bitbake 文件)中刪除 PetaLinux 在 fbgrab 目錄中生成的所有內(nèi)容以及/zbzerodemo1/os/petalinux/project-spec/meta-user/recipes-apps/fbgrab內(nèi)容的副本。

同時(shí)刪除由 PetaLinux 在 ffmpeg 目錄中生成的所有內(nèi)容,并Trenz 示例設(shè)計(jì)(包含源文件的 ffmpeg 文件夾和位烘焙文件)。

對(duì)于 i2cpick、rpicam、startup 和 webfwu,從 Trenz 示例設(shè)計(jì) ( /zbzerodemo1/os/petalinux/project-spec/meta-user/recipes-apps//files ) 復(fù)制它們各自文件目錄的內(nèi)容) 到 PetaLinux 項(xiàng)目中的文件目錄 ( /zynqberry_zero_prj/zynqberry_zero_os/project-spec/meta-user/recipes-apps//files )

由于某種原因,ZynqberryZero 示例設(shè)計(jì)中缺少 TE 音頻編解碼器內(nèi)核模塊,因此我從我的主要 Zynqberry PetaLinux 項(xiàng)目中復(fù)制了它。

pYYBAGNh-SiAEk8cAABJxn4l-2c938.png
?

并將以下行添加到/zynqberry_zero_prj/zynqberry_zero_os/project-spec/meta-user/conf中的user-rootfsconfig中,以便根文件系統(tǒng)配置編輯器獲取它,以便我可以返回并在模塊下啟用它(運(yùn)行 petalinux-config - c rootfs 再次)。

CONFIG_te-audio-codec
?
?
?
poYBAGNh-SuAa7JSAABLnctAmuQ473.png
?
1 / 3 ?啟用用戶添加的應(yīng)用程序。
?

最后,將 Trenz 示例設(shè)計(jì) ( /zbzerodemo1/os/petalinux/project-spec/meta-user/recipes-core ) 中的 recipes-core recipe 文件夾復(fù)制到 PetaLinux 項(xiàng)目中的 meta-user 文件夾:/zynqberry_zero_prj/zynqberry_zero_os/項(xiàng)目規(guī)范/元用戶/。

poYBAGNh-TGAbd15AABYsbQnqaM918.png
?

這個(gè)秘籍包含基本的 TCP/IP 網(wǎng)絡(luò)初始化腳本和配置文件,它們是在 Linux 映像中配置網(wǎng)絡(luò)接口的高級(jí)工具。ZynqberryZero 的以太網(wǎng)控制器/USB 集線器芯片 LAN9514 允許它通過(guò) microUSB 轉(zhuǎn)以太網(wǎng)適配器連接到網(wǎng)絡(luò),例如:

因此,您會(huì)注意到網(wǎng)絡(luò)接口在配方中的接口文件中被建立為以太網(wǎng)端口 (eth0)。

設(shè)備樹

為了讓內(nèi)核能夠查看系統(tǒng)中可用的硬件,需要將適當(dāng)?shù)墓?jié)點(diǎn)添加到與Vivado 中的模塊設(shè)計(jì)相關(guān)的設(shè)備樹中。

將以下設(shè)備樹節(jié)點(diǎn)添加到/ zynqberry_zero_prj/zynqberry_zero_os/project-spec/meta-user/recipes-bsp/device-tree/files中的system-user.dtsi

/include/ "system-conf.dtsi" 
/{
};

/{
    #address-cells = <1>;
    #size-cells = <1>;
  
    reserved-memory {
        #address-cells = <1>;
        #size-cells = <1>;
        ranges;
		
        hdmi_fb_reserved_region@1FC00000 {
            compatible = "removed-dma-pool";
            no-map;
            reg = <0x1FC00000 0x400000>;
        }; 
    };
  
    hdmi_fb: framebuffer@0x1FC00000 {           
        compatible = "simple-framebuffer";
        
        reg = <0x1FC00000 (1280 * 720 * 4)>;    
        width = <1280>;                         
        height = <720>;                       
        stride = <(1280 * 4)>;                 
        format = "a8b8g8r8";
        status = "okay";
    };
 
    vcc_3V3: fixedregulator@0 {
        compatible = "regulator-fixed";
        regulator-name = "vccaux-supply";
        regulator-min-microvolt = <3300000>;
        regulator-max-microvolt = <3300000>;
        regulator-always-on;
    };
};

&qspi {
    #address-cells = <1>;
    #size-cells = <0>;
    status = "okay";
    flash0: flash@0 {
        compatible = "jedec,spi-nor";
        reg = <0x0>;
        #address-cells = <1>;
        #size-cells = <1>;
        spi-max-frequency = <50000000>;
        partition@0x00000000 {
            label = "boot";
            reg = <0x00000000 0x00500000>;
        };
        partition@0x00500000 {
            label = "bootenv";
            reg = <0x00500000 0x00020000>;
        };
        partition@0x00520000 {
            label = "kernel";
            reg = <0x00520000 0x00a80000>;
        };
        partition@0x00fa0000 {
            label = "spare";
            reg = <0x00fa0000 0x00000000>;
        };
    };
};

&video_out_axi_vdma_0 {
	status = "disabled";	
};

&video_in_axi_vdma_1 {
	status = "disabled";
};

&gpio0 {
    interrupt-controller;
    #interrupt-cells = <2>;
};
  
/* I2C1 */  
&i2c1 {
	#address-cells = <1>;
	#size-cells = <0>;

	i2cmux: i2cmux@70  {
		compatible = "nxp,pca9540";
		#address-cells = <1>;
		#size-cells = <0>;
		reg = <0x70>;

		ID_I2C@0 {
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <0>;
		};
		CSI_I2C@1 {
			#address-cells = <1>;
			#size-cells = <0>;
			reg = <1>;
		};
	};

};

/* USB */  
/{
    usb_phy0: usb_phy@0 {
        compatible = "ulpi-phy";
        #phy-cells = <0>;
        reg = <0xe0002000 0x1000>;
        view-port = <0x0170>;
        drv-vbus;
    };
};
  
&usb0 {
    usb-phy = <&usb_phy0>;
};

您可能已經(jīng)注意到,我沒有使用Trenz的示例設(shè)計(jì)中提供的system- user.dtsi...

我在 Vivado 中創(chuàng)建基礎(chǔ)硬件設(shè)計(jì)時(shí)提到過(guò),兩個(gè) AXI Video DMA IP 模塊在模塊設(shè)計(jì)中都被命名為axi_vdma_0,這導(dǎo)致 Vivado 嘗試將它們映射到 DDR 中的相同地址空間。在示例設(shè)計(jì)中提供的設(shè)備樹中,同樣的錯(cuò)誤出現(xiàn)在視頻輸入和視頻輸出的視頻 DMA 塊的兩個(gè)節(jié)點(diǎn)的標(biāo)題為axi_vdma_0。這會(huì)阻止 PetaLinux 項(xiàng)目成功構(gòu)建,因此我再次將節(jié)點(diǎn)中的視頻更改為名為axi_vdma_1 ( &video_in_axi_vdma_1 ),因此它現(xiàn)在與硬件平臺(tái)中的硬件節(jié)點(diǎn)名稱匹配,并且嵌入式 Linux 映像不會(huì)嘗試使用相同的視頻視頻輸入和視頻輸出的 DMA 節(jié)點(diǎn)。

由于我使用的是 512MB 版本,因此我還刪除了 128MB 版本的 ZynqberryZero 的一堆無(wú)關(guān)注釋和所有硬件配置。

構(gòu)建 PetaLinux 項(xiàng)目

為 ZynqberryZero 配置和定制項(xiàng)目后,構(gòu)建 PetaLinux 項(xiàng)目:

~/zynqberry_zero_prj/zynqberry_zero_os/$ petalinux-build

通過(guò)在前面的步驟中進(jìn)行的適當(dāng)修改,此時(shí)應(yīng)該會(huì)成功。

生成引導(dǎo)二進(jìn)制文件

成功構(gòu)建 PetaLinux 項(xiàng)目后,您將看到所有輸出文件,例如內(nèi)核映像、根文件系統(tǒng)、Zynq FSBL ELF 文件等都輸出到 PetaLinux 的/zynqberry_zero_prj/zynqberry_zero_os/images/linux目錄中項(xiàng)目。唯一不存在的是啟動(dòng)二進(jìn)制文件,它是使用以下命令手動(dòng)生成的:

~/zynqberry_zero_prj/zynqberry_zero_os$ petalinux-package --boot --fsbl ./images/linux/zynq_fsbl.elf --fpga ./images/linux/system.bit --u-boot

由于您可以根據(jù)配置 Linux 映像和硬件的方式將不同的東西打包到引導(dǎo)二進(jìn)制文件中,這就是為什么它不會(huì)在 PetaLinux 項(xiàng)目構(gòu)建中自動(dòng)生成的原因。在這種情況下,我將 Zynq FSBL、FPGA 比特流和 U-BOOT 包含在啟動(dòng)二進(jìn)制文件中。

加載 SD 卡

準(zhǔn)備一張 MircoSD 卡(至少 8GB,10 類),用 500MB 大小的 FAT32 分區(qū)進(jìn)行分區(qū),并在其前面留出 4MB 可用空間。然后將 SD 卡的其余部分設(shè)為 EXT4 分區(qū):

pYYBAGNh-TWAf4kLAAA_G6shLQw338.png
?

此分區(qū)方案符合 PetaLinux 用戶指南 ( UG1144 )。FAT32 分區(qū)是內(nèi)核映像和設(shè)備樹文件所在的位置,而 EXT4 分區(qū)是根文件系統(tǒng)所在的位置。

對(duì) SD 卡進(jìn)行分區(qū)后,將每個(gè)分區(qū)適當(dāng)?shù)貟燧d到主機(jī)系統(tǒng)上的某個(gè)點(diǎn):

~$ sudo mount /dev/sdc1 /media/BOOT
~$ sudo mount /dev/sdc2 /media/rootfs

將內(nèi)核映像和設(shè)備樹文件復(fù)制到第一個(gè) (FAT32) 分區(qū):

~$ sudo cp ./zynqberry_zero_prj/zynqberry_zero_os/images/linux/image.ub /media/BOOT/
~$ sudo cp ./zynqberry_zero_prj/zynqberry_zero_os/images/linux/system.dtb /media/BOOT/

并將根文件系統(tǒng)解壓縮到第二個(gè)(EXT4)分區(qū):

~$ sudo tar xvf ./zynqberry_zero_prj/zynqberry_zero_os/images/linux/rootfs.tar.gz -C /media/rootfs/

運(yùn)行同步命令以確保文件傳輸已經(jīng)完全完成(你不能總是相信僅僅因?yàn)槊钚斜环祷亟o你,傳輸實(shí)際上已經(jīng)完成——我已經(jīng)學(xué)會(huì)了這個(gè)艱難的方式):

~$ sync

最后卸載每個(gè)分區(qū)以從主機(jī) PC 中彈出 SD 卡:

~$ sudo umount /media/BOOT/
~$ sudo umount /media/rootfs/

在 Vitis 中創(chuàng)建 QSPI 引導(dǎo)應(yīng)用程序

CLG225 封裝中的 Xilinx Zynq 器件,例如同時(shí)用于 Zynqberry 和 ZynqberryZero 的器件,不支持直接從 SD 卡啟動(dòng)。因此,您必須從 QSPI 執(zhí)行主引導(dǎo) (Zynq FSBL)。因此,需要將引導(dǎo)二進(jìn)制文件 (BOOT.BIN) 編程到 ZynqberryZero 的 QSPI 閃存中,因?yàn)樗?Zynq FSBL。

為了將引導(dǎo)二進(jìn)制映像放到 ZynqberryZero 的 QSPI 上,我們需要一個(gè)不同的 FSBL 來(lái)從 JTAG 引導(dǎo) Zynq 的 ARM 內(nèi)核以進(jìn)行編程。為此,我們將在 Vitis 中創(chuàng)建一個(gè) FSBL 嵌入式應(yīng)用程序。我正在使用我在上一個(gè)項(xiàng)目帖子中為 ZynqberryZero 創(chuàng)建的相同 Vitis 工作區(qū)。

在為 FSBL 創(chuàng)建嵌入式應(yīng)用程序之前,BSP(板級(jí)支持包)需要添加 Xilinx FAT 文件系統(tǒng) (FFS) 庫(kù) xilffs。從 Vitis 的資源管理器窗口中打開platform.spr。在 ps7_cortex9_0 上的 Standalone下選擇Board Support Package , Modify BSP Settings...按鈕將出現(xiàn)在右側(cè)的窗口中。

在為板級(jí)支持包設(shè)置彈出的窗口的概述選項(xiàng)卡中,您將看到可以在 BSP 中啟用的庫(kù)列表。選中xilffs旁邊的框,然后單擊OK。

pYYBAGNh-T2AcvJMAALCL_qtpRQ336.png
?

使用 ctrl+B 重建平臺(tái)。

接下來(lái)通過(guò)選擇New > Application Project...創(chuàng)建一個(gè)新的應(yīng)用程序項(xiàng)目

poYBAGNh-USAUfB6AACQhH8EVyI065.png
?

為項(xiàng)目指定所需的名稱,選擇為其創(chuàng)建新系統(tǒng)項(xiàng)目的選項(xiàng)。選擇 ZynqberryZero 自定義平臺(tái)項(xiàng)目作為其基礎(chǔ),并以 C 語(yǔ)言中的 Zynq 的 ARM-core 0 處理器為目標(biāo)。最后,為其選擇 Zynq FSBL 應(yīng)用程序模板。

?
?
?
pYYBAGNh-UaAHWmwAACVRcexuVM589.png
?
1 / 4 ?命名應(yīng)用程序并選擇創(chuàng)建新系統(tǒng)項(xiàng)目的選項(xiàng)。
?

打開 main.c 并從第 286 行開始進(jìn)行以下修改:

/*
 * Print the FSBL Banner
 */
fsbl_printf(DEBUG_GENERAL,"\n\rXilinx First Stage Boot Loader \n\r");
fsbl_printf(DEBUG_GENERAL,"Release %d.%d %s-%s\r\n", SDK_RELEASE_YEAR, SDK_RELEASE_QUARTER,__DATE__,__TIME__);

xil_printf("\r\n--------------------------------------------------------------------------------\r\n");
xil_printf("Xilinx Zynq First Stage Boot Loader to write QSPI Flash (TE modified) \n\r");
xil_printf("Release %d.%d %s-%s\r\n", SDK_RELEASE_YEAR, SDK_RELEASE_QUARTER, __DATE__,__TIME__);
#ifdef XPAR_PS7_DDR_0_S_AXI_BASEADDR

/*
 * DDR Read/write test 
 */
//	Status = DDRInitCheck();
//	if (Status == XST_FAILURE) {
//		fsbl_printf(DEBUG_GENERAL,"DDR_INIT_FAIL \r\n");
//		/* Error Handling here */
//		OutputStatus(DDR_INIT_FAIL);
//		/*
//		 * Calling FsblHookFallback instead of Fallback
//		 * since, devcfg driver is not yet initialized
//		 */
//		FsblHookFallback();
//	}

然后從第 382 行開始添加 JTAG 引導(dǎo)模式掩碼:

/*
 * Read bootmode register
 */
BootModeRegister = Xil_In32(BOOT_MODE_REG);
BootModeRegister &= BOOT_MODES_MASK;
BootModeRegister = JTAG_MODE;

這些編輯只是禁用 DDR 讀/寫測(cè)試,因?yàn)樗皇潜匦璧模⒁龑?dǎo)模式掩碼更改為 JTAG 引導(dǎo)模式。

保存 main.c 并構(gòu)建應(yīng)用程序項(xiàng)目。

poYBAGNh-UyAGJpVAAPRE6zPhPE368.png
?

閃存 QSPI

創(chuàng)建用于編程的 FSBL 后,插入沒有 SD 卡的 ZynqberryZero:

pYYBAGNh-WyAD3pcAAmgh84TaBQ967.png
?

在 Explorer 窗口中右鍵單擊 FSBL 應(yīng)用程序項(xiàng)目名稱,然后選擇Program Flash。

在彈出的對(duì)閃存進(jìn)行編程的窗口中,瀏覽到/zynqberry_zero_prj/zynqberry_zero_os/images/linux/中的 BOOT.BIN以獲取Image File和 JTAG FSBL ELF 文件: /zynqberry_zero_prj/vitis_??workspace/qspi_flash_app/Debug/ qspi_flash_app.elf對(duì)于FSBL 文件。

選中復(fù)選框以在閃爍后單擊程序進(jìn)行驗(yàn)證。

?
?
?
pYYBAGNh-XCAEeAzAAHxaABWhHQ733.png
?
1 / 2
?

等待控制臺(tái)讀出閃存操作成功。

poYBAGNh-XiAe6YZAANigxVnxYs307.png
?

啟動(dòng) ZynqberryZero

從您的主機(jī) PC 上拔下 ZynqberryZero 并將準(zhǔn)備好的 SD 卡插入 SD 卡插槽。以 115200 的波特率打開您選擇的串行終端應(yīng)用程序。

pYYBAGNh-Y2ADVDHAAhy_FAccqg561.png
?

插入 ZynqberryZero 并使用串行終端應(yīng)用程序連接到其 UART。由于 PetaLinux 項(xiàng)目已配置為在SD 卡。

由于在 u-boot 引導(dǎo)加載程序期間引導(dǎo)會(huì)失敗,它會(huì)自動(dòng)啟動(dòng)到 u-boot 終端,在這種情況下,命令行中的 Zynq> 表示:

Zynq>

使用以下兩個(gè)命令定義 u-boot 中的命令以從 SD 卡加載內(nèi)核映像和設(shè)備樹文件:

Zynq> setenv cp_kernel2ram 'fatload mmc 0 ${netstart} ${kernel_img}'
Zynq> setenv cp_dtb2ram 'fatload mmc 0 ${dtbnetstart} ${dtb_img}'

設(shè)置默認(rèn)啟動(dòng)命令以運(yùn)行從 SD 卡加載內(nèi)核映像和設(shè)備樹文件的命令

Zynq> setenv default_bootcmd 'run cp_kernel2ram && run cp_dtb2ram && bootm ${netstart} - ${dtbnetstart}'

然后設(shè)置引導(dǎo)參數(shù)以指定根文件系統(tǒng)在 SD 卡上的設(shè)備節(jié)點(diǎn)和根文件系統(tǒng)的類型:

Zynq> setenv bootargs 'console=ttyPS0,115200 earlyprintk root=/dev/mmcblk0p2 rootfstype=ext4 ru rootwait'

最后,保存新的u-boot環(huán)境。這會(huì)將新命令寫入引導(dǎo)二進(jìn)制文件所在的 QSPI 閃存:

Zynq> saveenv

并啟動(dòng) ZynqberryZero:

Zynq> boot

此時(shí),您將看到正常的啟動(dòng)順序開始并最終將您帶到登錄。除非在 PetaLinux 項(xiàng)目中另外修改,否則用戶名和密碼都是root :

poYBAGNh-Z6AE6hIAAPRtNOaD9Q650.png
?

如您所見,讓 PetaLinux 在 Zynqberry 和 ZynqberryZero 板上運(yùn)行可能有點(diǎn)棘手,因?yàn)樗鼈儾荒苤苯訌?SD 卡啟動(dòng)。但仍然是我最喜歡的小型 FPGA 開發(fā)板之一!


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)