1.安装所需库文件 sudo apt-get install libusb-dev

2.源代码如下

/* dnw2 linux main file. This depends on libusb.
*
* Author: Fox <hulifox008@163.com>
* License: GPL
*
*/ #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");
} unsigned char* prepare_write_buf(char *filename, unsigned int *len) {
unsigned char *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 = (unsigned char*) 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();
return 1;
} struct usb_dev_handle *hdev = open_port();
if (!hdev) {
return 1;
} unsigned int len = 0;
unsigned char* write_buf = prepare_write_buf(argv[1], &len);
if (NULL == write_buf)
return 1; unsigned int remain = len;
unsigned int 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");
return 0;
}
 
 
3.gcc dnw.c -o dnw -lusb
 

dnw for linux: Ubuntu下可用,无需编译驱动,mini2440可用的更多相关文章

  1. 开源播放器 ijkplayer (五) :Linux/Ubuntu 下编译ijkplayer

    一.安装Git与yasm sudo apt-get install git sudo apt-get install yasm 二.下载和配置 SDK.NDK SDK一般开发时肯定都有的,NDK一般是 ...

  2. 在Linux(Ubuntu)下搭建ASP.NET Core环境并运行 继续跨平台

    最新教程:http://www.cnblogs.com/linezero/p/aspnetcoreubuntu.html 无需安装mono,在Linux(Ubuntu)下搭建ASP.NET Core环 ...

  3. ubuntu下使用反编译apk,工具dex2jar和jd-gui

    ubuntu下使用反编译apk, 工具 1:通过apk-tool反编译出资源文件: http://code.google.com/p/android-apktool/ 2.首先使用dex2jar反编译 ...

  4. lampp 在linux ubuntu下自动开机启动

    lampp 在linux ubuntu下自动开机启动 lampp在linux下是不会自动启动的.需要手工处理.如下: 假如,你的lampp安装在 /opt/lampp 目录下,那么可以如下处理: 1. ...

  5. Linux(Ubuntu)下MySQL的安装与配置

    转自:http://www.2cto.com/database/201401/273423.html 在Linux下MySQL的安装,我一直觉得挺麻烦的,因为之前安装时就是由于复杂的配置导致有点晕.今 ...

  6. Linux(Ubuntu) 下自然码加辅助码双拼输入的解决方案

    Linux(Ubuntu) 下自然码加辅助码双拼输入的解决方案 环境: Ubuntu 14.04 LTS 解决方案是 ibus-Rime 输入法, 再加上搭配自然码的配置表 (1) ibus 首先安装 ...

  7. Ubuntu下使用gcc编译c文件,未识别cos,sin

    Ubuntu下使用gcc编译c文件,虽然我调用了math.h的头文件,但是未识别cos,sin 报错:( fft.c ) /tmp/ccwXjD8C.o: In function `fft': fft ...

  8. Linux环境下使用VSCode编译makefile文件的注意事项

    Linux环境下使用VSCode编译makefile文件的注意事项 首先安装C/C++的两个依赖 在debug,launch会自动的生成下方的launch.json launch.json { // ...

  9. Ubuntu下安装nvidia显卡驱动

    layout: post title: Ubuntu下安装nvidia显卡驱动 date: 2015-10-02 17:19:06 categories: 常用命令 tags: 显卡 驱动 最近一直在 ...

随机推荐

  1. 从零开始制作jffs2文件系统

    JFFS2 是一个开放源码的项目(www.infradead.org). 它是在闪存上使用非常广泛的读/写文件系统,在嵌入式系统中被普遍的应用. 1.       安装mkfs工具 MTD主页:htt ...

  2. 代理Delegate的小应用(代理日期控件和下拉框)

    前言 在平时关于表格一类的的控件使用中,不可避免需要修改每个Item的值,通过在Item中嵌入不同的控件对编辑的内容进行限定,然而在表格的Item中插入的控件始终显示,当表格中item项很多的时候,会 ...

  3. Delphi基本图像处理代码

    //浮雕procedure Emboss(SrcBmp,DestBmp:TBitmap;AzimuthChange:integer);overload;var  i, j, Gray, Azimuth ...

  4. c++类型转换Type Cast)

    C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:TYPE b = (TYPE)a.C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用. const_cast, ...

  5. 14.5.5.3 How to Minimize and Handle Deadlocks 如何减少和处理死锁

    14.5.5.3 How to Minimize and Handle Deadlocks 如何减少和处理死锁 这个部分建立在概念信息关于deadlocks 在章节 14.5.5.2, "D ...

  6. codeforces #268 div2 D

    对于这道题第一感觉是图论相关然后我们先分析,假设a[i]在A集合需要的元素是a[x],在B集合是a[y]那么假设a[i]在A集合,那必然a[x]也必须在A集合,由于a[y]如果在B集合就没有对应元素, ...

  7. 培训机构出来的iOS学员怎么了?

    事件回放 前几天在 iOS 开发群里看到有人贴了一个 v2ex 上的帖子(地址:https://www.v2ex.com/t/244437 ) ,大概说收到了 1000 多份某培训机构出来的学员简历. ...

  8. lvs,haproxy,keepalived,heartbeat

    lvs的是通过vrrp协议进行数据包转发的,提供的是4层的负载均衡.特点是效率高,只要你机器网卡抗的住就不是问题. haproxy可以提供4层或7层的数据转发服务,能做到7层的好处是可以根据服务所处的 ...

  9. top N彻底解秘

    本博文内容: 1.基础Top N算法实战 2.分组Top N算法实战 3.排序算法RangePartitioner内幕解密 1.基础Top N算法实战 Top N是排序,Take是直接拿出几个元素,没 ...

  10. 转 :hdoj 4857 逃生【反向拓扑】

    逃生 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...