【Z-turn Board试用体验】+引导kernel - 问答 - 电子技术论坛 - 最好最受欢迎电子论坛!

【Z-turn Board试用体验】+引导kernel

blackroot ( 楼主 ) 2015-7-25 09:18:00  只看该作者 倒序浏览
本帖最后由 blackroot 于 2015-7-25 09:34 编辑

接上一章内容,QSPI Flash里面首先烧写u-boot之后,我继续烧写uImage devicetree ramdisk三个文件,我把所有需要的文件都用SDK的工具合成一个.mcs的文件一起用program flash烧进flash,然后上电从flash启动,启动到u-boot,内核开始被引导!!!
我的做法是:首先根据编译出来的u-boot文件,重命名为u-boot.elf,在create zynq boot image的时候,配置如下:


这里面 uImage的偏移地址是根据前面f***l.elf  mys_xc7010_trd.bit u-boot.elf的总大小来确定的,我在windows下面得到这三个文件的大小是3,780,608 字节,换成十六进制是0x39B000,如图:


这样就确定了uImage的偏移地址。类似可以确定devicetree.dtb ramdisk的偏移地址。

这些偏移地址是与.../Bootloader/u-boot-xlnx/include/configs/zynq_common.h里面的相关部分对应,对应如下:

这个是直接解压光盘中的bootloader得到的配置

/*"qspiboot=echo Copying Linux from QSPI flash to RAM... && "
  "sf probe 0 0 0 && "
  "sf read 0x3000000 0x100000 ${kernel_size} && "
  "sf read 0x2A00000 0x600000 ${devicetree_size} && "
  "echo Copying ramdisk... && "
  "sf read 0x2000000 0x620000 ${ramdisk_size} && "
  "bootm 0x3000000 0x2000000 0x2A00000" */
这是我根据上面文件的大小,来修改后的。。。。
"qspiboot=echo Copying Linux from QSPI flash to RAM... && "
  "sf probe 0 0 0 && "
  "sf read 0x3000000 0x39B000 ${kernel_size} && "
  "sf read 0x2A00000 0x70E000 ${devicetree_size} && "
  "echo Copying ramdisk... && "
  "sf read 0x2000000 0x713000 ${ramdisk_size} && "
  "bootm 0x3000000 0x2000000 0x2A00000"

因为.../Bootloader/u-boot-xlnx/include/configs/里面还有一个zynq_zturn.h文件,这个文件里面包含了zynq_common.h文件(#include )。。。。

也可以用XMD来烧写:

手动编写.bif文件
XMD% cd E:/project path/boot/qspi/
XMD% notepad qspi_boot_image.bif
在记事本中如下输入。其中,offset的值要根据实际情况来设定,第一个offset的值一定要大于前面3个文件的总大小,依次类推。同时,在u-boot/include/configs/目录下找到相应的配置文件,修改QSPI启动项参数,与offset的值相匹配。注意,由于工具的原因,这里我们需要将uImage重命名为uImage.bin。

  the_ROM_image:
{
   [bootloader]f***l.elf
   mys_xc7010_trd.bit
   u-boot.elf
   [offset= 0x39B000] uImage.bin
   [offset= 0x70E000] devicetree.dtb
   [offset= 0x713000] uramdisk.image.gz
}
保存退出,使用如下命令生成boot.mcs文件。

XMD% bootgen –image qspi_boot_image.bif –o i boot.mcs
连接并初始化ARM

         XMD%connect arm hw
       XMD% source  ps7_init.tcl
       XMD%  ps7_init
通过Jtag加载当前目录的u-boot.elf到Zed上的QSPI Flash

XMD% dow  u-boot.elf
通过Jtag将PC中boot.mcs拷贝到Zed DDR 0x08000000处.

         XMD%dow  -data  boot.mcs0x08000000
执行U-boot。

        XMD% con
在串口终端中,当u-boot在读秒的时按下任意键进入u-boot命令行模式。
在u-boot命令行模式中,对QSPI进行初始化

Zynq-uboot> sf probe 0 0 0
Zynq-uboot> sf erase 0 0x01000000

将DDR 0x08000000处的u-boot.bin拷回QSPI的0x0处

Zynq-uboot> sf write 0x08000000 0 0xFFFFFF
烧写QSPI完毕,关闭开发板电源
设置QSPI启动跳线帽。打开minicom,启动开发板。
观察终端打印信息,当出现Zynq-uboot>提示符时, 说明系统启动完成。
接下来可以做应用开发了。。。。。


0个回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则


关闭

站长推荐上一条 /6 下一条

小黑屋|手机版|Archiver|电子发烧友 ( 湘ICP备2023018690号 )

GMT+8, 2024-8-16 12:47 , Processed in 0.377888 second(s), Total 38, Slave 28 queries .

Powered by 电子发烧友网

© 2015 www.ws-dc.com

微信扫描
快速回复 返回顶部 返回列表