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
sudo apt-get install ckermit
2.1.2 配置kermit
建立配置文件 ~/.kermrc, 内容如下:
#USB转串口,所以设备为/dev/ttyUSB0 SET LINE /dev/ttyUSB0 #设置波特率 #set speed 115200 #关闭通信监视,必须关闭才能看到开发板返回的信息 set carrier-watch off
2.1.3 使用kermit连接开发板
在连接好USB转串口后,该USB能够被Linux直接识别,对应设备文件为:/dev/ttyUSB0 ;
这里需要注意的是: 先连接好USB串口和开发板,然后再打开配置好的kermit终端;否则kermit会读取配置文件先占用和锁定了/dev/ttyUSB0, 那么再插上USB串口后,该设备分配的设备文件就成了/dev/ttyUSB1, 从事出现不匹配,在终端中无法控制开发板的情况;(不过这种情况也很好处理,就是在kermit中设置新的连接对象,如下:)
set line /dev/ttyUSB1 #这个根据实际情况设置,可以通过 ls /dev/ttyUSB* 的方式查找到名字
2.1.4 kermit的两种模式
进入后默认进入命令模式,可以执行很多命令,包括连接开发板的connect命令:
C-Kermit 9.0.302 OPEN SOURCE:, 20 Aug 2011, for Linux+SSL+KRB5 Copyright (C) 1985, 2011, Trustees of Columbia University in the City of New York. Type ? or HELP for help. (/media/GoldenResources/arm/src/dnw4linux/) C-Kermit>? Command, one of the following: add check disable getc learn mmove push return statistics type answer chmod do getok LICENSE move pwd rlogin status undeclare apc clear echo goto lineout msend quit rmdir stop undefine array close edit grep log msleep read run SUPPORT version ask connect enable head login open receive screen suspend void askq copy end hangup logout orientation redial script switch wait assign date evaluate HELP lookup output redirect send tail where associate debug exit http mail pause redo server take while authenticate decrement file if manual pdial reget set telnet who back define finish increment message pipe remote shift touch write browse delete for input minput print remove show trace xecho bye dial ftp INTRO mget pty rename space translate xmessage cd directory get kcd mkdir purge resend ssh transmit or a macro name ("do ?" for a list) or one of the tokens: ! # ( . ; : < @ ^ {
随时出入 问号 ? 可以获得帮助和代码补全; 在输入connect命令连接开发板后(在这之前需要配置连接对象,可以用命令 set line /dev/ttyUSB0 的方式完成),进入到连接后的开发板模式,显示的为开发板反馈回来的信息,可以控制整个开发板,要返回原来的命令模式使用快捷键 Ctrl+ \ , 然后 按C 字母返回;
2.2 DNW和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即可;然后在对应的子目录中可以找到编译好的文件; 更方便的做法:make install 会直接将相关文件编译好,然后放到当前目录下, 编译好的文件为: dnw --- 用于传输数据的软件,用法: dnw filename secbulk.ko --- 识别下载用USB的驱动; 用法: sudo insmod secbulk.ko 2.2 自动化 在编译成功后,完成下列步骤方面以后使用: 2.2.1 将dnw放到系统路径: sudo cp dnw /usr/sbin/ 2.2.2 将secbulk.ko驱动设为自动加载: 先在住目录建立mydriver目录:mkdir ~/mydriver 将驱动放入自定义mydriver中:cp secbulk.ko ~/mydriver/ 修改/etc/rc.d/rc.local文件,末尾加入: sudo insmod $HOME/secbulk.ko 注意: 将上面的$HOME替换成实际的绝对路径,比如: /home/qulory 2.3 清理 直接执行make clean, 让你的源码目录干干净净; 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.2 dnw下载地址的处理: 进入dnw_src目录,修改dnw.c文件中DOWNLOAD_ADDR的定义,将其设为你的开发板 的下载地址; 3.3 有疑问可以联系 Qulory<Quner612@qq.com>;
驱动安装好后,在用kermit连接好开发板,然后重启开发板,让其停留在u-boot阶段;然后在kermit中输入dnw 50008000, 这个地址要和dnw软件编译时指定的下载地址一致,然后功过lsusb命令可以检查到该usb线,如3.2 中所示;并且在正常执行了 : sudo insmod secbulk.ko 后,可以检查到如下信息:
less /var/log/kern.log Nov 16 13:21:21 qunengrong-Studio-1450 kernel: [139476.958530] secbulk:secbulk probing... Nov 16 13:21:21 qunengrong-Studio-1450 kernel: [139476.958534] secbulk:bulk out endpoint found!
至此驱动安装和dnw软件准备就绪;
2.2.3 关于dnw2
dnw2使用libusb来实现对该USB的操控,但是不如dnw来的直接:/dev/secbulk0 ,前者更加系统但是使用传输数据的时候经常出现如下错误:
Target usb device found!
Cannot claim interface: Device or resource busy
后续有时间详细分析以下在处理;
2.3 minicom终端的使用
minicom是基于字符菜单的,不太好用,而且经常快捷键不响应和出现乱码;不过附加使用方法如下:
2.3.1 使用minicom -s 启动并配置
使用sudo启动:
sudo minicom -s
主要设置好串口,如下蓝色部分:
+-----[configuration]------+
| Filenames and paths |
| File transfer protocols |
| Serial port setup |
| Modem and dialing |
| Screen and keyboard |
| Save setup as dfl |
| Save setup as.. |
| Exit |
| Exit from Minicom |
+--------------------------+
在该菜单中输入A,修改串口设备为 /dev/ttyUSB0,如下:
+-----------------------------------------------------------------------+ | A - Serial Device : /dev/ttyUSB0 | | B - Lockfile Location : /var/lock | | C - Callin Program : | | D - Callout Program : | | E - Bps/Par/Bits : 115200 8N1 | | F - Hardware Flow Control : Yes | | G - Software Flow Control : No | | | | Change which setting? | +-----------------------------------------------------------------------+
退出并保存,然后可以开始使用了:
Welcome to minicom 2.6.1 OPTIONS: I18n Compiled on May 1 2012, 10:55:27. Port /dev/ttyUSB0 Press CTRL-A Z for help on special keys exit not allowed from main input shell. SMDK6410 #
Part3烧写测试
3.1 连接好USB串口并打开kermit终端
参考2.1.3 中的说明,连接好开发板, 启动kermit后,输入connect命令, 开始在kermit中控制开发板; 让其停留在u-boot的命令行,选择2 进行从USB烧写系统的菜单,然后选择1烧写u-boot;
U-Boot 1.1.6 (Nov 16 2012 - 12:23:47) for SMDK6410 **************************************** ** u-boot 1.1.6 ** ** Updated for OK6410 TE6410 Board ** ** Version (2012-09-23) ** ** OEM: Forlinx Embedded ** ** Web: http://www.witech.com.cn ** **************************************** CPU: S3C6410 @532MHz Fclk = 532MHz, Hclk = 133MHz, Pclk = 66MHz, Serial = CLKUART (SYNC Mode) Board: SMDK6410 DRAM: 256 MB Flash: 0 kB NAND: 2048 MB In: serial Out: serial Err: serial Hit any key to stop autoboot: 0 ###################### User Menu for OK6410##################### [1] Format the nand flash [2] Burn image from USB [3] configure the lcd size [4] Boot the system [5] Reboot the u-boot [6] Exit to command line -----------------------------Select--------------------------------- Enter your Selection:2
##### Select the fuction ##### [1] Flash u-boot [2] Flash kernel [3] Flash system [4] Exit Enter your Selection:1 NAND erase: device 0 offset 0x0, size 0x200000 Erasing at 0x180000 -- 100% complete. OK Insert a OTG cable into the connector! OTG cable Connected! Now, Waiting for DNW to transmit data
3.2 连接好USB数据线并使用DWN传数据
在开发板处于接收数据的状态下,在该USB插到linux系统上就能够识别出该USB的信息,也只有这个时候才能识别到,如下,注意蓝色部分(该USB的设备ID,关系到第二部分的驱动程序的对应内容):
$lsusb Bus 001 Device 003: ID 0c45:6407 Microdia Bus 002 Device 041: ID 04e8:1234 Samsung Electronics Co., Ltd Bus 004 Device 002: ID 0a5c:4500 Broadcom Corp. BCM2046B1 USB 2.0 Hub (part of BCM2046 Bluetooth) Bus 008 Device 023: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 003: ID 413c:8161 Dell Computer Corp. Integrated Keyboard Bus 004 Device 004: ID 413c:8162 Dell Computer Corp. Integrated Touchpad [Synaptics]
在另一个终端中用dnw写数据,最后状态提示传输成功:
$sudo dnw u-boot.bin file name : u-boot.bin file size : 212992 bytes Writing data... 100 213002 bytes !OK
在kermit中观察状态,成功写入数据:
##### Select the fuction ##### [1] Flash u-boot [2] Flash kernel [3] Flash system [4] Exit Enter your Selection:1 NAND erase: device 0 offset 0x0, size 0x200000 Erasing at 0x180000 -- 100% complete. OK Insert a OTG cable into the connector! OTG cable Connected! Now, Waiting for DNW to transmit data Download Done!! Download Address: 0x50008000, Download Filesize:0x34000 Checksum is being calculated. Checksum O.K. NAND write: device 0 offset 0x0, size 0x200000 1032192 bytes written: OK ##### Select the fuction ##### [1] Flash u-boot [2] Flash kernel [3] Flash system [4] Exit Enter your Selection:
然后选择4退出烧写,然后重启u-boot看是否可用:
##### Select the fuction ##### [1] Flash u-boot [2] Flash kernel [3] Flash system [4] Exit Enter your Selection:4 ###################### User Menu for OK6410##################### [1] Format the nand flash [2] Burn image from USB [3] configure the lcd size [4] Boot the system [5] Reboot the u-boot [6] Exit to command line -----------------------------Select--------------------------------- Enter your Selection:5 reset... KK U-Boot 1.1.6 (Nov 16 2012 - 12:23:47) for SMDK6410 **************************************** ** u-boot 1.1.6 ** ** Updated for OK6410 TE6410 Board ** ** Version (2012-09-23) ** ** OEM: Forlinx Embedded ** ** Web: http://www.witech.com.cn ** **************************************** CPU: S3C6410 @532MHz Fclk = 532MHz, Hclk = 133MHz, Pclk = 66MHz, Serial = CLKUART (SYNC Mode) Board: SMDK6410 DRAM: 256 MB Flash: 0 kB NAND: 2048 MB In: serial Out: serial Err: serial Hit any key to stop autoboot: 0 NAND read: device 0 offset 0x200000, size 0x500000 s3c-nand: 1 bit(s) error detected, corrected successfully 5242880 bytes read: OK Boot with zImage Starting kernel ...
至此,说明重启进入u-boot已经成功,也就是刚刚我们的ubuntu下dnw传输数据和烧写u-boot都已成功完成;
更多的测试,欢迎关注。
作者:逸云沙鸥
出处:http://www.cnblogs.com/QuLory/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。