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命令
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