我尝试在我的项目中使用的U-boot添加DFU支持,因为我发现其中没有启用DFU支持。
我正在使用freescale u-boot(从 git://git.freescale.com/imx/uboot-imx.git 克隆)并检查了标签&#34 ;的 rel_imx_4.1.15_1.1.0_ga "这是我需要做的工作。
问题是,通过u-boot文档,我可以看到必须启用DFU。我将以下内容添加到我的.h文件中
#define CONFIG_USB_FUNCTION_DFU
#define CONFIG_CMD_DFU
#define CONFIG_DFU_MMC
#define CONFIG_SYS_DFU_DATA_BUF_SIZE SZ_16M
#define DFU_DEFAULT_POLL_TIMEOUT 300
但我收到以下错误:
common/built-in.o: In function `do_dfu':
/home/m4l490n/uboot-imx/common/cmd_dfu.c:29: undefined reference to `dfu_init_env_entities'
/home/m4l490n/uboot-imx/common/cmd_dfu.c:35: undefined reference to `dfu_show_entities'
/home/m4l490n/uboot-imx/common/cmd_dfu.c:41: undefined reference to `g_dnl_clear_detach'
/home/m4l490n/uboot-imx/common/cmd_dfu.c:42: undefined reference to `g_dnl_register'
/home/m4l490n/uboot-imx/common/cmd_dfu.c:44: undefined reference to `g_dnl_detach'
/home/m4l490n/uboot-imx/common/cmd_dfu.c:50: undefined reference to `dfu_usb_get_reset'
/home/m4l490n/uboot-imx/common/cmd_dfu.c:67: undefined reference to `usb_gadget_handle_interrupts'
/home/m4l490n/uboot-imx/common/cmd_dfu.c:70: undefined reference to `g_dnl_unregister'
/home/m4l490n/uboot-imx/common/cmd_dfu.c:72: undefined reference to `dfu_free_entities'
/home/m4l490n/uboot-imx/common/cmd_dfu.c:77: undefined reference to `g_dnl_clear_detach'
arm-linux-gnueabihf-ld.bfd: BFD (GNU Binutils for Ubuntu) 2.24 assertion fail ../../bfd/elf32-arm.c:7696
arm-linux-gnueabihf-ld.bfd: BFD (GNU Binutils for Ubuntu) 2.24 assertion fail ../../bfd/elf32-arm.c:7696
arm-linux-gnueabihf-ld.bfd: BFD (GNU Binutils for Ubuntu) 2.24 assertion fail ../../bfd/elf32-arm.c:7696
arm-linux-gnueabihf-ld.bfd: BFD (GNU Binutils for Ubuntu) 2.24 assertion fail ../../bfd/elf32-arm.c:7696
arm-linux-gnueabihf-ld.bfd: BFD (GNU Binutils for Ubuntu) 2.24 assertion fail ../../bfd/elf32-arm.c:7696
arm-linux-gnueabihf-ld.bfd: BFD (GNU Binutils for Ubuntu) 2.24 assertion fail ../../bfd/elf32-arm.c:7696
arm-linux-gnueabihf-ld.bfd: BFD (GNU Binutils for Ubuntu) 2.24 assertion fail ../../bfd/elf32-arm.c:7696
arm-linux-gnueabihf-ld.bfd: BFD (GNU Binutils for Ubuntu) 2.24 assertion fail ../../bfd/elf32-arm.c:7696
arm-linux-gnueabihf-ld.bfd: BFD (GNU Binutils for Ubuntu) 2.24 assertion fail ../../bfd/elf32-arm.c:7696
arm-linux-gnueabihf-ld.bfd: error: required section '.rel.plt' not found in the linker script
arm-linux-gnueabihf-ld.bfd: final link failed: Invalid operation
make: *** [u-boot] Error 1
我注意到如果我从.h文件中删除 #define CONFIG_CMD_DFU ,它编译得很好但是如果我输入 => dfu 在u-boot shell中它说:
Unknown command 'dfu' - try 'help'
所以问题是*你知道我需要添加什么才能在u-boot中启用DFU吗?
谢谢!
答案 0 :(得分:0)
修复这些链接错误:
对
的未定义引用dfu_*
启用DFU USB类的USB部分:
#define CONFIG_DFU_FUNCTION
修复此链接错误:
对
的未定义引用usb_gadget_handle_interrupts
启用您的UDC控制器(我非常确定您的平台具有ChipIdea UDC控制器),并启用USB小工具:
#define CONFIG_CI_UDC
#define CONFIG_USBD_HS
#define CONFIG_USB_GADGET
#define CONFIG_USB_GADGET_DUALSPEED
#define CONFIG_USB_GADGET_VBUS_DRAW 2
修复这些链接错误:
对
的未定义引用g_dnl_*
启用并配置USB下载小工具:
#define CONFIG_USBDOWNLOAD_GADGET
#define CONFIG_G_DNL_VENDOR_NUM 0x18d1
#define CONFIG_G_DNL_PRODUCT_NUM 0x0d02
#define CONFIG_G_DNL_MANUFACTURER "FSL"
现在您应该能够成功构建U-Boot。在configs/mx7dsabresd_defconfig
上进行了测试(对include/configs/mx7dsabresd.h
进行了更改)。下载小工具(G_DNL)的配置值取自include/configs/mx7dsabresdandroid.h
。
基本上,链接问题可以通过下一个方式解决。要找出缺少的定义,您可以查看实现缺失函数的位置,然后查找Makefile
,其中为构建启用了相应的源文件,并从Makefile
您可以找出要定义的选项,以便建立相应的对象文件,并在链接阶段实现所需的功能。