Linux下编译记录:
编译PC端USB驱动和写入工具dnw_linux.tgz压缩包文件结构如下dnw_linux/dnw_linux/secbulk/dnw_linux/secbulk/Makefilednw_linux/secbulk/secbulk.cdnw_linux/dnw/dnw_linux/dnw/dnw.c其中secbulk.c是PC端USB驱动, dnw.c是写入工具编译驱动之前先修改secbulk.c找到#define BULKOUT_BUFFER_SIZE修改为#define BULKOUT_BUFFER_SIZE 512找到static struct usb_device_id secbulk_table[]= { { USB_DEVICE(0x04e8, 0x1234)}, { }};修改为上面的样子接下来编译$cd secbulk$make -C /lib/modules/`uname -r`/build M=`pwd` modules加载编译好的驱动$sudo insmod ./secbulk.ko注意,每次下载前都需要加载驱动,或者可以设置为开机自动加载Ubuntu中,假设驱动文件在/opt/dnw_linux/secbulk/则修改/etc/rc.d/rc.local文件,末尾加入sudo insmod /opt/dnw_linux/secbulk/secbulk.ko即完成开机自动加载驱动模块接下来编译dnw写入工具先打开dnw.c修改找到printf("Writing data...\n");size_t remain_size = file_stat.st_size+10;size_t block_size = remain_size / 100;size_t writed = 0;在它前面加上2行代码,如下:file_buffer [file_stat.st_size + 8] = sum & 0xff;file_buffer [file_stat.st_size + 9] = sum >> 8;printf("Writing data...\n");size_t remain_size = file_stat.st_size+10;size_t block_size = remain_size / 100;size_t writed = 0;编译dnw$gcc -o dnw dnw.c编译成功后生成可执行dnw使用DNW下载启动开发板,进入minicom,并将开发板和PC用USB电缆连接,此时用dmesg命令可以看到secbulk驱动加载:[ 283.677772] usb 1-1: new full speed USB device using uhci_hcd and address 2[ 284.084835] usb 1-1: configuration #1 chosen from 1 choice[ 284.140430] secbulk:secbulk probing...[ 284.140482] secbulk:bulk out endpoint found!说明驱动可以使用 重起开发板,别进linux系统,按任意键进入uboot界面,输入dnw 50008000当出现“USB host is connected. Waiting a download.”时,在PC端Linux上用dnw工具写入要下载的文件,例如我要写入/tmp/zImage$./dnw /tmp/zImage 写入完成后提示成功100% 312349 bytes OK至此,dnw在linux下使用一切正常dnw下载地址:
https://github.com/Qunero/dnw4linux