DFU u-boot搭建
参考资料:
- BeagleBone Black 从零到一 (2 MLO、U-Boot):关于AM335x的MLO解析
- Linux内核用户指南:linux core u-boot user’s Guide
- 视频:How to use AM57x/Dra7x DFU Boot Mode with Linux Host
- 虽然AM5728 IDK EVM的USB1仅作为host使用,但是可以通过修改U-boot
- 虽然AM5728 IDK EVM 的USB1仅作为host使用,但可以通过修改u-boot,使USB1成为peripheral,从而完成DFU步骤。
- 虽然TI员工警告该开发板的USB1仅设计为host使用,与VBUS有关。但我实际使用过程中,并没有损坏电脑器件,但也没完成DFU的完整步骤。没有办法在进入u-boot后,无法正常输入,不知是否与这个有关系。
基础配置
安装AM5728的SDK-Linux来获取U-Boot源码
修改IDK上用来配置启动项的电阻, 使其能够从USB启动
- 当设置成 [00010]时,ROM code 将会从USB启动:
- 建立MLO和u-boot文件
- 建议在构建时使用以对象命名的目录。通过O = parameter来设置对象。同时建议输出目录以目标对象命名。这样即使你有多个配置目标,也会从名字上清晰的分辨。
- 设置编译链接地址
export PATH="/home/pi/ti-processor-sdk-linux-am57xx-evm-05.03.00.07/linux-devkit/sysroots/x86_64-arago-linux/usr/bin":$PATH
- 清理源文件
- 如果没有使用单独的对象目录
$ make CROSS_COMPILE=arm-linux-gnueabihf- distclean
- 如果使用’O = am57xx_evm’ 作为你的输出目录:
$ rm -rf ./am57xx_evm
- 编译MLO和u-boot文件
- u-boot 和 SPL 是同时建立完成,必须一开始就将要配置你所需要的板子。使用下表确定要使用的defconfig:
- 表中并没有am5728的usb启动的配置,我们通过修改am57xx_evm_defconfig部分配置来达到我们的目的。
- cd <u-boot 文件夹>
export CROSS_COMPILE=arm-linux-gnueabihf-
export ARCH=arm
make O=am57xx_evm am57xx_evm_defconfig
make O=am57xx_evm
利用USB设备进行Device Firmware Upgrade(DFU)
- host Linux PC 需要安装有 dfu-util
- 使用 dfu-util 工具经由 DFU 去烧录所选的储存设备
USB Peripheral boot mode on DRA7x/AM57x (SPL-DFU support)
在 AM5728 IDK 开发板使用USB外设模式(改变sysboot模式,上文有所叙述),修改menuconfig中的部分配置,使能USB1外设模式和DFU功能。下文内容和步骤简介:
- 在u-boot 使能SPL-DFU功能,并且生成MLO/ u-boot的二进制文件
- 主机使用dfu-util 烧写MLO 和 u-boot.img
- 一旦u-boot启动,使用DFU命令将二进制文件烧写到eMMC ,或者其他存储
- 使用默认的"am57xx_evm_defconfig"来构建spl/u-boot-spl.bin和 u-boot.img
export PATH="/home/pi/ti-processor-sdk-linux-am57xx-evm-05.03.00.07/linux-devkit/sysroots/x86_64-arago-linux/usr/bin":$PATH
export CROSS_COMPILE=arm-linux-gnueabihf-
export ARCH=arm
make am57xx_evm_defconfig
make menuconfig
- 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设置为外设模式)
- am57xx-beagle-x15-commom.dtsi
- am57xx-idk-common.dtsi
修改设备树 - board.c
修改开发板定义和结构,打开usb相关定义 - am57xx_evm_defconfig
- am57xx_hs_evm_defconfig
设置配置选项 - am57xx_evm.h
头文件设置 - 为SPL_DFU功能定义CONFIG_SPL_LOAD_FIT_ADDRESS 地址,使能SPL_DFU功能
- 8662.0002-configs-am57xx_evm-define-
CONFIG_SPL_LOAD_FIT_ADDRES.patch.txt - include/configs/am57xx_evm.h
头文件设置 - git am patches/*.patch.txt
make clean
make -j8 - 重新之前的步骤。在进入u-boot后立即按任意按钮,进入boot。minicom将有以下报文:
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部分。