1、下载 dnw

    dnw_linux.tgz压缩包文件结构如下:

    dnw_linux/
    dnw_linux/secbulk/Makefile
    dnw_linux/secbulk/secbulk.c
    dnw_linux/dnw/
    dnw_linux/dnw/dnw.c

    其中secbulk.c是PC端USB驱动, dnw.c是写入工具

2、进入   dnw_linux/secbulk/Makefile,修改 Makefile 文件(make 就可编译,make clean 就可清除编译)

    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

3、进入 dnw_linux/secbulk/secbulk.c,修改主/次设备号

        1)将开发板的串口线和USB线与PC 连好,从SD卡启动进入bootloarder

        2)在连接USB的情况下,输入 lsusb ,再把USB 线拔掉,再次输入 lsusb命令,对比两次的输出,找到对应设备的ID号

             假如找到的设备为: Bus 003 Device 002: ID 0c45:760a Microdia

            打开 dnw_linux/secbulk/secbulk.c,找到下面的语句,修改USB_DEVICE()函数里的两个参数为 ox0c45 和 ox760a。

static struct usb_device_id secbulk_table[]= {
	{ USB_DEVICE(0x0c45, 0x760a)},
	{ }
};

4、  进入  dnw_linux/secbulk/ 文件夹,执行 make 命令

5、 加载 模块:sudo insmod secbulk.ko

            加载后用    dmesg    命令可以看到模块已经成功加载
             [  238.007970] secbulk:secbulk loaded

             [  238.009101] usbcore: registered new interface driver secbulk

6、打开dnw_linux/dnw/dnw.c,修改dnw.c

        修改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

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

    为了避免每次都要手动加载,因此修改/etc/init.d/rc.local文件(root权限),在后面加上下面一句:

     insmod     /….你的secbulk.ko文件目录/secbulk.ko     保存退出完事。


8、参考文献:

    http://blog.csdn.net/u011452544/article/details/39393857

    http://blog.csdn.net/wuzuyu365/article/details/18971245

    http://blog.csdn.net/rainysky_sj/article/details/8675632