搭建linux下的DNW烧写环境(替代windows下的超级串口终端和DNW)

软件环境:ubuntu 13.10

硬件环境:TQ2440开发板

由于我的PC机操作系统是win8.1,不知何故死活装不上天嵌给的USB下载驱动,所以在PC下烧写开发板系统和裸机程序变得不可能,后来经过一番摸索,发现完全可以在linux下用minicom代替windows下的超级串口终端,用dnw2(linux版本)代替windows下的DNW,下面是具体的环境搭建过程:

  1. 搭建linux下的minicom串口通信环境:

    1.1 下载并安装minicom,在终端输入命令:sudo apt-get install minicom

    1.2 配置minicom:输入命令 sudo minicom -s 会弹出一个minicom配置的图形界面

    1.3 设置Filenames and paths,Download directory表示从发开板下载文件到linux主机的目录,Upload directory 表示从linux主机向开发板下载文件的目录,其设置如下图:

    1.4 设置serial port setup,配置如下图:

    注意:笔记本因为要使用USB转串口的连接方式连接开发板,所以serial Device设置成 /dev/ttyUSB0,如果是台式机有并口,那么可以选择并口的方式连接开发板,serial Device 设置成 /dev/ttyS0 。

    1.5 选择Save setup as dfl 保存配置,至此minicom串口通信环境搭建完毕!

    1.6 minicom的使用:

    1.6.1 从linux主机向开发板传送文件:ctrl+A+S 然后选择zmodem协议,接着便进入了Directory: /home/ma/minicom-updownload 选择所要传送的文件即可。

    1.6.2 从开发板向linux主机传送文件:sz filename ,filename为你需要发送的文件的名字。

    1.6.3 设置换行:ctrl+A+W即可。

    1.6.4 退出minicom:ctrl+A+X 即可。

2.搭建linux的DNW下载环境:

    2.1 在你喜欢的目录下新建一个名为dnw2.c的文件,然后往里面复制如下代码:

/* dnw2 linux main file. This depends on libusb.

*

* Author: Fox <[email protected]>

* 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;

}

这是dnw2,一开始我使用的dnw for linux 但是这个版本在烧写大文件的时候(例如文件系统)总是烧写失败,使用dnw2烧写大文件毫无压力!

2.2 编译dnw2.c ,在终端输入指令:gcc -o dnw2 dnw2.c -lusb ,编译完后产生dnw2的可执行文件,然后输入指令 sudo cp dnw2 /usr/local/bin ,这样我们便可以在任何目录使     用dnw2了,烧写的时候输入:sudo dnw2 filename 即可,filename为你要烧写的 .bin 文件。

2.3 如果你以前安装过dnw,那么必须把dnw的USB下载驱动secbulk.ko及dnw本身卸载掉!不然烧写的时候会出现:USB设备正忙的错误。那么为什么dnw2没有安装USB下载驱动?答案是dnw2使用libusb来实现对USB的操控。

2.4 dnw2的使用:

把开发板设置成nor启动,如下图所示:

选择[a] Download User Program (eg: uCOS-II or TQ2440_Test)  然后打开另一终端输入:sudo dnw2 TQ2440_Test_W43_20120110.bin  烧写完后接下来我们把开发板设置成NAND启              动,便可以测试天嵌提供的ARM裸机程序,如下图所示:

完!

时间: 2024-10-07 05:46:03

搭建linux下的DNW烧写环境(替代windows下的超级串口终端和DNW)的相关文章

编译 Linux 3.5 内核烧写 Android 4.2.2 到 Tiny4412 开发板

. . . . . 昨天已经编译了 Android 4.2.2 的源码,详见<Ubuntu 14.04 编译 Android 4.2.2 for Tiny4412>一文. 今天我们继续剩下的工作,让我们的 android 系统可以跑在 Tiny4412 开发板上. Android 和 Linux 是两码事,Android 系统是基于 Linux 内核的.我们编译的 Android 源码是 Android 系统本身的源码,而内核是指通过原生 Linux 源码一直过来的内核源码,所以它们需要我们分

ubuntu下制作tiny6410烧写SD卡

被这一件小事折腾了三天,原来是因为我用的是储存卡+卡套的方式进行烧录,一直不成功,结果今天借了一个大SD卡就成功了,记录一下烧写过程. tiny6410光盘里面并没有提供一键烧写SD卡的脚本,但是烧写过程却足够简单,几个命令下去就烧写成功了. 首先准备一个已经备份好资料的SD卡 将光盘里面提供的superboot2011xxxx.bin烧进去 sudo dd iflag=dsync oflag=dsync if=xxx/superboot2011xxxx.bin of=/dev/sdb seek

tiny4412u-boot烧写及根文件系统制作(不进入终端问题)

http://m.blog.csdn.net/article/details?id=51400196(转) VMware12 环境:ubuntu12.4 开发板:tiny4412 首先烧写bootloader,我用一个8G的内存卡,现在不说sd卡的制作过程了,网上可以参考. 现在就把我给arm的emmc烧写过程开始说. 用sd卡启动,开发板的右下角有个开关控制启动方式,往下是sd卡启动,往上是mmc启动. 1,.先用sd卡启动 注意:把右下角的开关拨到下面.启动后的是[[email protec

linux下使用mono运行vs程序和windows下的一些区别

目录: windows服务中,如果在程序中写“a.txt”:它指的并非是服务运行文件所在目录:而linux则指的是运行文件目录. 时间: windows下的ToShortDateString为“1990-01-01”格式,而linux下为“1/1/1990”格式,linux下的这种格式在向mysql数据库中的date类型字段填充时会报格式不正确的错误.

阿里云下,在不动生成环境的情况下搭建IPv6站点

目前阿里云所有产品都不支持IPv6 网络,最近苹果审核的更新导致大部分app都无法通过审核.通过收集各位大神的解决方案以及结合公司自身的情况做了一个IPv6的nginx 并反向代理到IPv4的网站,最终成功,简单纪录下操作步骤 1.生成环境不做任何改动: 我们的生成环境使用nginx 作为反向代理,后端挂了大量的应用,如果要动这个牵扯有点大,所以不做任何改动. 2.新增一台服务器(阿里云申请一台1h1g低配主机,并加上公网IP),将这台主机按网上的方案配置成IPv6 ,并安装好nginx ,也要

Nginx学习笔记——搭建Linux +Nginx+PHP+Mariadb(MySql)开发环境

1.安装Nginx 源安装 本人安装环境是Deepin(Ubuntu的衍生版),所以最简单的方法就是执行 sudo apt-get install nginx 或者CentOS下: yum install nginx 编译安装 http://nginx.org/ 下载最新版1.9.5,支持HTTP/2模块,号称更快更安全,并且可以向下兼容,具体细节查看NGINX_HTTP2_White_Paper_v4.pdf 依赖关系:openssl-1.0.0s,pcre-8.36,zlib-1.2.8 分

使用piranha搭建Linux Virtual Server (LVS)集群环境

最近做一下LVS集群方式的性能对比测试,在配置IP隧道方式时遇到一些诡异的问题: 1)     停止LVS服务后虚拟IP未被释放(似乎只有重启服务器才能释放,重启网卡.清空路由表.重启交换机等方式均无效): 2)     负载不均衡(有时会依次将压力全部压在其中一个成员身上,有时又是正常的): 之前测试"直接路由"方式时是手动配置方式,配置成功并没有发现问题.而这次使用IP隧道方式这么多问题,肯定是配置问题. 官方有介绍一个配置工具:piranha.在CentOS安装光盘也自带有,于是

嵌入式Linux之旅——环境搭建篇之烧写整个系统

上一小结我们已经烧写完u-boot,我烧写的u-boot是板子厂家定制的,本小节将利用这个u-boot烧写整个系统.当然,在系统移植篇的时候也会涉及到如何定制一个u-boot. 烧写整个系统我们一个叫dnw的工具,dnw是一个USB工具,通过USB发送文件给具有USB下载功能的bootloader.也就说我用的厂家定制的u-boot已经具备了USB下载功能.我需要先安装一些库: sudo apt-get install libncurses5:i386 libstdc++6:i386 zlib1

嵌入式Linux之旅——环境搭建篇之烧写裸机程序

本小节将介绍如何使用oflash和openjtag烧写裸机程序.oflash也支持并口烧写,方法与openjtag类似.如果你想使用jlink烧写,需要安装SEGGER的J-Flash的工具,这里我们就不多介绍. 首先需要先安装oflash,oflash由开发板厂商提供或者从网上下载.将oflash加上可执行权限,拷贝到“/usr/bin”目录下即可.命令如下: sudo cp oflash /usr/bin/ && sudo chmod +x /usr/bin/oflash 下面就是具体