2016-06-17 9 views
1

Я пытаюсь добавить поддержку DFU к u-boot, который я использую в своем проекте, потому что я понял, что поддержка DFU в нем не включена.Как добавить поддержку DFU для u-boot?

Я использую Freescale U-Boot (клонирование мерзавца: //git.freescale.com/imx/uboot-imx.git), и я проверил тег "rel_imx_4.1.15_1.1.0_ga ", с которым я должен работать.

Дело в том, что, проходя через документацию по загрузке, я вижу, что 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 

Я заметил, что если я удалю #define CONFIG_CMD_DFU из .h файла компилирует хорошо, но если я вхожу => DFU в U-Boot оболочки он говорит:

Unknown command 'dfu' - try 'help' 

Таким образом, вопрос * вы знаете, что еще мне нужно добавить, чтобы включить DFU в u-boot, который я использую?

Спасибо!

ответ

0
  1. Чтобы исправить эти ошибки, связывающие:

    undefined reference to dfu_*

    включить USB часть класса USB DFU:

    #define CONFIG_DFU_FUNCTION 
    
  2. Чтобы исправить эту ошибку, связывающую:

    undefined reference to usb_gadget_handle_interrupts

    включите ваш контроллер UDC (I ' м уверен, что ваша платформа имеет контроллер 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 
    
  3. Чтобы исправить эти ошибки, связывающие:

    undefined reference to 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 вы можете определить, какую опцию определить, чтобы соответствующий объект-файл встроенная и желаемая функция находится на стадии компоновки.