case 2:
{
g_bUSBWait = (int)simple_strtoul(argv[1], NULL, 16);
break;
}
case 3:
{
g_bUSBWait = (int)simple_strtoul(argv[1], NULL, 16);
load_addr = simple_strtoul(argv[2], NULL, 16);
download_run = 0;
break;
}
default:
{
printf ("Usage:\n%s\n", cmdtp->usage);
return 1;
}
}
dwUSBBufBase = load_addr;
dwUSBBufSize = (FREE_RAM_SIZE&(~(0x80000-1)));
if (g_bUSBWait)
len = FREE_RAM_SIZE;
g_dwDownloadLen = usb_receive(dwUSBBufBase, len, g_bUSBWait);
sprintf(buf, "%X", g_dwDownloadLen);
setenv("filesize", buf);
return 0;
}
U_BOOT_CMD(
usbslave, 3, 0, do_usbslave,
"usbslave - get file from host(PC)\n",
"[wait] [loadAddress]\n"
"\"wait\" is 0 or 1, 0 means for return immediately, not waits for the finish of transferring\n"
);
#endif
修改common/Makefile
COBJS-$(CONFIG_USB_KEYBOARD) += usb_kbd.o
# Apollo +
COBJS-$(CONFIG_USB_DEVICE) += cmd_usbslave.o
# Apollo -
补充几个修改,在原文中的usbmain.c,要把include
在lib_arm/bootm.c中,udc_disconnect ();此句也要注释掉,否则编译报错。在本网的uboot中,此句也是注释掉的,估计原文
作者漏写了。
编译成功,将u-boot.bin烧入mini2440的nand flash中,进行测试。
将mini2440的usb device口与pc的usb口连接
在u-boot的命令行中输入 usbslave 1 0x31000000,回车,这时,就可以在dnw中发送数据了,这里,发送uImage,发送完成后,在u-boot命令行中输入bootm 0x31000000,内核正确引导,证明移植成功。
另,本网的u-boot仿照友善的mini vivi作了一个菜单命令选择,我没有加入。如有需要,可以参照本网的代码加入。这个比较
容易,不多说了。