Ubuntu 12.10 使用DNW传数据 进行ARM开发板烧写
2013-04-14 10:05
387 查看
Ubuntu12.10使用DNW传数据进行ARM开发板烧写
原文地址: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源码和驱动包;详情查看:
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都已成功完成;
更多的测试,欢迎关注。
相关文章推荐
- Ubuntu12.10 使用DNW传数据 进行ARM开发板烧写
- Ubuntu12.10 使用DNW传数据 进行ARM开发板烧写
- Ubuntu12.10 使用DNW传数据 进行ARM开发板烧写
- Ubuntu12.10 使用DNW传数据 进行ARM开发板烧写
- linux下使用DNW传数据 进行ARM开发板烧写
- Ubuntu12.10 使用DNW传数据 进行ARM开发板烧写
- Ubuntu12.04 使用DNW传数据 进行ARM开发板烧写
- Ubuntu 13.04设置root用户登录图形界面与在Ubuntu 12.10中使用root进行登录方法
- mini2440_x35 ubuntu下使用dnw进行传送文件
- 在使用SSH过程中,在JSP页面中对数据进行处理,出异常!
- Linux服务器使用kettle进行数据采集及入库
- 使用Weka进行数据挖掘
- 使用文件对数据进行存储、访问
- MySQL的源码安装及使用UDFs进行数据自动更新的教程
- 掌握 Ajax,第 10 部分: 使用 JSON 进行数据传输
- c# 使用Newtonsoft.Json 对数据进行打包与解析
- 使用Junit对spring controller进行单元测试与数据的分页
- 使用JSON 进行网络数据交换
- 在Silverlight中使用Socket进行通信(1)Socket"请求-回复"方式的简易数据交换
- 如何对Hive UDF进行使用线上数据达到回归测试