加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
README 5.31 KB
一键复制 编辑 原始数据 按行查看 历史
edward 提交于 2015-01-26 11:28 . 编译前需要安装libusb库
1、源码说明:
1.1起因
由于本人最近要做一个嵌入式的项目,涉及到开发板的调试,按照开发板商提供的文档都
是要求在winxp下用dnw和xshell来调试,xshell还好说,关键是dnw usb驱动在win7下
无法安装,而且我工作环境都是linux,在linux下编译调试开发板本就是天经地义的事儿,
却被这些开发板商教导成在win下用虚拟机装linux系统作为编译环境,在win下用dnw来烧
写调试开发板,win系统还得是xp的,这不是坑爹吗?
1.2说明
本源代码收集自网络,经过整理和加入宏定义,使其适用于OK6410/EZ6410/FS2410和
UT-Exynos4412(我当前使用的)开发板;对源码进行了适当的注释和错误纠正,同时加
了dnw2源代码(利用libusb而不需内核驱动);同样以GPL协议发布;
2、使用说明:
2.1 编译
安装libusb
sudo apt-get install libusb-dev
git clone git@github.com:hechaoyuyu/dnw-linux.git
cd dnw-linux
make
make install
安装的文件为:
dnw --- 用于传输数据的软件(依赖secbulk.ko),用法:dnw filename
secbulk.ko --- 识别下载用USB的驱动;
dnw.rules --- 自动加载secbulk.ko;
dnw2 --- 基于libusb而不用内核模块的数据传输程序,用法:dnw2 filename
2.1 使用
首先用串口线连好PC与开发板(我用的是usb转串口线),并设置好kermit或minicom(
用dmesg查看串口设备文件),启动开发板进入u-boot,输入dnw <下载地址>,如我要
下载bootloader,则在开发板上输入dnw 0x40008000,u-boot会提示你连接usb otg
线,连接好usb线后,u-boot会提示已经连接完毕,可以进行数据传输,则在PC端输入
dnw file_name或dnw2 file_name,我这里是输入sudo dnw2 bootloader_mmc.bin,
数据传输完毕即可进行烧写操作。
2.2 注意
关于dnw中指定的下载地址,请按自己开发板中记录的地址为准,再去改dnw2.c或dnw.c
中对应的RAM_BASE。连好usb线后,先在PC上用lsusb查看刚连接的usb设备ID号,再去
改dnw2.c或secbulk.c中VENDOR_ID/PRODUCT_ID或secbulk_table。
3、后续开发
如有必要和时间,打算开发一个类似于win下的dnw图形界面版,集kermit/minicom与
dnw下载功能如一体,用pygtk或qt来做界面,如果谁有兴趣,可以与我联系:
hechaoyuyu@gmail.com 。
以下是针对OK6410开发板的使用流程:
1. build and install
=====================
$ make
$ sudo make install
2. dnw tool usage
=====================
Connect board to PC and open minicom. Boot board and enter U-Boot command line mode.
Then run command "dnw <download address>" in U-Boot. U-Boot may print bellow message:
Insert a OTG cable into the connector!
OTG cable Connected!
Now, Waiting for DNW to transmit data
Now, you can download your file to board by follow command on PC end:
$ sudo dnw <file_to_download>
Note: If your board isn't FL Ok6410, please set right load-address via "a" option.
Above steps have only download file to board's RAM, so you need flash
it to nand via U-Boot command "nand write".
If above doesn't work, pls check if you can see bellow message in `dmesg`.
usb 1-1: new full speed USB device using uhci_hcd and address 2
usb 1-1: configuration #1 chosen from 1 choice
secbulk:secbulk probing...
secbulk:bulk out endpoint found!
===============================================
some U-Boot commands special for FL Ok6410
(1) download U-Boot
$dnw 50008000
$nand erase 0 100000
$nand write.uboot 50008000 0 100000
#dnw default load address is 0xc0000000
all in one:
$dnw 50008000 && nand erase 0 100000 && nand write.uboot 50008000 0 100000
(2) download kernel
$dnw 50008000
$nand erase 100000 500000
$nand write.e 50008000 100000 500000
all in one:
$dnw 50008000 && nand erase 100000 500000 && nand write.e 50008000 100000 500000
(3) download yaffs2 root file system
$dnw 50008000
$nand erase 600000 #erase mtdblock2 partition
$nand write.yaffs2 50008000 600000 8000000 #instead 8000000 of real image size
all in one:
$dnw 50008000 && nand erase 600000 && nand write.yaffs2 50008000 600000 8000000
(4) download ubifs/cramfs root file system
$dnw 50008000
$nand erase 600000 #erase mtdblock2 partition
$nand write.e 50008000 600000 8000000 #instead 8000000 of real image size
all in one:
$dnw 50008000 && nand erase 600000 && nand write.e 50008000 600000 8000000
(5) download jffs2 root file system
$dnw 50008000
$nand erase 600000 #erase mtdblock2 partition
$nand write.jffs2 50008000 600000 8000000 #instead 8000000 of real image size
all in one:
$dnw 50008000 && nand erase 600000 && nand write.jffs2 50008000 600000 8000000
(6) deal with bad blocks
$nand scrub
(7) set kernel arguments
$setenv bootargs "root=/dev/mtdblock2 rootfstype=yaffs2 console=ttySAC0,115200"
$save
$reset
(8) boot from NFS
$setenv bootargs "root=/dev/nfs nfsroot=192.168.0.231:/FileSystem-Yaffs2 \
ip=192.168.0.232:192.168.0.231:192.168.0.201:255.255.255.0:8.8.8.8:eth0:off \
console=ttySAC0,115200"
$save
# "192.168.0.231" is your host ip; "192.168.0.232" is your board's ip;
# "192.168.0.201" is gateway; "255.255.255.0" is mask.
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化