Dnw下载工具还是Linux下的好(For OK6410)

          一直在Windows下开发,某些bug总是使我不能全心全意的信任Windows,从开发嵌入式开始,一直就想把开发环境转移到Linux环境下,特别是下载程序的时候,不过确实有Linux的开发环境,就拿下载程序来说,Linux下的minicom和dnw真的是很好用,同时也可以学习源代码。下面教你如何下载、安装、使用dnw。

1. dnw由两部分构成:USB驱动和下载工具,USB驱动便是secbulk文件夹,下载工具是DNW文件夹

    下载地址:http://files.cnblogs.com/lixiaoming90/dnw_linux.rar

     文件名:DnwLinux.rar

   

2.  安装dnw

     解压缩,之后会看到dnw_linux文件夹,进入该文件夹

     $ cd dnw_linux

     $ ls

     $ /dnw   /secbulk

 

     2.1  首先修改、编译和安装驱动

     进入secbulk文件夹,输入编译命令,编译成模块。(我自己修改了Makefile,因此大家只需make就可编译,make clean 就可清除编译。修改后的Makefile如下:

obj-m := secbulk.o
KDIR := /lib/modules/`uname -r`/build
PWD  := $(shell pwd)

default:
	$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
	$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean
	rm -rf *.order *.symvers

     在修改secbulk.c中代码,将0x5432改为0x04e8(不同的flash要在那个表单中加入一些设备相关的信息类似ID号,在程序加载的时候自动读取芯片内部ID和这个相比较,没有注册的设备是不会被系统支持的,可以通过lsusb获得idProduct和idVendor,需要在插上板子,并准备下载时此时设备连上时lsusb,0x04e8:0x1234),代码如下:

static struct usb_device_id secbulk_table[]= {
	{ USB_DEVICE(0x04e8, 0x1234)},
	{ }
};


    至此,代码修改完毕!

     $ make

     之后在文件夹中会有secbulk.ko模块文件,如下图所示:

     Dnw下载工具还是Linux下的好(For OK6410)_第1张图片

     加载该模块到内核(注意:需要root权限)

     $ sudo insmod secbulk.ko

     加载后用dmesg命令可以看到模块已经成功加载
     [  238.007970] secbulk:secbulk loaded
     [  238.009101] usbcore: registered new interface driver secbulk

     常见问题: can not open /dev/secbulk0,  则表示该模块没有加载成功或者dnw没有root权限

     通过lsmod可以看看加载成功没。

     $ lsmod | grep secbulk

 

     2.2 编译和安装dnw

     进入dnw文件夹

    $ cd dnw

     修改dnw.c,找到如下代码处:

   printf("Writing data...\n");
   size_t remain_size = file_stat.st_size+10;

     在其前面加上下面两句:

/*****************************/
file_buffer [file_stat.st_size + 8] = sum & 0xff;
file_buffer [file_stat.st_size + 9] = sum >> 8;
/*****************************/

      代码修改完毕,像一般的程序一样编程为可执行性文件

    $ gcc –o dnw dnw.c

    可能会有一些警告,不过可以忽略。在dnw下生成dnw工具

    将dnw复制到/bin目录下,这样就可以在任意文件目录下调用dnw命令。

   

    温馨技巧: 因为要用dnw的话,要确保secbulk驱动加载到内核,为了避免每次都要手动加载,因此修改/etc/init.d/rc.local文件(root权限),在后面加上下面一句:

     insmod /….你的secbulk.ko文件目录/secbulk.ko

     保存退出完事。

 

3. dnw运用

    我用dnw的主要目的是用来下载裸机程序,还有其他文件,根本没有Windows下的蓝屏现象,dnw的用法也很简单。

   3.1 打开两个终端,一个输入minicom命令,打开串口调试,当开发板加载uboot时按下PC上的空格键,使其停在下载模式,输入以下命令:

  SMDK6410# dnw  0x50008000

  此时终端打印以下信息,说明USB连接成功,就等待你下载传输了。情况如下:

   Dnw下载工具还是Linux下的好(For OK6410)_第2张图片

   3.2 在另外一个终端输入以下命令,下载文件:

   $ dnw /你要下载的文件路径/文件名

    下载过程和结果如下:

   Dnw下载工具还是Linux下的好(For OK6410)_第3张图片

   到此为止,dnw的介绍结束,因为之前研究过Linux下的dnw使用,好长时间没用了,现在写此博文来记录,方便以后回顾,同时也希望给新手一个指导。

   我现在在用dnw来下载裸机程序,但是因为好久没用了,出现以前从来没有遇到过的问题:

  1. 首先是出现“can not open /dev/secbulk0”,后来想想原来是dnw时没有使用root权限,在后面又出现这个问题,我又重新编译了一次secbulk驱动,这个问题解决了。

  2. 这次是没有出现上面的问题了,但是新问题又出现了:在writing data…期间,写到10%的时候就出现failed!,我试好多次都是这个问题。现在正在解决中。。。情况如下:

   Dnw下载工具还是Linux下的好(For OK6410)_第4张图片

  3.3 下载到NandFlash

   现在你的程序已经下载到内存当中了,如果你想在内存中运行你的程序,只需要输入下面一句命令即可:

   SMDK6410#  go 0x50008000

   如果你想下载到NandFlash中(好处就是掉电了程序还是在NandFlash当中,而且比较原味,可以测试一下你写的启动代码)

  我的步骤如下:

    (1)首先制作烧写Uboot的SD卡,具体在飞凌用户手册中有(注意:SD卡中除了烧写外,里面一样文件都没有,我之前一直搞不明白,现在终于清楚了)

    (2)设置开发板为SD卡启动,启动后按PC上的空格键停在Uboot下载调试界面,下面的就跟上面的步骤一样,将程序通过USB烧写到内存中

    (3)将NandFlash中的0~1M的空间擦除,再把下到内存地址中的程序烧写到NandFlash的0~100000空间中(uboot中默认的是16进制)

              SMDK6410#  nand erase 0 100000

              SMDK6410#  nand write.e 0x50008000 0 100000

     (4)设置开发板为NandFlash启动即可。

            目前,已经调试成功了,原来是开发板中的uboot好久没用,可能出现了问题,现在重新烧写一次,成功下载!情况就是上面那一张图了,终于又能在Linux下开发程序了。

转载于:https://www.cnblogs.com/lixiaoming90/archive/2013/03/21/2973837.html

你可能感兴趣的:(Dnw下载工具还是Linux下的好(For OK6410))