ZedBoard上的点灯签名实验(三)linux内核引导

ZedBoard上的点灯签名实验(三)linux内核引导,第1张

经过实验一和实验二我们完成了硬件部分工作,并且将设计导出到SDK, 现在我们希望Linux可以到我们的硬件运行,为此我们需要给Linux一个提示并且告诉它入口在哪里,这些工作就有u-boot 和FSBL来完成,他们就相当于PC机的Bios. u-boot 可以用digilent提供的, 在ZedBoard_linux_Design/boot_image/里边,当然也可以自己编译。现在我们编辑一下FSBL,在SDK中,-->File-->New-->Project-->Xilinx-->Application Project-->next, 然后为我们的工程起个名字,叫FSBL, 其他的默认即可。然后next进入Templates选项卡,在这儿选择Zynq FSBL,然后点Finish。然后在Project Explorer找到-->FSBL-->src-->main.c, 会发现这里边有很多的错误,原因是因为缺少一个库文件造成的,添加#include "xdevcfg.h",所有错误消失。然后找个位置加入下面的代码,

/* Reset the USB */
{
fsbl_printf(DEBUG_GENERAL, "Reset USB...\r\n");

/* Set data dir */
*(unsigned int *)0xe000a284 = 0x00000001;

/* Set OEN */
*(unsigned int *)0xe000a288 = 0x00000001;
Xil_DCacheFlush();
/* For REVB Set data value low for reset, then back high */
#ifdef ZED_REV_A
*(unsigned int *)0xe000a048 = 0x00000001;
Xil_DCacheFlush();
*(unsigned int *)0xe000a048 = 0x00000000;
Xil_DCacheFlush();
#else
*(unsigned int *)0xe000a048 = 0x00000000;
Xil_DCacheFlush();
*(unsigned int *)0xe000a048 = 0x00000001;
Xil_DCacheFlush();
#endif
}

ZedBoard上的点灯签名实验(三)linux内核引导,ZedBoard上的点灯签名实验(三)linux内核引导,第2张

保存后,SDK自动编译,到ZedBoard_Linux_Design/hw/xps_proj/SDK/SDK_Export/FSBL/Debug/找到FSBL.elf.

当然,FSBL也可以用digilent提供的,因为我们的工程对FSBL和u-boot没有任何的改变,我们的硬件改动在比特流文件system.bit里边。这样我们就凑齐了u-boot.bin, system.bit和FSBL.elf, 用这3个文件就可以编译一个完整的BOOT.bin. 在SDK中, -->Xinix Tools-->Create Zynq Boot Image-->添加FSBL.elf路径,然后如图依次添加system.bit 和 u-boot.bin, 最后点Create Image。得到一个新的u-boot.bin, 将其改名为BOOT.bin.这个BOOT.bin就可以替代ZedBoard 自带SD卡上的BOOT.bin,不过这里包含了我们自定义IP。

ZedBoard上的点灯签名实验(三)linux内核引导,ZedBoard上的点灯签名实验(三)linux内核引导,第3张

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2577820.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-07
下一篇 2022-08-07

发表评论

登录后才能评论

评论列表(0条)

保存