您的位置:首页 > 其它

Ubuntu 12.10 使用DNW传数据 进行ARM开发板烧写

2013-04-14 10:05 387 查看


Ubuntu12.10使用DNW传数据进行ARM开发板烧写

原文地址:http://www.cnblogs.com/QuLory/archive/2012/11/16/2773389.html

Part1前言

最近在研究OK6410开发板;但windows下的rvds真是不好用,烧写程序到开发板还需要dnw,而这各种软件都要在win下搞,很是憋屈,而且64位的win7还出各种问题。我要移植的是Linux系统呢,咋的就不能在linux完成所有步骤呢?
昨晚到处查找资料,总算找到了dnw可在linux成功运行的消息;
又遇到了linux下的串口连接终端minicom和kermit;不断折腾和测试,总算搞定了dnw和usb下载的问题;后面的路就开阔多了!记下各种资源和心得,和大家分享。

Part2工具准备

2.1串口终端kermit

这个直接命令安装就可以了,另外需要简单熟悉一下他的配置和两种模式;

2.1.1安装kermit

sudoapt-getinstallckermit


2.1.2配置kermit

建立配置文件~/.kermrc,内容如下:



#USB转串口,所以设备为/dev/ttyUSB0
SETLINE/dev/ttyUSB0
#设置波特率
#setspeed115200

#关闭通信监视,必须关闭才能看到开发板返回的信息
setcarrier-watchoff




2.1.3使用kermit连接开发板

在连接好USB转串口后,该USB能够被Linux直接识别,对应设备文件为:/dev/ttyUSB0;
这里需要注意的是:先连接好USB串口和开发板,然后再打开配置好的kermit终端;否则kermit会读取配置文件先占用和锁定了/dev/ttyUSB0,那么再插上USB串口后,该设备分配的设备文件就成了/dev/ttyUSB1,从事出现不匹配,在终端中无法控制开发板的情况;(不过这种情况也很好处理,就是在kermit中设置新的连接对象,如下:)

setline/dev/ttyUSB1#这个根据实际情况设置,可以通过ls/dev/ttyUSB*的方式查找到名字


2.1.4kermit的两种模式

进入后默认进入命令模式,可以执行很多命令,包括连接开发板的connect命令:



C-Kermit9.0.302OPENSOURCE:,20Aug2011,forLinux+SSL+KRB5
Copyright(C)1985,2011,
TrusteesofColumbiaUniversityintheCityofNewYork.
Type?orHELPforhelp.
(/media/GoldenResources/arm/src/dnw4linux/)C-Kermit>?Command,oneofthefollowing:
addcheckdisablegetclearnmmovepushreturnstatisticstype
answerchmoddogetokLICENSEmovepwdrloginstatusundeclare
apcclearechogotolineoutmsendquitrmdirstopundefine
arraycloseeditgreplogmsleepreadrunSUPPORTversion
askconnectenableheadloginopenreceivescreensuspendvoid
askqcopyendhanguplogoutorientationredialscriptswitchwait
assigndateevaluateHELPlookupoutputredirectsendtailwhere
associatedebugexithttpmailpauseredoservertakewhile
authenticatedecrementfileifmanualpdialregetsettelnetwho
backdefinefinishincrementmessagepiperemoteshifttouchwrite
browsedeleteforinputminputprintremoveshowtracexecho
byedialftpINTROmgetptyrenamespacetranslatexmessage
cddirectorygetkcdmkdirpurgeresendsshtransmit
oramacroname("do?"foralist)oroneofthetokens:!#(.;:<@^{




随时出入问号?可以获得帮助和代码补全;在输入connect命令连接开发板后(在这之前需要配置连接对象,可以用命令setline/dev/ttyUSB0的方式完成),进入到连接后的开发板模式,显示的为开发板反馈回来的信息,可以控制整个开发板,要返回原来的命令模式使用快捷键Ctrl+\,然后按C字母返回;

2.2DNW和USB驱动准备

2.2.1下载源码

可以网上搜索dnw4linux,下载QQ2440版本的源码,或者直接下载我整理后的,可以适用于OK6410及类似开发板的dnw源码和驱动包;
详情查看:https://github.com/Qunero/dnw4linux该页面的说明,或者直接下载压缩包:
https://github.com/Qunero/dnw4linux/downloads

2.2.2编译安装和使用

直接查看该软件包的README,按步执行即可:



1、源码说明:
本源代码收集自网络,经过整理和加入宏定义,使其适用于OK6410开发板;对
源码进行了适当的注释和错误纠正;同样以GPL协议发布;

2、使用说明:
2.1编译
直接在解压后的目录中make即可;然后在对应的子目录中可以找到编译好的文件;
更方便的做法:makeinstall会直接将相关文件编译好,然后放到当前目录下,
编译好的文件为:
dnw---用于传输数据的软件,用法:dnwfilename
secbulk.ko---识别下载用USB的驱动;用法:sudoinsmodsecbulk.ko

2.2自动化
在编译成功后,完成下列步骤方面以后使用:
2.2.1将dnw放到系统路径:sudocpdnw/usr/sbin/
2.2.2将secbulk.ko驱动设为自动加载:
先在住目录建立mydriver目录:mkdir~/mydriver
将驱动放入自定义mydriver中:cpsecbulk.ko~/mydriver/
修改/etc/rc.d/rc.local文件,末尾加入:sudoinsmod$HOME/secbulk.ko
注意:将上面的$HOME替换成实际的绝对路径,比如:/home/qulory
2.3清理
直接执行makeclean,让你的源码目录干干净净;
2.4使用
注意,当前编译好的dnw在32位linux可用,但是secbulk.ko驱动文件需要自己编译
必须同当前使用的内核的版本一致,内核版本升级后也需要重新编译;

3、移植帮助:
要成功移植到类似的开发板,需要以下2步:
3.1驱动处理:
进入secbulk_driver子目录,修改文件secbulk.c中的关于DOWNLOAD_USB_ID_MAJOR
和DOWNLOAD_USB_ID_MINOR的宏定义,让其与你的usb对应,可以通过lsusb命令查看
获得该id的信息;
3.2dnw下载地址的处理:
进入dnw_src目录,修改dnw.c文件中DOWNLOAD_ADDR的定义,将其设为你的开发板
的下载地址;

3.3有疑问可以联系Qulory<Quner612@qq.com>;




驱动安装好后,在用kermit连接好开发板,然后重启开发板,让其停留在u-boot阶段;然后在kermit中输入dnw50008000,这个地址要和dnw软件编译时指定的下载地址一致,然后功过lsusb命令可以检查到该usb线,如3.2中所示;并且在正常执行了:sudoinsmodsecbulk.ko后,可以检查到如下信息:

less/var/log/kern.log
Nov1613:21:21qunengrong-Studio-1450kernel:[139476.958530]secbulk:secbulkprobing...
Nov1613:21:21qunengrong-Studio-1450kernel:[139476.958534]secbulk:bulkoutendpointfound!


至此驱动安装和dnw软件准备就绪;

2.2.3关于dnw2

dnw2使用libusb来实现对该USB的操控,但是不如dnw来的直接:/dev/secbulk0,前者更加系统但是使用传输数据的时候经常出现如下错误:

Targetusbdevicefound!
Cannotclaiminterface:Deviceorresourcebusy


后续有时间详细分析以下在处理;

2.3minicom终端的使用

minicom是基于字符菜单的,不太好用,而且经常快捷键不响应和出现乱码;不过附加使用方法如下:

2.3.1使用minicom-s启动并配置

使用sudo启动:

sudominicom-s


主要设置好串口,如下蓝色部分:



+-----[configuration]------+
|Filenamesandpaths|
|Filetransferprotocols|
|Serialportsetup|
|Modemanddialing|
|Screenandkeyboard|
|Savesetupasdfl|
|Savesetupas..|
|Exit|
|ExitfromMinicom|
+--------------------------+




在该菜单中输入A,修改串口设备为/dev/ttyUSB0,如下:



+-----------------------------------------------------------------------+
|A-SerialDevice:/dev/ttyUSB0|
|B-LockfileLocation:/var/lock|
|C-CallinProgram:|
|D-CalloutProgram:|
|E-Bps/Par/Bits:1152008N1|
|F-HardwareFlowControl:Yes|
|G-SoftwareFlowControl:No|
||
|Changewhichsetting?|
+-----------------------------------------------------------------------+





退出并保存,然后可以开始使用了:



Welcometominicom2.6.1

OPTIONS:I18n
CompiledonMay12012,10:55:27.
Port/dev/ttyUSB0

PressCTRL-AZforhelponspecialkeys

exitnotallowedfrommaininputshell.
SMDK6410#





Part3烧写测试

3.1连接好USB串口并打开kermit终端

参考2.1.3中的说明,连接好开发板,启动kermit后,输入connect命令,开始在kermit中控制开发板;让其停留在u-boot的命令行,选择2进行从USB烧写系统的菜单,然后选择1烧写u-boot;



U-Boot1.1.6(Nov162012-12:23:47)forSMDK6410

****************************************
**u-boot1.1.6**
**UpdatedforOK6410TE6410Board**
**Version(2012-09-23)**
**OEM:ForlinxEmbedded**
**Web:http://www.witech.com.cn**
****************************************

CPU:S3C6410@532MHz
Fclk=532MHz,Hclk=133MHz,Pclk=66MHz,Serial=CLKUART(SYNCMode)
Board:SMDK6410
DRAM:256MB
Flash:0kB
NAND:2048MB
In:serial
Out:serial
Err:serial
Hitanykeytostopautoboot:0

######################UserMenuforOK6410#####################
[1]Formatthenandflash
[2]BurnimagefromUSB
[3]configurethelcdsize
[4]Bootthesystem
[5]Reboottheu-boot
[6]Exittocommandline
-----------------------------Select---------------------------------
EnteryourSelection:2

#####Selectthefuction#####
[1]Flashu-boot
[2]Flashkernel
[3]Flashsystem
[4]Exit
EnteryourSelection:1

NANDerase:device0offset0x0,size0x200000
Erasingat0x180000--100%complete.
OK
InsertaOTGcableintotheconnector!
OTGcableConnected!
Now,WaitingforDNWtotransmitdata






3.2连接好USB数据线并使用DWN传数据

在开发板处于接收数据的状态下,在该USB插到linux系统上就能够识别出该USB的信息,也只有这个时候才能识别到,如下,注意蓝色部分(该USB的设备ID,关系到第二部分的驱动程序的对应内容):



$lsusb
Bus001Device003:ID0c45:6407Microdia
Bus002Device041:ID04e8:1234SamsungElectronicsCo.,Ltd
Bus004Device002:ID0a5c:4500BroadcomCorp.BCM2046B1USB2.0Hub(partofBCM2046Bluetooth)
Bus008Device023:ID067b:2303ProlificTechnology,Inc.PL2303SerialPort
Bus001Device001:ID1d6b:0002LinuxFoundation2.0roothub
Bus002Device001:ID1d6b:0002LinuxFoundation2.0roothub
Bus003Device001:ID1d6b:0001LinuxFoundation1.1roothub
Bus004Device001:ID1d6b:0001LinuxFoundation1.1roothub
Bus005Device001:ID1d6b:0001LinuxFoundation1.1roothub
Bus006Device001:ID1d6b:0001LinuxFoundation1.1roothub
Bus007Device001:ID1d6b:0001LinuxFoundation1.1roothub
Bus008Device001:ID1d6b:0001LinuxFoundation1.1roothub
Bus004Device003:ID413c:8161DellComputerCorp.IntegratedKeyboard
Bus004Device004:ID413c:8162DellComputerCorp.IntegratedTouchpad[Synaptics]




在另一个终端中用dnw写数据,最后状态提示传输成功:

$sudodnwu-boot.bin
filename:u-boot.bin
filesize:212992bytes
Writingdata...
100213002bytes!OK



在kermit中观察状态,成功写入数据:



#####Selectthefuction#####
[1]Flashu-boot
[2]Flashkernel
[3]Flashsystem
[4]Exit
EnteryourSelection:1

NANDerase:device0offset0x0,size0x200000
Erasingat0x180000--100%complete.
OK
InsertaOTGcableintotheconnector!
OTGcableConnected!
Now,WaitingforDNWtotransmitdata
DownloadDone!!DownloadAddress:0x50008000,DownloadFilesize:0x34000
Checksumisbeingcalculated.
ChecksumO.K.

NANDwrite:device0offset0x0,size0x200000
1032192byteswritten:OK

#####Selectthefuction#####
[1]Flashu-boot
[2]Flashkernel
[3]Flashsystem
[4]Exit
EnteryourSelection:




然后选择4退出烧写,然后重启u-boot看是否可用:



#####Selectthefuction#####
[1]Flashu-boot
[2]Flashkernel
[3]Flashsystem
[4]Exit
EnteryourSelection:4

######################UserMenuforOK6410#####################
[1]Formatthenandflash
[2]BurnimagefromUSB
[3]configurethelcdsize
[4]Bootthesystem
[5]Reboottheu-boot
[6]Exittocommandline
-----------------------------Select---------------------------------
EnteryourSelection:5
reset...

KK

U-Boot1.1.6(Nov162012-12:23:47)forSMDK6410

****************************************
**u-boot1.1.6**
**UpdatedforOK6410TE6410Board**
**Version(2012-09-23)**
**OEM:ForlinxEmbedded**
**Web:http://www.witech.com.cn**
****************************************

CPU:S3C6410@532MHz
Fclk=532MHz,Hclk=133MHz,Pclk=66MHz,Serial=CLKUART(SYNCMode)
Board:SMDK6410
DRAM:256MB
Flash:0kB
NAND:2048MB
In:serial
Out:serial
Err:serial
Hitanykeytostopautoboot:0

NANDread:device0offset0x200000,size0x500000
s3c-nand:1bit(s)errordetected,correctedsuccessfully
5242880bytesread:OK
BootwithzImage

Startingkernel...




至此,说明重启进入u-boot已经成功,也就是刚刚我们的ubuntu下dnw传输数据和烧写u-boot都已成功完成;
更多的测试,欢迎关注。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: