说明

个人还是比较喜欢灵活去管理各个部分的源码。

有关文章:

ZYNQ:PetaLinux提取Linux和UBoot配置、源码

编译Linux

取得Linux源代码和配置后,可以在其中执行make,编译Linux。

注意,编译前请导入PetaLinux环境变量:

  • 设置和导出ARCH为arm或者arm64;
  • 设置和导出CROSS_COMPILE,比如aarch64-linux-gnu-。

编译(通过,但是diff 有差异):

  1. make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- xilinx_peta_defconfig
  2. # xilinx_peta_defconfig 是 我们前文拷贝 .config 得来的。
  3. make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j 2

编译后得到vmlinux

打包 image.ub

kerneldtbrootfs.img打包成image.ub

  • kernel:一般就是linux生成的elf文件。
  • dtb:设备树,与驱动有关。
  • rootfs.img:编译完成的文件系统。

所以,image.ub 没有那么神秘,就是一个包。

使用以下命令:

  1. #!/bin/sh
  2. CROSS_COMPILE=arm-linux-gnueabihf-
  3. ${CROSS_COMPILE}-objcopy -O binary -R .note -R .comment -S vmlinux linux.bin
  4. gzip -9 linux.bin
  5. mv -f linux.bin.gz linux.bin
  6. #需要修改 .its
  7. mkimage -f fit-image-petalinux-user-image.its image.ub

编译 UBoot

取得UBoot源代码和配置后,需要有工具链的环境,编译:

  1. make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- clean
  2. make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- xilinx_peta_defconfig
  3. make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j 2

得到u-boot(实际上就是u-boot.elf

打包 BOOT.BIN

1、需要4个文件:u-boot.elfzynq_fsbl.elfbootgen.bifsystem.bit

  • u-boot.elf :就是uboot编译生成的
  • bootgen.bif :可以自己手写。
  • zynq_fsbl.elf :Vivado创建PS以后,在SDK中创建File-New-Application Project-Zynq FSBL以后Build Project生成的。
  • system.bit :FPGA工程师生成的二进制流,用于PL端烧写的(可以没有)

2、修改bif文件,或者自己搞一个。

  1. #cat build/bootgen.bif
  2. //arch = zynq; split = false; format = BIN
  3. the_ROM_image:
  4. {
  5. [bootloader] /tmp/tmp.SXFL3UZOJ7/zynq_fsbl.elf
  6. /tmp/tmp.SXFL3UZOJ7/system.bit
  7. /tmp/tmp.SXFL3UZOJ7/u-boot.elf
  8. }

3、使用下列命令创建BOOT.BIN

  1. bootgen -arch zynq -image bootgen.bif -o BOOT.BIN -w on
  2. $ bootgen -help
  3. ****** Xilinx Bootgen v2018.3
  4. **** Build date : Nov 15 2018-19:22:29
  5. ** Copyright 1986-2018 Xilinx, Inc. All Rights Reserved.
  6. ------------------------------------------------------------------------------+
  7. COMMAND LINE OPTIONS |
  8. -------------------------------+----------------------------------------------+
  9. -arch [options] | Xilinx Architecture |
  10. | options: [zynq, zynqmp, fpga] |
  11. -------------------------------+----------------------------------------------+
  12. -image <filename> | Input Boot Image File (.bif) |
  13. -------------------------------+----------------------------------------------+
  14. -o <filename> | Output filename in MCS/BIN format |
  15. -------------------------------+----------------------------------------------+
  16. -w [options] | Overwrite mode |
  17. | options: [on, off] |
  18. -------------------------------+----------------------------------------------+
  19. -encrypt [options] | AES Key storage in chip (Zynq only) |
  20. | options: [bbram, efuse] |
  21. -------------------------------+----------------------------------------------+
  22. -p <string> | Part name |
  23. -------------------------------+----------------------------------------------+
  24. -efuseppkbits <filename> | Generate PPK hash for e-fuse |
  25. -------------------------------+----------------------------------------------+
  26. -generate_hashes | Generate SHA hashes (PKCS#1v1.5) |
  27. -------------------------------+----------------------------------------------+
  28. -spksignature <filename> | Generate SPK signature file |
  29. -------------------------------+----------------------------------------------+
  30. -fill <hex-byte> | Fill byte for padding |
  31. -------------------------------+----------------------------------------------+
  32. -split [options] | Split partitions to diff files |
  33. | options: [bin, mcs] |
  34. -------------------------------+----------------------------------------------+
  35. -padimageheader [options] | Pad header tables |
  36. | options: [0, 1] |
  37. -------------------------------+----------------------------------------------+
  38. -process_bitstream [options] | Outputs bitstream in bin/mcs format |
  39. | options: [bin, mcs] |
  40. -------------------------------+----------------------------------------------+
  41. -generate_keys [options] | Generate authentication keys |
  42. | options: [pem, rsa, obfuscatedkey] |
  43. -------------------------------+----------------------------------------------+
  44. -dual_qspi_mode [options] | Generate 2 output files for Dual QSPI |
  45. | options: [parallel, stacked <size>] |
  46. -------------------------------+----------------------------------------------+
  47. -log [options] | Generate log file |
  48. | options: [error, warning, info, debug, trace]|
  49. -------------------------------+----------------------------------------------+
  50. -zynqmpes1 | Generate boot image for (1.0)ES1 |
  51. -------------------------------+----------------------------------------------|
  52. -nonbooting | Generate an intermediate boot image |
  53. -------------------------------+----------------------------------------------|
  54. -encryption_dump | Generate encryption log file |
  55. -------------------------------+----------------------------------------------+
  56. -h | -help | Print the help summary |
  57. -------------------------------+----------------------------------------------+
  58. -bif_help | Print the BIF help summary |
  59. -------------------------------+----------------------------------------------+
  60. Note : For more info on bootgen options, use the command |
  61. bootgen -help <option> |
  62. Example : bootgen -help efuseppkbits |
  63. ------------------------------------------------------------------------------+

bootgen 打包脚本

  1. #/* @file package_BOOT.BIN.sh
  2. #* @brief 打包BOOT.BIN
  3. #* @author Schips
  4. #* @date 2020-10-31 09:04:43
  5. #* @version v1.0
  6. #* @copyright Copyright By Schips, All Rights Reserved
  7. #*
  8. #**********************************************************
  9. #*
  10. #* @par 修改日志:
  11. #* <table>
  12. #* <tr><th>Date <th>Version <th>Author <th>Description
  13. #* <tr><td>2020-10-31 <td>1.0 <td>Schips <td>创建初始版本
  14. #* </table>
  15. #*
  16. #**********************************************************
  17. #*/
  18. #!/bin/sh
  19. BIF=/tmp/.bif
  20. help () {
  21. echo "Error : need \$fsbl.elf \$system.bit \$u-boot.elf BOOT.BIN"
  22. echo " eg :"
  23. echo " $0 fsbl.elf system.bit u-boot.elf BOOT.BIN"
  24. exit 1
  25. }
  26. if [ -z "$1" ]; then
  27. help
  28. fi
  29. if [ -z "$2" ]; then
  30. help
  31. fi
  32. if [ -z "$3" ]; then
  33. help
  34. fi
  35. if [ -z "$4" ]; then
  36. help
  37. fi
  38. FSBL=$1
  39. PL_BIT=$2
  40. UBOOT=$3
  41. BOOT_BIN=$4
  42. TMP_FSBL=/tmp/fsbl.elf
  43. TMP_PL_BIT=/tmp/system.bit
  44. TMP_UBOOT=/tmp/u-boot.elf
  45. cp -v $FSBL $TMP_FSBL
  46. cp -v $PL_BIT $TMP_PL_BIT
  47. cp -v $UBOOT $TMP_UBOOT
  48. require () {
  49. command -v $1 >/dev/null 2>&1 || { echo >&2 "Aborted : Require \"$1\" but not found."; exit 1; }
  50. }
  51. # 文件内容追加
  52. append_line_into_file ()
  53. {
  54. if [[ $# -lt 2 ]]; then
  55. return
  56. fi
  57. FILE=$1
  58. LINE=$2
  59. echo $LINE >> $FILE
  60. }
  61. make_bif () {
  62. rm ${BIF} -rf
  63. echo "Making BIF for bootgen : \n\n"
  64. append_line_into_file ${BIF} "//arch = zynq; split = false; format = BIN"
  65. append_line_into_file ${BIF} "the_ROM_image:"
  66. append_line_into_file ${BIF} "{"
  67. append_line_into_file ${BIF} " [bootloader] $TMP_UBOOT"
  68. append_line_into_file ${BIF} " $TMP_PL_BIT"
  69. append_line_into_file ${BIF} " $TMP_UBOOT"
  70. append_line_into_file ${BIF} "}"
  71. echo "\n\n"
  72. cat ${BIF}
  73. }
  74. make_boot_bin () {
  75. echo "Making BOOT.BIN: \n\n"
  76. bootgen -arch zynq -image $BIF -o $BOOT_BIN -w on
  77. ls $BOOT_BIN -l
  78. }
  79. require bootgen
  80. make_bif
  81. make_boot_bin
  82. exit $?
  83. https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842056/FPGA+Manager+ZCU102
  84. http://www.uisrc.com/forum.php?mod=viewthread&tid=2334
  85. #cat build/bootgen.bif
  86. the_ROM_image:
  87. {
  88. [bootloader] /tmp/tmp.SXFL3UZOJ7/zynq_fsbl.elf
  89. /tmp/tmp.SXFL3UZOJ7/system.bit
  90. /tmp/tmp.SXFL3UZOJ7/u-boot.elf
  91. }

patelinux-package 打包 BOOT.BIN

使用bootgen好像有问题,总是提示u-boot文件出现问题:

  1. [ERROR] : Multiple executable program sections in /tmp/u-boot.elf

因此,还是推荐使用这个方法,但是这个方法需要在petalinux工程中进行。

  1. petalinux-package --boot --fsbl ./images/linux/zynq_fsbl.elf --fpga ./images/linux/system.bit --u-boot --force && cp images/linux/BOOT.BIN /tftpboot/BOOT.BIN_for_emmc

编译uboot、Linux

编译uboot、kernel方法很常见,这里介绍我自己使用的方法。

思路:先把通用的配置保存起来,编译uboot、kernel的时候只需要读取配置就可以了

配置

  1. ##
  2. # Copyright By Schips, All Rights Reserved
  3. #
  4. # File Name: init.sh
  5. # Created : 2020-07-21 09:12:10
  6. #
  7. ##
  8. #!/bin/sh
  9. XLNX_SDK_CONFIG=~/.sdk_xlnx_config
  10. cd `dirname $0`
  11. SDKTOP=`cd ../../ && pwd`
  12. TC=${SDKTOP}/toolchain
  13. if [ ! -d "$TC" ]; then
  14. TC=`cd ${SDKTOP}/../toolchain&& pwd`
  15. fi
  16. add_to_config () {
  17. echo "$1" >> $XLNX_SDK_CONFIG
  18. }
  19. echo "Initializing [$XLNX_SDK_CONFIG]"
  20. rm $XLNX_SDK_CONFIG 2>/dev/null
  21. add_to_config "## For All"
  22. add_to_config "export ARCH=arm"
  23. add_to_config "export ARM_GCC_PATH=${TC}/petalinux_2018.3/gcc-arm-linux-gnueabi/bin"
  24. add_to_config "export BUILD_CORE=4"
  25. add_to_config ""
  26. add_to_config "## app, kernel"
  27. add_to_config "export APP_CROSS ?= arm-linux-gnueabihf-"
  28. add_to_config "export KERNEL_CROSS ?= arm-linux-gnueabihf-"
  29. add_to_config "export KERNEL_CFGDIR ?= arch/arm/configs"
  30. add_to_config "export KERNEL_CONFIG ?= xilinx_zynq7000_peta_defconfig"
  31. add_to_config ""
  32. add_to_config "## Uboot"
  33. add_to_config "export UBOOT_CROSS ?= arm-linux-gnueabihf-"
  34. add_to_config "export UBOOT_CFGDIR ?= configs"
  35. add_to_config "#export UBOOT_CROSS?= arm-none-eabi-"
  36. add_to_config "export UBOOT_CONFIG ?= xilinx_zynq7000_peta_defconfig"
  37. echo "============================="
  38. cat $XLNX_SDK_CONFIG
  39. echo "============================="
  40. echo "Initalized [$XLNX_SDK_CONFIG]"

uboot

  1. #==============================================
  2. ##
  3. # Copyright By Schips, All Rights Reserved
  4. #
  5. # File Name: build_uboot.sh
  6. # Created : 2020-07-13 10:49:24
  7. #
  8. ##
  9. #!/bin/sh
  10. BASE=`pwd`
  11. XLNX_SDK_CONFIG=~/.sdk_xlnx_config
  12. get_config_from_sdk_config ()
  13. {
  14. ret=`cat $XLNX_SDK_CONFIG | grep -v "#" | grep -E '\=|\?\=' | grep "$1" | grep "export" | awk -F= '{print $2}'`
  15. echo $ret
  16. }
  17. ARM_GCC_PATH=`get_config_from_sdk_config ARM_GCC_PATH`
  18. export PATH=$PATH:$ARM_GCC_PATH
  19. echo "Building [$BASE]"
  20. BUILD_ARCH=`get_config_from_sdk_config ARCH`
  21. BUILD_CROSS=`get_config_from_sdk_config UBOOT_CROSS`
  22. CONFIG=`get_config_from_sdk_config UBOOT_CONFIG`
  23. CORE=`get_config_from_sdk_config BUILD_CORE`
  24. rebuild () {
  25. make ARCH=${BUILD_ARCH} CROSS_COMPILE=$BUILD_CROSS clean
  26. make ARCH=${BUILD_ARCH} CROSS_COMPILE=$BUILD_CROSS $CONFIG
  27. make ARCH=${BUILD_ARCH} CROSS_COMPILE=$BUILD_CROSS -j $CORE
  28. }
  29. rebuild
  30. echo "Built [$BASE]"

kernel

与uboot类似,配置项有一些小差异而已。

  1. ##
  2. # Copyright By Schips, All Rights Reserved
  3. #
  4. # File Name: build_kernel.sh
  5. # Created : 2020-08-06 14:19:04
  6. #
  7. ##
  8. #!/bin/sh
  9. BASE=`pwd`
  10. XLNX_SDK_CONFIG=~/.sdk_xlnx_config
  11. date_time=`date +%0m%0d-%0k:%0M`
  12. get_config_from_sdk_config ()
  13. {
  14. ret=`cat $XLNX_SDK_CONFIG | grep -v "#" | grep -E '\=|\?\=' | grep "$1" | grep "export" | awk -F= '{print $2}'`
  15. echo $ret
  16. }
  17. ARM_GCC_PATH=`get_config_from_sdk_config ARM_GCC_PATH`
  18. export PATH=$PATH:$ARM_GCC_PATH
  19. BUILD_ARCH=`get_config_from_sdk_config ARCH`
  20. BUILD_CROSS=`get_config_from_sdk_config KERNEL_CROSS`
  21. CONFIG=`get_config_from_sdk_config KERNEL_CONFIG`
  22. CORE=`get_config_from_sdk_config BUILD_CORE`
  23. SRCCONFIGDIR=`get_config_from_sdk_config KERNEL_CFGDIR`
  24. help () {
  25. echo "Use following cmd : "
  26. echo " help : For help"
  27. echo " config : Memuconfig based on present config"
  28. echo " deconfig : Reset config as [$CONFIG]"
  29. echo " build : Build based on present config"
  30. echo " clean : Clean object built"
  31. echo " rebuild : Reset config, clean and build"
  32. echo " dtbs : Build dtbs"
  33. }
  34. if [ -z "$1" ]; then
  35. help
  36. exit 1
  37. fi
  38. config() {
  39. make ARCH=${BUILD_ARCH} CROSS_COMPILE=$BUILD_CROSS menuconfig
  40. echo "Do you want to save this config as [${CONFIG}] ?"
  41. echo " [yy/n], default [n] in 5 seconds."
  42. read -t 5 answer
  43. if [ "$answer" == "yy" ]; then
  44. echo "Saving .config as default"
  45. cp -v ${SRCCONFIGDIR}/${CONFIG} .${CONFIG}_backup_${date_time}
  46. cp -v .config ${SRCCONFIGDIR}/xilinx_zynq7000_peta_defconfig
  47. echo "Saved .config as default"
  48. fi
  49. }
  50. deconfig () {
  51. make ARCH=${BUILD_ARCH} CROSS_COMPILE=$BUILD_CROSS clean
  52. cp .config .config_backup_${date_time} -v 2>/dev/null
  53. make ARCH=${BUILD_ARCH} CROSS_COMPILE=$BUILD_CROSS $CONFIG
  54. echo "Configed with [$CONFIG]"
  55. }
  56. rebuild () {
  57. make ARCH=${BUILD_ARCH} CROSS_COMPILE=$BUILD_CROSS clean
  58. make ARCH=${BUILD_ARCH} CROSS_COMPILE=$BUILD_CROSS $CONFIG
  59. make ARCH=${BUILD_ARCH} CROSS_COMPILE=$BUILD_CROSS -j $CORE
  60. make ARCH=${BUILD_ARCH} CROSS_COMPILE=$BUILD_CROSS dtbs -j $CORE
  61. }
  62. build () {
  63. make ARCH=${BUILD_ARCH} CROSS_COMPILE=$BUILD_CROSS -j $CORE
  64. }
  65. dtbs () {
  66. make ARCH=${BUILD_ARCH} CROSS_COMPILE=$BUILD_CROSS -j $CORE dtbs
  67. }
  68. clean () {
  69. make ARCH=${BUILD_ARCH} CROSS_COMPILE=$BUILD_CROSS clean
  70. }
  71. command -v $1 >/dev/null 2>&1 || { help && exit 1; }
  72. echo "Doing [$1]"
  73. $1
  74. echo "Done with [$1]"

ZYNQ:使用PetaLinux打包 BOOT.BIN、image.ub的更多相关文章

  1. MPSOC之5——开发流程BOOT.BIN

    需要把若干文件打成大包,烧写到flash或者sd卡中,才能启动运行. 1.petalinux打包 petalinux-packet打包时,需要petalinux的工程,限制太死了,不用. 2 wind ...

  2. 如何解包,编辑,重新打包boot images

    HOWTO: Unpack, Edit, and Repack Boot Images http://forum.xda-developers.com/showthread.php?t=443994 ...

  3. 一键解包/打包boot.img/recovery.img工具(高通/MTK双版 支持android 5.1以上)

    下载地址: 链接: https://pan.baidu.com/s/1hsA2oWc 密码: skdx

  4. 嵌入式开发之zynqMp ---Zynq UltraScale+ MPSoC 图像编码板zcu102

    1.1 xilinx zynqMp 架构 1.1.1 16nm 级别工艺 Zynq UltraScale+  MPSoC架构 Xilinx新一代Zynq针对控制.图像和网络应用推出了差异化的产品系,这 ...

  5. zynq linux驱动之PL-PS中断【转】

    转自:https://blog.csdn.net/h244259402/article/details/83993524 PC:Windows 10 虚拟机:ubuntu 16.04 vivado:2 ...

  6. ZYNQ Linux 移植:包含petalinux移植和手动移植debian9

    参考: https://electronut.in/workflow-for-using-linux-on-xilinx-zynq/ https://blog.csdn.net/m0_37545528 ...

  7. Boot Petalinux Project Using a remote system

    通过jtag实现在远程服务器端下载petalinux image到连接在本地PC的开发板上的方法. 具体连接方式为 比如Host的系统为Windows,Remote system为运载在远程服务器上的 ...

  8. ZYNQ跑系统 系列(二) petalinux方式移植linux

    三.搭建petalinux工程 0.定位目录    先在shell中找一个准备存放工程的地方,(我的是home/hlf/PRO),命令行cd home/hlf/PRO 1.定位编译链    根据安装p ...

  9. Android : 修改内核源码 and 编译、打包成新的boot.img

    一.Android内核源码的下载: 1.Google GIT地址: $ git clone https://android.googlesource.com/kernel/common.git $ g ...

  10. zynq基础-->linux下软件应用

    操作系统:Ubuntu 16.04 LTS 应用软件:Vivado 2016.2  + petalinux 2016.2 参考官方应用手册:ug1144-petalinux-tools-referen ...

随机推荐

  1. 第一讲 Cadence-于真博士课程简介

    第一讲 Cadence-于真博士课程简介 以工程化的思想来学习本课程,比较有效,从一个DSP开发板设计为例开始,做出PCB板,顺带学会Cadence软件操作,而不是仅仅学习软件. 前期准备工作,阅读配 ...

  2. C语言笔记001-用C语言编写程序

    例2-1  在屏幕上显示一个短句"Hello World!". #include <stdio.h> int main(void) { printf("hel ...

  3. arduino uno+LCD12864(ST7735S)+蓝牙模块实现贪吃蛇

    1.前言: 1.1本实验实现的贪吃蛇能穿越边界,结束游戏的唯一条件是贪吃蛇到达指定长度 1.2本实验所用LCD可能不是LCD12864,LCD12864所用库为u8glib,笔者在词库中并没有找到型号 ...

  4. Swift Charts 报错:Initializer ... requires that .. conform to ‘Identifiable‘

    目录 1. 问题描述 2. 解决办法 1. 问题描述 在运行Swift Charts官方折线图示例时,出现了如下错误. Initializer 'init(_:content:)' requires ...

  5. python教程8-页面爬虫

    python爬虫常用requests和beautifulSoup这2个第三方模块.需要先进行手动安装. requests负责下载页面数据,beautifulSoup负责解析页面标签. 关于beauti ...

  6. 安卓开发封装处理Retrofit协程请求中的异常

    上篇文章讲解了怎么使用Kotlin的协程配合Retrofit发起网络请求,使用也是非常方便,但是在处理请求异常还不是很人性化.这篇文章,我们将处理异常的代码进行封装,以便对异常情况返回给页面,提供更加 ...

  7. VMware Workstation解锁Mac系统

    VMware workstation在安装虚拟机的时候,如果是安装Windows.CentOS.Ubuntu等相关系统的话,仅仅需要一个系统镜像就可以顺利安装了. 但是如果想要安装苹果系统Mac的话, ...

  8. Android 13 - Media框架(7)- NuPlayer::Source

    关注公众号免费阅读全文,进入音视频开发技术分享群! Source 在播放器中起着拉流(Streaming)和解复用(demux)的作用,Source 设计的好坏直接影响到播放器的基础功能,我们这一节将 ...

  9. Newtonsoft.Json解决中文编码问题

    Newtonsoft.Json解决中文编码 默认Newtonsoft.Json序列化对象后,返回的中文未进行编码. 需要将编码转换的话,需要 1 2 3 4 5 6 7 var json = Json ...

  10. 鸿蒙HarmonyOS实战-Web组件(前端函数和应用侧函数相互调用)

    前言 前端函数和应用侧函数相互调用是指前端页面中的JavaScript函数和应用程序侧的函数之间进行相互调用. 在前端开发中,常常会使用JavaScript函数来处理用户的交互事件和操作.这些函数可以 ...