Ubuntu12.04 使用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下载的问题;后面的路就开阔多了!记下各种资源和心得,和大家分享。

 

DNW和USB驱动准备

下载源码

可以网上搜索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

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

 

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都已成功完成;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值