zoukankan      html  css  js  c++  java
  • Dnw下载工具还是Linux下的好(For OK6410)

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

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

        下载地址:https://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模块文件,如下图所示:

         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连接成功,就等待你下载传输了。情况如下:

       2

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

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

        下载过程和结果如下:

       4

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

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

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

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

       3

      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下开发程序了。

  • 相关阅读:
    sql命令附加数据库
    数据解析0102
    xml file parser
    c#字定义异常处理类
    simple workflow implement
    High Performance Multithreaded Work Item / Event Scheduling Engine
    字符定位
    C#实现的不重复随机数序列生成算法
    Thread并发数控制
    通过Assembly来创建Type Instance
  • 原文地址:https://www.cnblogs.com/lixiaoming90/p/2973837.html
Copyright © 2011-2022 走看看