在Linux Opensuse42.2上使用dnw向Tiny6410下载程序

1#环境说明

本人使用的是Tiny6410的开发板,最近在学习裸机开发。Tiny6410的Superboot虽然有SD卡烧写的功能,但是每次修改程序,都要拔卡插卡,十分麻烦。而使用Eclipse+Jlink的调试方式本人试了很久都没有成功。因此想到使用dnw的方式下载。我的系统是Linux Opensuse Leap 42.2,装在实机上面。


2#安装secbulk驱动

dnw需要调用/dev/secbulk0,而此设备linux默认是不支持的,需要手动安装。
首先要下载secbulk驱动源码,下载地址:http://download.csdn.net/source/3326087,是一位博主上传的,有dnw和secbulk两个源码。其中secbulk源码需要进行两处修改。

一处是secbulk.c当中,有关usb设备id的部分(就是下面这些),不同版本的板子可能不太一样。查看的方法是:连接串口(可以使用minicom)让板子等待dnw下载,然后再连接usb线缆,使用“lsusb”命令查看usb设备信息。有可能会看到一些奇奇怪怪的设备,比如我看到的设备是一个示波器???记下ID后面的两个编号,把它填到secbulk.c里面即可。

static struct usb_device_id secbulk_table[]= {
    { USB_DEVICE(0x5345, 0x1234)},
    { }
};
Bus 003 Device 035: ID 5345:1234 Owon PDS6062T Oscilloscope

另一处需要修改的是Makefile,修改为:

obj-m := secbulk.o
secbulk-m := secbulk.o
all:
    make -C /lib/modules/`uname -r`/build SUBDIRS=$(PWD) modules

然后执行make就可以生成出secbulk.ko了。

之后再执行“sudo insmod secbulk.ko”,就可以加载驱动模块了

注意,这时候/dev下面并不会出现secbulk0设备。


3#安装dnw

嗯,安装dnw无非就是使用gcc编译dnw.c,然后执行即可。但是,上面的那个dnw下下来编译之后并不能用,即使添加了几句话也不行。所以我用了国嵌给的dnw工具,可惜的是没有源码,只有可执行文件。这里给一个度盘链接: http://pan.baidu.com/s/1cq3Z7C 密码: pgg4


4#下载程序

下载程序比较简单,先连接板子串口,让板子等待dnw下载,再连接USB线缆。这时/dev下应该会有secbulk0这个设备,证明之前的驱动安装成功。然后使用dnw工具下载文件。国嵌的dnw用法为:

./dnw 文件名 起始地址

S3C6410起始地址可设置为0x50000000。这时会提示“cannot open file “/dev/secbulk0””,这是需要root权限,可以sudo或者root运行。


5#其他工作

1#添加dnw命令路径

由于普通用户并不能访问secbulk0设备,因此添加命令路径时,不能通过修改/home下的.bashrc实现。有三种解决方法:

1.直接放在/sbin下
2.修改/root下的.bashrc,然后每次以root身份运行
3.修改/etc/sudoers,然后每次都以sudo运行

我个人比较倾向于第三种,对系统的破坏最小。具体做法是:在/etc/sudoers中的secure_path中添加dnw的路径即可。这里我把dnw放在了/opt/dnw/下

2#开机自动添加secbulk.ko

之前通过insmod安装的模块,在系统重启时不会自动加载,因此需要在使用启动脚本加载。
百度搜启动脚本的话,多半都说在/etc/rc.d/rc.local里面添加”sudo insmod /XXX/YYY/ZZZ.ko”。opensuse与rc.local对应的文件是/etc/rc.d/after.local。通过修改这个配置文件,可以让系统在所有启动脚本都执行完后,执行用户添加的命令或脚本。


6#小结

我通过国嵌的dnw是成功下载了,但是国嵌并没有提供dnw的源码,我也不清楚之前下载的dnw到底存在什么问题(现象是:1. 下载4Bytes就会失败;2. Tiny6410端收到的文件大小信息和发送端不一致)。回头找到了国嵌dnw源码之后,对比以下,估计就能找到问题所在。

猜你喜欢

转载自blog.csdn.net/lingsuifenfei123/article/details/73382036