zoukankan      html  css  js  c++  java
  • ZYNQ之uboot,kernel,设备树,文件系统生成(转载)

     转载自:https://www.cnblogs.com/huakaimanlin/p/9055800.html

      Vivado:2016.4

      Linux:Ubuntu16.4

      ZYNQ:xc7z020

      

      下载文件名称

      2016.4-zed-release.tar.xz

      device-tree-xlnx-xilinx-v2016.4.zip

      linux-xlnx-xilinx-v2016.4.zip

      u-boot-xlnx-xilinx-v2016.4.zip

      arm_ramdisk.image.gz

    一、环境搭建

      请参考博客:https://blog.csdn.net/flyingforever_wl/article/details/8097059

      环境搭建好后在.bashrc 中设置环境变量:

      export ARCH=arm
      export CROSS_COMPILE=arm-xilinx-linux-gnueabi-
      export PATH=/root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/:$PATH

    二、编译u-boot

      1). 将下载好的u-boot-xlnx-xilinx-v2016.4.zip 解压 unzip u-boot-xlnx-xilinx-v2016.4.zip

      修改DDR的大小:

      许多教程里面是Vivado2016.2之前的版本,修改DDR的方法为修改include/configs/zynq_zed.h文件

      

      Vivado2016.4里zynq_zed.h 中没有找到这该宏定义,于是去翻github,发现vivado2016.2中才把此宏定义删除的,转为由dts文件定义,如下图

      

      刚开始以为是在devicetree.dtb中修改即可,发现修改后并不生效,尝试多次终于发现在u-boot文件夹中也有个dts文件夹,其中有zynq-zed.dts文件中定义了设备树。

      因此此处需要修改的是uboot文件夹中arch/arm/dts/zynq-zed.dts 中DDR设备树的定义大小,如下图

      

      至此,DDR的大小修改完成 

      注意:uboot中arch/arm/dts/zynq-zed.dts文件最好跟生成devicetree.dtb的设备树文件保持一致

      2). 进入解压目录,生成编译脚本:make zynq_zed_config

      3). make -j8

      4) mv u-boot u-boot.elf 

      注意:此处一定要将u-boot转换成u-boot.elf后在生成烧写文件

     二、编译kernel

      1). 解压kernel文件linux-xlnx-xilinx-v2016.4.zip: unzip linux-xlnx-xilinx-v2016.4.zip

      2). make xilinx_zynq_defconfig

      3). make UIMAGE_LOADADDR=0x8000 uImage  -j8

      编译完成后生成的uImage在arch/arm/boot目录下 

    三、uramdisk修改官方根文件系统

      1). 解压压缩包: gunzip arm_ramdisk.image.gz

      2). chmod u+rwx arm_ramdisk.image

      3). 创建目录并挂载ramdisk:mkdir file_system; mount arm_ramdisk.image file_system

      4). 修改file_system内容,由于我们未使用到sd卡,因此将/etc/fstab中的最后两行删除掉:

      

      5). 完成修改后umount file_system

      6). 压缩文件系统:gzip arm_ramdisk.image

      7). mkimage -A arm -T ramdisk -C gzip -d arm_ramdisk.image.gz uramdisk.image.gz

      参考链接:http://www.wiki.xilinx.com/Build%20and%20Modify%20a%20Rootfs

    四、devicetree.dtb生成

      1). devicetree的生成依赖于FPGA工程中ZYNQ的配置,方法请参考:http://blog.chinaaet.com/cuter521/p/5100001052

      2). 我的bootargs设置是:

      

      其中QSPI部分的描述根据uboot中arch/arm/dts/zynq-zed.dts中对QSPI的描述进行修改,因为我最终是要用到QSPI FLASH启动因此需要对QSPI FLASH进行分区设置

      修改好dts文件后,将pl.dtsi skeleton.dtsi system.dts zynq-7000.dtsi文件拷贝到ubuntu下:

      

      使用命令生成devicetree.dtb文件:dtc -I dts -O dtb -o devicetree.dtb system.dts 

      合成BOOT.mcs

      利用Vivado SDK生成BOOT.mcs

      1).SDK软件中Xilinx Tools 下Create Boot Image

      

      2). 添加生成BOOT.mcs所需文件,注意顺序:

      

      其中FSBL.elf 和u-boot.elf不需要设置offset,uImage、devicetree.dtb、uramdisk.image.gz这三个文件的偏移地址需要根据devicetree.dtb中描述的QSPI Flash中对应地址一致

      

       生成BOOT.mcs后,在Xilinx Tools/ Program Flash 对QSPI进行烧写

      烧写完成后一切正常的话串口会看到打印信息

      

      

      linux下更新FPGA的方法:

      http://www.wiki.xilinx.com/Programming+the+Programmable+Logic  

      附上环境搭建及编译过程中遇到的一些错误及解决办法:

      U-boot编译时出现错误fatal error:openssl/evp.h: No such file or derectory 解决:apt-get install libssl-dev    

      问题:dtc:command not found
      解决:apt-get install device-tree-compiler
      问题:fatal error curses.h no such file or directory
      解决:apt-get install libncurses5-dev

      u-boot 启动后找不到网络

      问题在于vivado配置ZYNQ的时候,选中的eth没有选择对应的MDIO。
      解决方法:在vivado中选中MDIO后重新编译生成bit文件,重新导出hardware,重新产生FSBL。
      不能直接生成FSBL,需要重新生成hardware文件后重新生成FSBL

      内核编译:

      错误: "mkimage" Command not found
      解决: apt-get install u-boot-tools

      内核启动时出现错误

      Copying Linux from QSPI flash to RAM...

      SF: Unsupported flash IDs: manuf 00, jedec 0000, ext_jedec 0000
      Failed to initialize SPI flash at 0:0 (error -93)

      是由于内核启动命令中sf probe 0 0 0 &这句参数不对,应该修改为sf probe 0 &

      在uboot目录下./include/configs/zynq-common.h文件中修改

  • 相关阅读:
    MFC画图(画线、画矩形、画刷画笔的使用)
    VC保证应用程序只有一个实例在运行
    MFC字体(一)(控件文字字体)
    获得当前程序路径
    CDC,CPaintDC,CClientDC,CWindowDC
    vc写csv文件
    【MFC学习】之CFileDialog
    MFC集合类的使用
    MFC字体(二)(控件字体颜色)
    键盘事件响应
  • 原文地址:https://www.cnblogs.com/I-L-o-v-e-z-h-o-u/p/9933443.html
Copyright © 2011-2022 走看看