八月份国赛比完,原计划开始的嵌入式Linux学习一直拖到了现在;由于之前所有的开发全在Windows下进行的,对各种底层完全不清楚,刚好这段时间开始学习Linux,我就在想能不能把开发环境给迁移到Linux中来,就这样,有了这篇博客的产生;本人现在是应届大四学生,这是第一次写博客,有啥问题还望各位大佬们指教。
    闲话少说,首先介绍下我的硬件环境,我使用的是天嵌科技的TQ2440开发板,软件环境是安装了交叉编译链的Ubuntu 16.04版本。
    我们使用DNW向开发板烧写程序其实需要经过两个步骤,在串口终端中根据指令选择要下载的程序,然后在使用DNW工具进行写入。我们首先安装串口工具minicom,他实现的功能跟SecureCRT类似,我们直接用sodo apt-get install minicom命令安装它。
    1.安装minicom

sudo apt-get install minicom

配置minicom:

sudo minicom -s        // 注意:安装的前面一定要sudo,不然后面配置文件会出现不能写入的问题。

回车进入minicom的配置页面,选择Serial port setup,进入后可以看到一共有ABCDEFG七项配置,我们主要设置第一项设置设备,第五项波特率,第六七相由于我们一般用的都是USB转串口设备,所有都设置为No;第一项是串口好,如果我们使用的USB转串口的话可以在另一个终端中使用ls -l  /dev/ttyUSB*指令来查看我们的USB设备(我使用的USB转串口与开发板连接,所以选择USB 设备),在minicom配置界面输入A修改成我们查到的端口。回车后在输入E修改波特率,数据位、停止位;修改完成功后回车退出修改界面。选择Save setup as df1保存。最后退出,我们的minicom就已经配置好了;输入 sudo minicom 就可以打开minicom使用了。可以在minicom中同时按Crtrl+,然后按A查看帮助,X退出。(注意:minicom必须使用sudo打开)

minicom配置

minicom打开后的界面(串口没数据过来)

minicom配置完了,接下来就该安装程序下载到目标板的最后步骤了,首先要安装libusb-dev这个库;直接在输入指令 sudo apt-get install libusb-dev 装完之后就编译下载工具,网上牛人提供的一个,代码如下:

#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;
}

1)将上面代码保存为文件如: dnw1.c
2)接着编译: 

gcc dnw1.c -o dnw1 -l usb

3)移动dnw1可执行文件到/usr/bin目录下

sudo mv ./dnw1 /usr/bin

4)执行

sudo dnw1 path/your_filename

这样整个下载环境就安装完了,接下来就该演示下载过程了,首先将开发板的USB口跟串口分别与电脑相连,然后上电,打开minicom

sudo minicom

按下开发板的复位键,我们就能看见开发板的下载选项了

输入下载的内容选项,我这里随便下载一个裸机程序

我们可以看见,USB已经连接成功,正在等待下载....

然后我们打开一个新的终端,输入指令 sudo dnw1 +你要发送的文件(我这里是用的DNW2  ),例如:

sudo dnw1 led.bin

可以看见下载已经完成。

TQ2440在Ubuntu16.04上如何搭建DNW烧写环境的更多相关文章

  1. Ubuntu16.04上用源代码安装ICE

    ubuntu16.04上用源代码安装ICE

  2. Ubuntu16.04上安装neo4j数据库

    什么是neo4j数据库? neo4j数据库是图数据库的一种,属于nosql的一种,常见的nosql数据库还有redis.memcached.mongDB等,不同于传统的关系型数据库,nosql数据也有 ...

  3. 在ubuntu16.04上安装eclipse

     在ubuntu16.04上安装eclipse 一.下载     首先我们需要安装jdk1.8及其以上,然后从官网:https://www.eclipse.org/downloads/上下载,需要注意 ...

  4. 在ubuntu16.04上编译android源码【转】

    本文转载自:http://blog.csdn.net/fuchaosz/article/details/51487585 1 前言 经过3天奋战,终于在Ubuntu 16.04上把Android 6. ...

  5. ubuntu16.04上在使用搜狗输入法时,按shift不能正常切换中英文

    问题描述: ubuntu16.04上在使用搜狗输入法时,不知道把什么组合键给错按了,导致了按shift不能正常切换中英文,这是一件很烦恼的事儿! 解决步骤: 1,终端输入打开: fcitx-confi ...

  6. primecoin在ubuntu16.04上部署服务:

    primecoin在ubuntu16.04上部署服务: 一.下载Tomcat,Jdk,primecoin(公司内部文件) 注意Tomcat版本需要高于Jdk的,不然会报错. 二.把它们都解压到你要的安 ...

  7. Ubuntu16.04上安装cudnn教程和opencv

    https://blog.csdn.net/wang15061955806/article/details/80791112 Ubuntu16.04上安装cudnn教程 2018年06月24日 14: ...

  8. 【MindSpore】Ubuntu16.04上成功安装GPU版MindSpore1.0.1

    本文是在宿主机Ubuntu16.04上拉取cuda10.1-cudnn7-ubuntu18.04的镜像,在容器中通过Miniconda3创建python3.7.5的环境并成功安装mindspore_g ...

  9. DNW烧写FL2440 NAND Flash分区

    转自 calvinlee1984 Subject:DNW烧写FL2440 NAND Flash分区 Date:     2-Mar-2011 By:         Calvinlee1984@163 ...

随机推荐

  1. JAVA常用API(Date、DateFormat、Calendar、System、Math、基本数据类型包装类)

    注:本文所有内容均属个人见解,如有错误望各位大佬好心指点批评,不胜感激 本章重点单词: parse:解析 format:格式化 pattern:模式 amount:数量 filed :领域 1.Dat ...

  2. leetcode 697. Degree of an Array

    题目: Given a non-empty array of non-negative integers nums, the degree of this array is defined as th ...

  3. Struts2 xml 详解

    <!-- include节点是struts2中组件化的方式 可以将每个功能模块独立到一个xml配置文件中 然后用include节点引用 --> <include file=" ...

  4. ubuntu软件使用汇总

    ubuntu使用合集 安装Ubuntu时的硬盘分区 Linux入门(1)--Ubuntu16.04安装搜狗拼音 Linux入门(2)--Ubuntu16.04安装wineQQ Linux入门(3)-- ...

  5. Linux入门(11)——Ubuntu16.04安装texlive2016并配置texmaker和sublime text3

    安装过程中需要调用 Perl 的模块 Digest::MD5 来检测 ISO 文件的完整性:升级过程中界面需要调用 Perl 的模块 Tk: sudo apt-get install libdiges ...

  6. 小记:Touchpad 禁用和启用

    最近上课要背着电脑到处跑,不能带外接键盘,打字时候总会碰到触控版导致光标乱飘,看了下wiki,发现有简单的命令开启或者禁用触控版,记录如下 禁用: # synclient TouchpadOff=1 ...

  7. [SVN服务器搭建] 在myecplise下使用的 tortoise1.9 64位 跟 subversion1.9的服务器使用

    由于在公司经常用到SVN服务器,所以自己也想搭建在本机上面搭建一个SVN服务器玩玩,废话不多说,下面直接贴出来如何搭建的.  一.tortoise1.9 64位下载 直接百度下载即可,百度时候需要显示 ...

  8. 动态主机配置协议DHCP

    一.什么是DHCP DHCP,动态主机配置协议,提供一种称为“即插即用连网”的机制,允许一台计算机加入新的网络和获取IP地址而不用手工配置. 二.DHCP工作原理和工作流程 DHCP服务器被动打开UD ...

  9. datagrid参数queryParams--easyUI

    datagrid参数queryParams--easyUI Html          <div  region="center" border="false&qu ...

  10. java基础解析系列(九)---String不可变性分析

    java基础解析系列(九)---String不可变性分析 目录 java基础解析系列(一)---String.StringBuffer.StringBuilder java基础解析系列(二)---In ...