资源下载:http://download.csdn.net/detail/liduxun/9508553
使用方法:
将Tiny4412的USB线、串口线与电脑连接,在win7+虚拟机Ubuntu的环境下,在win7环境中用驱动精灵装上串口的驱动,在虚拟机中应该就能检测到串口,我这里采用的是USB转串口驱动,在Ubuntu中用lsusb命令可以查询到是否检测到串口,如下图:
此外还可以使用ls /dev | grep tty 命令,我这里查询到的是ttyUSB0,然后再配置minicom就可以是使用了。至于USB口我比较头疼,在Ubuntu中用dnw装完USB驱动后,采用lsusb命令感刚开始还可以查到相关信息,内容大致是“Sansung Electric....”,具体也记不清了,但是到后来就查不到该USB口了,但是依然可以用来下载,目前我不太清楚原因,但是能用就OK,如果实在不能用的话,可以先用SD-Flsher向SD卡烧写Superroot,改为SD卡启动,在配置文件中为UsbMode =Yes, 打开MiniTools查看USB是否连接,在Ubuntu中配置dnw步骤:
解压缩,之后会看到dnw_linux文件夹,进入该文件夹
$ cd dnw_linux
$ ls
$ /dnw /secbulk
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),这个信息本来在用lsusb命令下可以查询到USB口的详细信息,但正如上面所说现在已经查不到了,代码如下:
static struct usb_device_id secbulk_table[]= { { USB_DEVICE(0x04e8, 0x1234)}, { } };
至此,代码修改完毕!
$ make
之后在文件夹中会有secbulk.ko模块文件,如下图所示:
加载该模块到内核(注意:需要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 编译和安装dnw
进入dnw文件夹
$ cd dnw
$ gcc –o dnw dnw.c
可能会有一些警告,不过可以忽略。在dnw下生成dnw工具
将dnw复制到/bin目录下,这样就可以在任意文件目录下调用dnw命令。
温馨技巧: 因为要用dnw的话,要确保secbulk驱动加载到内核,为了避免每次都要手动加载,因此修改/etc/init.d/rc.local文件(root权限),在后面加上下面一句:
insmod /….你的secbulk.ko文件目录/secbulk.ko
保存退出完事
提高下载速度
将secbulk.c中的
3. dnw运用
我用dnw的主要目的是用来下载裸机程序,还有其他文件,根本没有Windows下的蓝屏现象,dnw的用法也很简单。
3.1 打开两个终端,一个输入minicom命令,打开串口调试,当开发板加载uboot时按下PC上的空格键,使其停在下载模式,输入以下命令:
dnw 0x50008000
此时终端打印以下信息,说明USB连接成功,就等待你下载传输了。情况如下:
3.2 在另外一个终端输入以下命令,下载文件:
进入到dnw的路径下, $sudo ./dnw /你要下载的文件路径/文件名 ,该终端可以显示出Wirting Data OK 的提示信息,直接进行下部也可以运行,但是另一个Minicom的界面并没有出现校验和的信息,只有再执行$sudo ./dnw /你要下载的文件路径/文件名 一遍才会出现校验和信息如下:
但若使用 $ dnw /你要下载的文件路径/文件名
新问题又出现了:在writing data…期间,写到10%的时候就出现failed!,我试好多次都是这个问题。现在正在解决中。。。
3.3
现在你的程序已经下载到内存当中了,如果你想在内存中运行你的程序,只需要输入下面一句命令即可:
go 0x50008000
出现的问题及解决方法:
1 用#sudo dnw 命令下载文件时,提示can not open /dev/secbulk0
一种解决方法是:
有时候由于内核的升级,运行时会提醒Can not open/dev/secbulk0的错误,此时需要重新到secbulk目录执行$make-C /lib/modules/`uname -r`/build M=`pwd` modules,然后加载模块$sudo insmod./secbulk.ko即可!
还有参考网友的解决方法:是否有执行权限,是否加载成功
经过dmesg查看和权限检查,发现问题都不在这!根据提示信息,是否该检查一下是否有/dev/secbulk0 这个设备!!??
通过查看/dev/ 下的设备,发现我的电脑secbulk的从设备号是1。如下图
打开dnw.c源码 看见如图
修改从设备号为1后如下,
在这里我还修改了默认下载地址为0x3000 0000,友善提供的dnw是带地址参数。
经过这样的修改,然后重新编译dnw , 运行结果如下:
2#$sudo insmod ./secbulk.ko 为加载模块进内核
开机的时候不会自动加载,这样每次都要先加载才可以使用,此时将其加入开机脚本,
使其得到自动加载,编辑/etc/init.d/rc.local 在最后加上 insmod /所在路径/secbulk.ko。
gedit /etc/init.d/rc.local
insmod/home/haozi/桌面/dnw_linux/secbulk/secbulk.ko
3 # 将dnw添加到/usr/local/sbin中
调用dnw时只能在当前目录使用./dnw执行,对此情况,将dnw添加到/usr/local/sbin中,这样可以在
任何目录,使用 sudo dnw filename来调用。