dnw2的使用
来源:互联网 发布:五线谱翻译成简谱软件 编辑:程序博客网 时间:2024/06/05 08:29
2.将代码复制到本地文本,然后编译:gcc dnw2.c -o dnw2 -lusb
#include<stdio.h>
#include<usb.h>
#include<errno.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<unistd.h>
#define QQ2440_SECBULK_IDVENDOR 0x5345
#define QQ2440_SECBULK_IDPRODUCT 0x1234
struct usb_dev_handle * open_port(){
struct usb_bus *busses,*bus;
usb_init();
usb_find_busses();
usb_find_devices();
busses= usb_get_busses();
for(bus= busses; bus; bus = bus->next){
struct usb_device *dev;
for(dev= bus->devices; dev; dev = dev->next){
printf("idVendor:0x%x\t,ipProduct:0x%x\n",
dev->descriptor.idVendor, dev->descriptor.idProduct);
if(QQ2440_SECBULK_IDVENDOR== dev->descriptor.idVendor
&& QQ2440_SECBULK_IDPRODUCT == dev->descriptor.idProduct){
printf("Target usb device found!\n");
struct usb_dev_handle *hdev= usb_open(dev);
if(!hdev){
perror("Cannot open device");
}else{
if(0!= usb_claim_interface(hdev,0)){
perror("Cannot claim interface");
usb_close(hdev);
hdev= NULL;
}
}
return hdev;
}
}
}
printf("Target usb device not found!\n");
return NULL;
}
void usage(){
printf("Usage: dnw2 <file>\n\n");
}
unsignedchar* prepare_write_buf(char*filename,unsignedint*len){
unsignedchar*write_buf= NULL;
struct stat fs;
int fd = open(filename, O_RDONLY);
if(-1== fd){
perror("Cannot open file");
return NULL;
}
if(-1== fstat(fd,&fs)){
perror("Cannot get file size");
goto error;
}
write_buf=(unsignedchar*) malloc(fs.st_size+10);
if(NULL== write_buf){
perror("malloc failed");
goto error;
}
if(fs.st_size!= read(fd, write_buf +8, fs.st_size)){
perror("Reading file failed");
goto error;
}
printf("Filename : %s\n", filename);
printf("Filesize : %d bytes\n", fs.st_size);
*((u_int32_t*) write_buf)=0x30000000;//download address
*((u_int32_t*) write_buf +1)= fs.st_size+10;//download size;
*len= fs.st_size+10;
return write_buf;
error:if(fd!=-1)
close(fd);
if(NULL!= write_buf)
free(write_buf);
fs.st_size=0;
return NULL;
}
int main(int argc,char*argv[]){
if(2!= argc){
usage();
return1;
}
struct usb_dev_handle *hdev= open_port();
if(!hdev){
return1;
}
unsignedint len =0;
unsignedchar* write_buf = prepare_write_buf(argv[1],&len);
if(NULL== write_buf)
return1;
unsignedint remain = len;
unsignedint towrite;
printf("Writing data ...\n");
while(remain){
towrite= remain >512?512: remain;
if(towrite!= usb_bulk_write(hdev,0x03, write_buf +(len- remain),
towrite,3000)){
perror("usb_bulk_write failed");
break;
}
remain-= towrite;
printf("\r%d%\t %d bytes ",(len- remain)*100/ len, len
- remain);
fflush(stdout);
}
if(0== remain)
printf("Done!\n");
return0;
}
3.将编译后的可执行文件放入根目录下的/bin中。
sudo mv dnw2 /bin
- dnw2的使用
- ubuntu下dnw2工具的使用
- ubuntu下dnw2工具的使用
- dnw2的下载与安装
- ubuntun下实现了dnw2的usb文件传输
- linux下实现了dnw2的usb文件传输
- 嵌入式linux学习笔记3之DNW2的安装
- dnw2安装
- dnw2配置
- archlinux平台下 fl2440 使用minicom加dnw2烧写flash
- OK6410开发板开发环境搭建-NFS文件启动和使用dnw2烧写镜像文件
- OK6410开发板开发环境搭建-NFS文件启动和使用dnw2烧写镜像文件
- OK6410开发板开发环境搭建-NFS文件启动和使用dnw2烧写镜像文件
- GUID使用的使用
- ${}的使用
- 的使用
- @[],@()的使用
- ->的使用
- CentOS 搭建svn失败,无法连接host解决方法
- 无法加载播放器,请删除浏览器缓存后重试
- ios中实现staggeringBeauty的效果(三)
- 在Android library中不能使用switch-case语句访问资源ID的原因分析及解决方案
- 产品设计原则:3秒、3次原则和费茨定律
- dnw2的使用
- 菜鸟猿大战Java之异常处理初接触
- hybridapp进阶篇:你需要知道的开源代码库
- 黑马程序员—UI学记笔记—— 图片查看器
- 周期
- hdu 2446(二分查找)
- thinkphp 如何去除url中的index.php
- csdn公开课--小伙伴围观了
- 求两个数的最大公约数和最小公倍数