zynq qspi 增加jtag调试和固件升级设置,启动镜像。

3 篇文章 0 订阅
2 篇文章 0 订阅

最近这几天想固件升级的问题,开始考虑双u-boot,然后在fsbl里面增加一个多镜像的操作,增加一段代码驱动网络,和升级软件对码成功后,跳转到第一个u-boot,自动运行cmd从tftp上下载BOOT.bin,deivcetree.dtb,uImage和一个装有格式化emmc的小软件uramfs.image.gz,用于启动运行格式化后重启,串口全程输出文字信息,必要点灯提示。如果对码不成功跳转另一个u-boot,全程串口无任何输出,点灯提示开机进度。感觉还是很麻烦,要是u-boot能格式化,emmc就好了,文件系统统统放到这个上面,都不用uramfs.image.gz了,网上看到三星的u-boot实现了类似的fdisk的功能,手里的4412开发板的u-boot是13年的,和现在的u-boot都一些变化,并不能简单的移植,留到以后就是了,感觉很好的功能。目前没必要做得那么麻烦直接做成一个uboot三个命令

一个是升级内核+挂载nfs文件系统+升级nfs设备树,目的是调试。

一个是升级qspi里面的升级三个设备树(只有bootargs不同而已分别是,nfs文件系统:ramfs文件系统:emmc

对应得文件系统)+升级内核+升级文件系统+更新emmc里面的文件系统,只是单纯升级。

最后一个是启动从qspi内核里面加载设备树和内核,默认直接挂载emmc上面的文件系统,进入系统并运行相机的程序。

emmc目前分区还没有想,留到以后32Mqspi的分区规划就是

(FSBL+u-boot)1M:(ramdiskfsboottree)0x2000:(emmcfsboottree)0x2000:(kernel)6M:(ramfs)6M

加在一起不过16M剩余16M用于存储FPGA的bit足够用了。

编译内核不用做更改直接

make distclean

make xilinx_zynq_defconfig

make UIMAGE_LOADADDR=0x8000 uImage -j8

生成镜像即为可用镜像uImage

设备树还是在通过SDK里面拷贝文件到内核的cripts/dtc vim system-top.dts 直接更改bootargs参数

准备三套bootargs mmc留以后添加

挂载nfs文件系统的bootargs=console=ttyPS0,115200 earlyprintk root=/dev/nfs nfsroot=192.168.0.50:/tftpboot/rootfs,tcp ip=192.168.0.10:192.168.0.50 rw

挂载ramdiskfs文件系统的bootargs=console=ttyPS0,115200 earlyprintk root=/dev/ram0 rw

分别对应devicetreenfs.dtb、devicetreeramfs.dtb和devicetreestup.dtb

之前在网上搜索到一个

点击打开链接

它这个里面调试的时候bootargs=console=ttyPS0,115200 root=/dev/nfs rw nfsroot=192.168.0.50:/tftpboot/rootfs ip=192.168.0.10:192.168.0.50:192.168.0.1:255.255.255.0::ens33:off earlyprintk rootwait

看上去挺对的,但是就是会挂载失败,然后内核hang()

准备好设备树后准备u-boot

内核和u-boot的配置都对应着一个.config,一个.h文件。

u-boot-xlnx-master/configs/zynq_zed_defconfig 

里面CONFIG_SYS_PROMPT="Zynq> "更改"Vision> " 其实这里面没什么要更改的

注意CONFIG_SYS_TEXT_BASE=0x4000000,内存的便宜地址 链接脚本会用到

u-boot-xlnx-master/arch/arm/dts/zynq-zed.dts 这里面有需要更改的就是串口和内存大小

老版本的u-bootu-boot-xlnx-master/include/configs/zynq_zed.h里面修改,17板的就不用更改这个头文件了,已经不存在了,我也找一阵子,我的板子用的是uart0不是uart1,然后就是内存的大小。其余的几乎都不用更改,

aliases {
ethernet0 = &gem0;
serial0 = &uart0;
spi0 = &qspi;
mmc0 = &sdhci0;
};
memory@0 {
device_type = "memory";
reg = <0x0 0x40000000>;
};

u-bootu-boot-xlnx-master/include/configs/zynq-common.h文件里面需要修改的是增加启动命令,我只增加两个

"bootnfs=echo boot from tftpsever mount nfs ...&& "\

  “tftpboot 0x2080000 uImage && ”\

 "tftpboot 0x2000000 devicetreenfs.dtb &&"\

  “bootm 0x2080000 - 0x2000000 \0”\

"updata= echo uodata qspi format emmc...&&"\

  "sf probe 0 0 0 && " \

"sf erase 0x0 0x100000 && " \
"tftpboot ${kernel_load_address} BOOT.bin && " \
"sf write ${kernel_load_address} 0x0  ${filesize}&&" \

 "sf erase 0x100000 0x20000 && " \

 "tftpboot ${kernel_load_address} devicetreeramfs.dtb && " \

 "sf write ${kernel_load_address} 0x100000  ${filesize}&&" \

 "sf erase 0x120000 0x20000 && " \
  "tftpboot ${kernel_load_address} devicetreemmc.dtb&& " \
  "sf write ${kernel_load_address} 0x120000  ${filesize}&&" \

 "sf erase 0x140000 0x500000 && " \
 "tftpboot ${kernel_load_address} uImage && " \
  "sf write ${kernel_load_address} 0x140000  ${filesize}&&" \

 "sf erase 0x640000 0x5E0000 && " \
 "tftpboot ${kernel_load_address} uramdisk.image.gz && " \
  "sf write ${kernel_load_address} 0x640000  ${filesize}&&" \

 “echo Use new framework to boot && run bootstart \0\”

"bootstart = echo Copying Linux form qspi flash to ram ... &&"\

  "sf probe 0 0 0 && " \
"sf read 0x2080000 0x140000 0x500000 && " \
"sf read 0x200000 0x100000 0x20000 && " \
"echo Copying ramdisk... && " \
"sf read 0x4000000 0x640000 0x5E0000 && " \
"bootm 0x2080000 0x4000000 0x2000000 \0"\

"bootmmc = \0"\

然后在默认的autoboot命令改成bootmmc 正常启动命令,当前调试暂时不用

#if defined(CONFIG_CMD_ZYNQ_RSA)
#define CONFIG_BOOTCOMMAND "run rsa_$modeboot"
#else
#define CONFIG_BOOTCOMMAND "run bootmmc"

IP信息也要添加,可以在win7下ping 192.168.0.50 ping通虚拟机里的Ubuntu 16.04

虚拟机里面安装nfs环境 路径是/tftpboot/rootfs 文件夹 tftpsever可以指定到tftpsever文件夹

我是放到了win7的tftp32的sever上,放在虚拟机上更方便一些。

虚拟机里面ping 一下192.168.0.100 验证链接正常

进入u-boot ping 192.168.0.100 alive ping 192.168.0.50 alive 三网互通

修改完u-boot的设置编译u-boot

make zynq_zed_defconfig

make -j8

cp u-boot u-boot.elf

打开SDK建立FSBL不用修改默认,和u-boot.elf生成BOOT.bin

虚拟机网络文件系统拷贝来自petalinux 17.4生成的,暂时先使用这个,后期再考虑修改。

SDK烧写bin文件,上电启动,链接secureCRT提前按回车,run bootnfs

启动,开始练习驱动,编译好后放到nfs上验证




  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值