DFU u-boot搭建

DFU u-boot搭建

参考资料:

  1. BeagleBone Black 从零到一 (2 MLO、U-Boot):关于AM335x的MLO解析
  2. Linux内核用户指南:linux core u-boot user’s Guide
  3. 视频:How to use AM57x/Dra7x DFU Boot Mode with Linux Host
  4. 虽然AM5728 IDK EVM的USB1仅作为host使用,但是可以通过修改U-boot
  5. 虽然AM5728 IDK EVM 的USB1仅作为host使用,但可以通过修改u-boot,使USB1成为peripheral,从而完成DFU步骤。
  6. 虽然TI员工警告该开发板的USB1仅设计为host使用,与VBUS有关。但我实际使用过程中,并没有损坏电脑器件,但也没完成DFU的完整步骤。没有办法在进入u-boot后,无法正常输入,不知是否与这个有关系。
  7. 在这里插入图片描述

基础配置

安装AM5728的SDK-Linux来获取U-Boot源码
  1. PROCESSOR-SDK-LINUX-AM57X 06_03_00_106
修改IDK上用来配置启动项的电阻, 使其能够从USB启动
  1. 当设置成 [00010]时,ROM code 将会从USB启动:
  2. 在这里插入图片描述
  3. 在这里插入图片描述
  4. 建立MLO和u-boot文件
  5. 建议在构建时使用以对象命名的目录。通过O = parameter来设置对象。同时建议输出目录以目标对象命名。这样即使你有多个配置目标,也会从名字上清晰的分辨。
  6. 设置编译链接地址
  7. export PATH="/home/pi/ti-processor-sdk-linux-am57xx-evm-05.03.00.07/linux-devkit/sysroots/x86_64-arago-linux/usr/bin":$PATH
  8. 清理源文件
  9. 如果没有使用单独的对象目录
  10. $ make CROSS_COMPILE=arm-linux-gnueabihf- distclean
  11. 如果使用’O = am57xx_evm’ 作为你的输出目录:
  12. $ rm -rf ./am57xx_evm
  13. 编译MLO和u-boot文件
  14. u-boot 和 SPL 是同时建立完成,必须一开始就将要配置你所需要的板子。使用下表确定要使用的defconfig:
  15. 在这里插入图片描述
  16. 表中并没有am5728的usb启动的配置,我们通过修改am57xx_evm_defconfig部分配置来达到我们的目的。
  17. cd <u-boot 文件夹>
  18. export CROSS_COMPILE=arm-linux-gnueabihf-
  19. export ARCH=arm
  20. make O=am57xx_evm am57xx_evm_defconfig
  21. make O=am57xx_evm

利用USB设备进行Device Firmware Upgrade(DFU)

  1. host Linux PC 需要安装有 dfu-util
  2. 使用 dfu-util 工具经由 DFU 去烧录所选的储存设备

USB Peripheral boot mode on DRA7x/AM57x (SPL-DFU support)

在 AM5728 IDK 开发板使用USB外设模式(改变sysboot模式,上文有所叙述),修改menuconfig中的部分配置,使能USB1外设模式和DFU功能。下文内容和步骤简介:
  1. 在u-boot 使能SPL-DFU功能,并且生成MLO/ u-boot的二进制文件
  2. 主机使用dfu-util 烧写MLO 和 u-boot.img
  3. 一旦u-boot启动,使用DFU命令将二进制文件烧写到eMMC ,或者其他存储
  4. 使用默认的"am57xx_evm_defconfig"来构建spl/u-boot-spl.bin和 u-boot.img
  5. export PATH="/home/pi/ti-processor-sdk-linux-am57xx-evm-05.03.00.07/linux-devkit/sysroots/x86_64-arago-linux/usr/bin":$PATH
  6. export CROSS_COMPILE=arm-linux-gnueabihf-
  7. export ARCH=arm
  8. make am57xx_evm_defconfig
  9. make menuconfig
  10. select SPL/DFU support
    menuconfig->SPL/TPL —>

    [] Support booting from RAM
    [
    ] Support USB Gadget drivers
    [*] Support DFU (Device Firmware Upgrade)

Unselect CONFIG_HUSH_PASER
menuconfig->Command Line interface

[*] Support U-boot commands

[ ] Use hush shell

建立spl/u-boot-spl.bin 和 u-boot.img
11. make -j8
12. 使用TI提供的usbboot工具
host$ git clone git://git.omapzoom.org/repo/omapboot.git
host$ cd omapboot
host$ checkout 609ac271d9f89b51c133fd829dc77e8af4e7b67e
host$ make -C host/tools
13. 获得usbboot-stand-alone 后, 使用该工具来载入spl/u-boot-spl.bin 到
IDK中
14. host$ sudo usbboot-stand-alone -S spl/u-boot-spl.bin
15. 在这里插入图片描述
16. 然后下载u-boot.img 到RAM中,并自动重新加载boot
17. host$ sudo dfu-util -c 1 -i 0 -a 0 -D "u-boot.img" -R
18. 如果安装过补丁
19. 在这里插入图片描述
20. 如果没有安装补丁,则会报错:
21. dfu-util: Invalid DFU suffix signature
dfu-util: A valid DFU suffix will be required in a future dfu-util release!!!
dfu-util: No DFU capable USB device available
22. 由于am572x IDK 的 USB1 设计仅作为host,TI官方提供的配置默认无法使用peripheral模式,我们需要打上以下两份补丁,或者以这两份补丁做参考修改原配置文件:6505.0001-usb-enable-usb1-device-mode-for-am57x.patch.txt
23. 下载链接:6505.0001-usb-enable-usb1-device-mode-for-am57x.patch.txt

USB设备模式补丁 (将USB1设置为外设模式)

  1. am57xx-beagle-x15-commom.dtsi
  2. am57xx-idk-common.dtsi
    修改设备树
  3. board.c
    修改开发板定义和结构,打开usb相关定义
  4. am57xx_evm_defconfig
  5. am57xx_hs_evm_defconfig
    设置配置选项
  6. am57xx_evm.h
    头文件设置
  7. 为SPL_DFU功能定义CONFIG_SPL_LOAD_FIT_ADDRESS 地址,使能SPL_DFU功能
  8. 8662.0002-configs-am57xx_evm-define-
    CONFIG_SPL_LOAD_FIT_ADDRES.patch.txt
  9. include/configs/am57xx_evm.h
    头文件设置
  10. git am patches/*.patch.txt
    make clean
    make -j8
  11. 重新之前的步骤。在进入u-boot后立即按任意按钮,进入boot。minicom将有以下报文:
  12. U-Boot 2018.01-00571-ga76d30be29 (May 03 2019 - 16:34:17 +0800) CPU : DRA752-GP ES2.0 Model: TI AM5728 IDK Board: AM572x IDK REV 1.3B DRAM: 2 GiB MMC: OMAP SD/MMC: 0, OMAP SD/MMC: 1 omap_hsmmc_send_cmd : DMA timeout: No status update *** Warning - MMC init failed, using default environment omap_hsmmc_send_cmd: timedout waiting on cmd inhibit to clear invalid mmc device SCSI: SATA link 0 timeout. AHCI 0001.0300 32 slots 1 ports 3 Gbps 0x1 impl SATA mode flags: 64bit ncq stag pm led clo only pmp pio slum part ccc apst scanning bus for devices... Found 0 device(s). Net: Warning: ethernet@48484000 using MAC address from ROM eth0: ethernet@48484000 Hit any key to stop autoboot: 0 =>

接下来开始DFU部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PI_sunyang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值