准备学习下UBoot,下载了个TQ2440的UBoot,准备使用他的USB下载功能。但是TQ2440的UBoot中usb_slave只给出了编译好的二进制文件,看着极其不爽,所以准备移植下usbslave。下面列出具体步骤,参考了网上的文章。
1,下载usbslave的源代码,上传做个备份。点我下载 下载后将其解压到uboot的driver的目录。使用tar -jvxf 命令解压。解压后可以多出一个driver/usb/slave目录。
2,修改Uboot顶层的Makefile文件,在208行修改如下,用自己移植的usbslave代替TQ提供的usb.module。
#Lxp Modify ++
#LIBS += modules/usb.module
LIBS += drivers/usb/slave/libusb_slave.a
#Lxp Modify --
3,进入driver/usb/slave目录,我们可以看到Makefile中定义了libusb_slave.a这正是步骤2中我们替换原先的库的原因。尝试编译,会发现在interrupts.C中出现多个重复定义的错误,因此需要修改interrupts.C
4,最后需要修改board.c,将usb_init()改成usb_init_slave().
/* BEGIN: Modified by Lxp, 2012/8/20 PN:123 */
//usb_init();
Port_Init();
usb_init_slave();
/* END: Modified by Lxp, 2012/8/20 */
在port_init()中加入和自己开发板对应的USB_EN 管脚的配置 如我的是GPG9,则修改
gpioregs->GPGCON = 0xfd95ffba; /* thisway.diy, GPG12-->OUTPUT, GPG9-->OUTPUT for FS2410, as USB Device enable */
gpioregs->GPGUP = 0xffff; // The pull up function is disabled GPG[15:0]
gpioregs->GPGDAT &= ~((1<<9) | (1<<12)); /* disable USB Device, enable later, thisway.diy */