因为我的电脑是win10的,搞了半天都装不了dnw,索性就想能不能在linux中直接安装呢。网上搜了一大堆教程,很乱,这里我做个整理吧。我的板子是s5pv210的,系统是ubuntu14.0的。
1.首先下载usb驱动和下载工具,用的是点击打开链接提供的。我下载之后放到共享文件夹中,然后在虚拟机中解压。
2.然后会发现有四个文件(如果有多个,请先make clean清除一下),可以先看一下readme,里面有讲的很清楚的过程。
3.先进入secbulk_driver的usb驱动文件夹,先make clean清除一下,然后vim secbulk.c中修改一下其中的一段代码。
#ifdef OK6410
#define DOWNLOAD_USB_ID_MAJOR 0x04e8
#define DOWNLOAD_USB_ID_MINOR 0x1234
#else /* add your usb info if neccessary */
#define DOWNLOAD_USB_ID_MAJOR 0x04e8
#define DOWNLOAD_USB_ID_MINOR 0x1234
#endif
我们要改的是DOWNLOAD_USB_ID_MAJOR 和DOWNLOAD_USB_ID_MINOR 后面的值,此值是需要在命令行中输入lsusb可以得到的(不同的flash要在那个表单中加入一些设备相关的信息类似ID号,在程序加载的时候自动读取芯片内部ID和这个相比较,没有注册的设备是不会被系统支持的,可以通过lsusb获得idProduct和idVendor,需要在插上板子,并准备下载时此时设备连上时lsusb)
4.保存退出。之后编译一下并加载内核模块:
$make -C /lib/modules/`uname -r`/build M=`pwd` modules
5.我们把这个文件可以保存在一个比较方便的文件夹中,比如mkdir /root/mydriver
然后把cp secbulk.ko /root/mydriver
用insmod命令加载模块 : insmod ./secbulk.ko
加载后用dmesg命令可以看到模块已经成功加载
[ 238.007970] secbulk:secbulk loaded
[ 238.009101] usbcore: registered new interface driver secbulk
6.vim /etc/init.d/rc.local 在文件中加入insmod /root/mydriver/secbulk.ko一行
这是因为开机的时候不会自动加载,这样每次都要先加载才可以使用,很麻烦,此时将其加入开机脚本,
使其得到自动加载(注意有的时候是/etc/rc.local,还有/root/mydriver是我们自己刚才自己添加的)
7.我们再进入dnw_src的文件夹中,同样先make clean 清除一下。然后vim dnw.c,修改dnw.c中的前面
const char* dev = "/dev/secbulk0";
static long DOWNLOAD_ADDR = 0xd0020010;这个是你的程序的下载地址,自行修改。
保存退出,make编译一下。将生成的可执行文件copy到/usr/local/bin目录$ cp dnw /usr/local/bin
这样这样就可以在shell下面直接使用dnw命令了
8.这样我们就已经设置完成了。这个时候我们打开按下板子开关,连接好usb下载线,然后输入
$dnw -f filename 你自己的文件名,发现下载成功。
注意:有时候由于内核的升级,运行时会提醒Can not open /dev/secbulk0的错误,此时需要重新到secbulk目录执行$make -C /lib/modules/`uname -r`/build M=`pwd` modules,然后加载模块$sudo insmod ./secbulk.ko即可!