为uboot-2009.08 添加 dnw usb下载功能
来源:互联网 发布:网络外壳已经停止工作 编辑:程序博客网 时间:2024/05/23 01:09
原文地址:【原】为uboot-2009.08 添加 dnw usb下载功能 作者:Apollo5520
创建drivers/usb/slave 目录,复制usb slave驱动源代码到此目录(详见附件)
LIBS += drivers/usb/musb/libusb_musb.a
# Apollo +
LIBS += drivers/usb/slave/libusb_slave.a
# Apollo -
LIBS += drivers/video/libvideo.a
3、修改lib_arm/board.c文件,添加红色部分代码
//Apollo +
Port_Init();
/* enable exceptions */
enable_interrupts ();
usb_init();
//Apollo -
4、修改平台头文件,include/configs/utu2440.h,添加红色部分
#define CONFIG_USB_DEVICE 1
#ifdef CONFIG_USB_DEVICE
#define CONFIG_USE_IRQ 1
#endif
//#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */
5、修改cpu/arm920t/s3c24x0/interrupts.c 文件,添加arch_interrupt_init函数定义
//Apollo +
int arch_interrupt_init (void)
{
return 0;
}
//Apollo -
6、修改cpu/arm920t/start.S,文件
#ifdef CONFIG_USE_IRQ
.align 5
irq:
//Apollo +,此处开始修改
/*
get_irq_stack
irq_save_user_regs
bl do_irq
irq_restore_user_regs
*/
/* use IRQ for USB and DMA */
sub lr, lr, #4 @ the return address
ldr sp, IRQ_STACK_START @ the stackfor irq
stmdb sp!, { r0-r12,lr } @ save registers
ldr lr, =int_return @ set the returnaddr
ldr pc, =IRQ_Handle @ call the isr
int_return:
ldmia sp!, { r0-r12,pc }^ @ return from interrupt
//Apollo -,修改结束
//Apollo +
S3C24X0_REG8 MAXP_REG;
// S3C24X0_REG8 res10[7];
S3C24X0_REG8 res10[3];
S3C24X0_REG8 EP0_CSR_IN_CSR1_REG;
S3C24X0_REG8 res11[3];
S3C24X0_REG8 IN_CSR2_REG;
// S3C24X0_REG8 res12[3];
S3C24X0_REG8 res12[7];
S3C24X0_REG8 OUT_CSR1_REG;
// S3C24X0_REG8 res13[7];
S3C24X0_REG8 res13[3];
//Apollo -
8、添加usbslave命令
在common目录下创建cmd_usbslave.c
#include<common.h>
#include<command.h>
#include<asm/byteorder.h>
#ifdef CONFIG_USB_DEVICE
#ifdef CONFIG_USE_IRQ
#define IRQ_STACK_START (_armboot_start- CONFIG_SYS_MALLOC_LEN - CONFIG_SYS_GBL_DATA_SIZE - 4)
#define FIQ_STACK_START (IRQ_STACK_START- CONFIG_STACKSIZE_IRQ)
#define FREE_RAM_END (FIQ_STACK_START- CONFIG_STACKSIZE_FIQ - CONFIG_STACKSIZE)
#define FREE_RAM_SIZE (FREE_RAM_END- PHYS_SDRAM_1)
#else
#define FREE_RAM_END (_armboot_start- CONFIG_SYS_MALLOC_LEN - CONFIG_SYS_GBL_DATA_SIZE - 4 - CONFIG_STACKSIZE)
#define FREE_RAM_SIZE (FREE_RAM_END- PHYS_SDRAM_1)
#endif
int g_bUSBWait = 1;
u32 g_dwDownloadLen = 0;
extern int download_run;
extern volatileunsigned int dwUSBBufBase;
extern volatileunsigned int dwUSBBufSize;
extern __u32 usb_receive(char*buf,size_t len,unsigned int wait);
int do_usbslave (cmd_tbl_t *cmdtp,int flag,int argc,char *argv[])
{
int i;
size_t len = ~0UL;
char buf[32];
/* download_run为1时表示将文件保存在USB Host发送工具dnw指定的位置
* download_run为0时表示将文件保存在参数argv[2]指定的位置
* 要下载程序到内存,然后直接运行时,要设置download_run=1,这也是这个参数名字的来由
*/
download_run = 1;
switch (argc) {
case 1:
{
break;
}
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 -
原创文章,转载请注明:转载自 风雨无阻博客(http://Apollo5520.cublog.cn)
本文链接地址:http://blog.chinaunix.net/u3/105764/showart_2144192.html
- 为uboot-2009.08 添加 dnw usb下载功能
- 为uboot-2009.08 添加 dnw usb下载功能
- 为uboot-2009.08 添加 dnw usb下载功能
- 为uboot-2009.08 添加 dnw usb下载功能
- UBOOT-2012-10在OK6410平台的移植(六)添加DNW下载功能
- 关于Uboot的USB下载功能
- 使用dnw工具usb下载
- 为 uboot 添加 wince 唤醒功能
- uboot支持usb功能
- linux下USB DNW功能实现
- Linux 下利用dnw进行USB下载~~
- linux下usb下载驱动dnw设置
- Linux 下利用dnw进行USB下载~~
- Linux 下利用dnw进行USB下载~~
- Linux 下利用dnw进行USB下载~~
- Linux 下利用dnw进行USB下载~~
- 用DNW通过USB烧uboot到nand
- am5728 uboot 添加usb 网卡
- Servlet的应用---验证码
- HDUOJ 1358 Period——KMP(其他应用)
- 菜鸟的起步
- 【Java编程】Java在dos窗口编译与执行的批处理
- Qt 实现窗体控件自适应
- 为uboot-2009.08 添加 dnw usb下载功能
- Jmeter資源監控
- DASSDFSD
- Linux 下 Error: Could not find or load main class Hello
- Fragment+ViewPager+TabPageIndicator使用的时候遇到的问题
- 面向接口编程 java
- ant 使用指南
- 标记-清除算法
- 训练赛 Grouping(强连通分量缩点 + DAG求最长路)