问题介绍

由于项目设计需要,需要频繁的更换比特流文件,之前使用petalinux生成的boot.bin每次都需要合并比特流,比较麻烦,遂换了一个uboot版本(米联客默认的u-boot),将bitstream放到了独立于boot.bin的文件中,如图所示。


但是在配置好对应的文件之后,启动系统却发现比特流文件无法被正常的加载,部分日志如下:

reading uEnv.txt
17 bytes read in 11 ms (1000 Bytes/s)
Loaded environment from uEnv.txt
Importing environment from mmc 0...
[INFO] Trying to boot from mmc 0
reading uImage
4176536 bytes read in 274 ms (14.5 MiB/s)
reading devicetree.dtb
14739 bytes read in 16 ms (899.4 KiB/s)
reading system.bit.bin
13321514 bytes read in 825 ms (15.4 MiB/s)
zynq_validate_bitstream: Bitstream is not validated yet (diff 6e)
fpga - loadable FPGA image support

其中**zynq_validate_bitstream: Bitstream is not validated yet (diff 6e)**则代表了bit文件验证失败的情况。然而这个比特流文件之前的启动方式都用的好好的,为什么呢?

问题分析

进一步追寻源头,在设备启动的时候不停的按住回车,停留在uboot的手动启动环节,通过printenv查找对应的启动指令,发现出现验证信息的指令是uboot指令集中的fpga指令,其用法如下:

Usage:
fpga [operation type] [device number] [image address] [image size]
fpga operations:dump  [dev] [address] [size]  Load device to memory bufferinfo  [dev]                   list known device informationload  [dev] [address] [size]  Load device from memory bufferloadp [dev] [address] [size]  Load device from memory buffer with partial bitstreamloadb [dev] [address] [size]  Load device from bitstream buffer (Xilinx only)loadbp        [dev] [address] [size]  Load device from bitstream buffer with partial bitstream(Xilinx only)
Load device from filesystem (FAT by default) (Xilinx only)loadfs [dev] [address] [image size] [blocksize] <interface>[<dev[:part]>] <filename>loadmk [dev] [address]        Load device generated with mkimageFor loadmk operating on FIT format uImage address must includesubimage unit name in the form of addr:<subimg_uname>

可以看到,fpga指令中提供了多种加载方式,如load loadp loadb loadbp等。
而我当前的uboot则使用的是load方式。注意到loadb是有一个提示(xilinx only)的,而我恰好就是使用xilinx生成的bitstream文件,所以在这里试图将load指令改为对应的loadb指令。使用setenv来修改环境变量,使用saveenv保存环境变量。
保存,重新启动。最后bitstream可以正常的被加载!

问题总结

解决了问题,有空还是得想想为什么。
经过资料的查找,可以发现,bitstream存在两种封装格式,一种是直接描述硬件的纯二进制文件,一种是除了纯硬件描述码外,文件头部还封装了比特流信息的,就如上图正常加载比特流文件之后,我们还可以看到芯片型号,生成日期,版本号,名字等信息,这些就是xilinx的特有的比特流文件头部。如果以正常的load方式加载,这些不属于硬件描述的文件头部被当成了硬件描述加载,当然会加载的一塌糊涂。而loadb则会正确的读取出文件头信息,把剩下的硬件描述正确的加载,所以可以正常的被启动起来。

[ZYNQ随笔] uboot移植中bitstream比特流加载问题:zynq_validate_bitstream: Bitstream is not validated yet相关推荐

  1. uboot中环境变量的加载、写入过程详解

    1.uboot启动中环境变量的加载 1.1.uboot加载环境变量流程分析 (1)首先使用默认的环境变量default_environment[]: (2)然后加载SD卡中env分区的环境变量,校验读 ...

  2. zynq7000创建fsbl启动_ZYNQ7000 uboot实现两级引导及加载FPGA程序

    ZYNQ7000 uboot实现两级引导及加载FPGA程序 ​ 这里主要是针对qspi flash启动,然后uboot源码为xilinx-v2019.2版本. 一.启动介绍 ​ zynq一般情况下,我 ...

  3. 照片墙瀑布流加载与阻止加载

    网上大部分主流的瀑布流应用基本都是由后端在提供图片地址的同时提供图片宽高,这样,前端不必等待图片渲染完成,可以根据图片的宽高先把装载图片的容器或父节点先放上页面,完成基础性的布局,再让图片以渐变或其他 ...

  4. java web配置dll文件_JavaWeb项目中dll文件动态加载方法解析(详细步骤)

    相信很多做Java的朋友都有过用Java调用JNI实现调用C或C++方法的经历,那么Java Web中又如何实现DLL/SO文件的动态加载方法呢.今天就给大家带来一篇JAVA Web项目中DLL/SO ...

  5. u-boot的linux内核映像加载,基于U_Boot的Linux内核映像加载与引导功能实现.pdf

    基于U_Boot的Linux内核映像加载与引导功能实现 20 10 8 ( ) Aug . 2010 10 4 Journal of Langfang T eachers College( N atu ...

  6. java 根据类名示例化类_如何使用示例从Java中的类路径加载资源

    java 根据类名示例化类 Java中的类路径不仅用于加载.class文件,而且还可以用于加载资源,例如属性文件,图像,图标,缩略图或任何二进制内容. Java提供了API来将这些资源读取为Input ...

  7. 如何使用示例从Java中的类路径加载资源

    Java中的类路径不仅用于加载.class文件,而且还可以用于加载资源,例如属性文件,图像,图标,缩略图或任何二进制内容. Java提供了API来将这些资源读取为InputStream或URL. 假设 ...

  8. layui流加载及传参

    <ul class="shop-list ml10 mr10 store_list" id='demo' style="margin-top:80px;" ...

  9. js图片加载效果(延迟加载+瀑布流加载)

    概述 两种图片加载的效果:一种是遇到图片较多时,带读条效果的加载提示:另一种是根据滑块的位置进行预加载,用户不察觉的情况下,实现瀑布流的加载效果 详细 代码下载:http://www.demodash ...

最新文章

  1. 数据库学习之(6)了解数据库触发器
  2. 鸟哥的Linux私房菜(基础篇)-第一章、Linux是什么(一.2. Torvalds的Linux发展)
  3. Git 修改分支的名称(亲测)
  4. oracle中触发器只能用于表吗,Oracle触发器的分类和使用
  5. C++ Primer 有感(重载操作符)
  6. 去除html标签的工具类,Java正则匹配过滤移除html标签以及获取img完整标签工具类...
  7. git push 提示:更新被拒绝,因为您当前分支的最新提交落后于其对应的远程分支。的解决办法
  8. Mac勿扰模式使用技巧
  9. vs 2005 sp1 安装失败的解决方案 安装VS2005 sp1的方法
  10. 算丰征途「SOPHON盘古无人驾驶系统」基本框架介绍
  11. Java 菜鸟入门 | 常用进制转换
  12. vue+echarts 地图实现三级下钻
  13. Windows 10 下生成 ssh 密钥
  14. C语言删除字符串中的单词
  15. 自学编程之前,你需要知道这些
  16. aardio - MsSql数据库+虚表示例
  17. kanzi案例Coin
  18. springboot+阿里云短信 找不到本地包 解决
  19. windows10搭建私有云服务(使用webdav服务端和公网端口映射)
  20. 电动车电池管理系统c语言实训,电动车控制器C语言源代码复习课程.doc

热门文章

  1. 利用Python递归下载文件夹下所有文件
  2. 计算机组成原理(第三版)唐朔飞-第六章计算机的运算方法-课后习题(1-16)
  3. 这个“通用控制”功能太好用了!赶紧升级吧!
  4. 一机玩转docker之七:搭建bamboo
  5. TWAIN学习笔记004 TWAIN砖头交互
  6. 【Linux】网络入门
  7. 焱老师带你学习MYSQL系列 第二篇 (MYSQL 数据结构)
  8. 分清向量的点乘和叉乘
  9. Vue echarts封装
  10. 点击任务栏,没反应,并可能出现白屏的情况