如果需要转载本文,就注明本文出处,谢谢。
众所周知,在做这类嵌入式开发,尤其是我们自己在玩开发板的时候,一般,都需要建立起一个下载的环境。
通常,串口工具软件会使用标准的COMx端口与目标开发板进行通信,控制与显示,而下载image文件到目标开发板,通常用并口或者USB口。
很遗憾的是,随着电子技术,通信技术的发展,并口,串口这类接口正在退出舞台,逐渐成为历史。
今天,我们就针对于笔记本或者台式机上没有COM口和并口的计算机,介绍一个可用的方法,建立起下载image文件到目标开发板的一个通道。
下面所介绍的内容,都是基于Linux OS的,我使用的是Ubuntu。信息如下。
shawn@shawn-ThinkPad-T410:~$ uname -a
Linux shawn-ThinkPad-T410 3.0.0-16-generic-pae #28-Ubuntu SMP Fri Jan 27 19:24:01 UTC 2012 i686 i686 i386 GNU/Linux
这里会用到一个USB转RS232的转换接口,从计算机出来是USB信号,经过该转换接口之后,转换为RS232信号到达目标开发板的9-pin COM口。
shawn@shawn-ThinkPad-T410:/dev$ ls -al tty*
crw-rw-rw- 1 root tty 5, 0 2012-02-19 23:42 tty
crw--w---- 1 root tty 4, 0 2012-02-19 13:03 tty0
crw------- 1 root root 4, 1 2012-02-19 13:03 tty1
crw--w---- 1 root tty 4, 10 2012-02-19 13:03 tty10
crw--w---- 1 root tty 4, 11 2012-02-19 13:03 tty11
crw--w---- 1 root tty 4, 12 2012-02-19 13:03 tty12
crw--w---- 1 root tty 4, 13 2012-02-19 13:03 tty13
crw--w---- 1 root tty 4, 14 2012-02-19 13:03 tty14
crw--w---- 1 root tty 4, 15 2012-02-19 13:03 tty15
crw--w---- 1 root tty 4, 16 2012-02-19 13:03 tty16
crw--w---- 1 root tty 4, 17 2012-02-19 13:03 tty17
crw--w---- 1 root tty 4, 18 2012-02-19 13:03 tty18
crw--w---- 1 root tty 4, 19 2012-02-19 13:03 tty19
crw------- 1 root root 4, 2 2012-02-19 13:03 tty2
crw--w---- 1 root tty 4, 20 2012-02-19 13:03 tty20
crw--w---- 1 root tty 4, 21 2012-02-19 13:03 tty21
crw--w---- 1 root tty 4, 22 2012-02-19 13:03 tty22
crw--w---- 1 root tty 4, 23 2012-02-19 13:03 tty23
crw--w---- 1 root tty 4, 24 2012-02-19 13:03 tty24
crw--w---- 1 root tty 4, 25 2012-02-19 13:03 tty25
crw--w---- 1 root tty 4, 26 2012-02-19 13:03 tty26
crw--w---- 1 root tty 4, 27 2012-02-19 13:03 tty27
crw--w---- 1 root tty 4, 28 2012-02-19 13:03 tty28
crw--w---- 1 root tty 4, 29 2012-02-19 13:03 tty29
crw------- 1 root root 4, 3 2012-02-19 13:03 tty3
crw--w---- 1 root tty 4, 30 2012-02-19 13:03 tty30
crw--w---- 1 root tty 4, 31 2012-02-19 13:03 tty31
crw--w---- 1 root tty 4, 32 2012-02-19 13:03 tty32
crw--w---- 1 root tty 4, 33 2012-02-19 13:03 tty33
crw--w---- 1 root tty 4, 34 2012-02-19 13:03 tty34
crw--w---- 1 root tty 4, 35 2012-02-19 13:03 tty35
crw--w---- 1 root tty 4, 36 2012-02-19 13:03 tty36
crw--w---- 1 root tty 4, 37 2012-02-19 13:03 tty37
crw--w---- 1 root tty 4, 38 2012-02-19 13:03 tty38
crw--w---- 1 root tty 4, 39 2012-02-19 13:03 tty39
crw------- 1 root root 4, 4 2012-02-19 13:03 tty4
crw--w---- 1 root tty 4, 40 2012-02-19 13:03 tty40
crw--w---- 1 root tty 4, 41 2012-02-19 13:03 tty41
crw--w---- 1 root tty 4, 42 2012-02-19 13:03 tty42
crw--w---- 1 root tty 4, 43 2012-02-19 13:03 tty43
crw--w---- 1 root tty 4, 44 2012-02-19 13:03 tty44
crw--w---- 1 root tty 4, 45 2012-02-19 13:03 tty45
crw--w---- 1 root tty 4, 46 2012-02-19 13:03 tty46
crw--w---- 1 root tty 4, 47 2012-02-19 13:03 tty47
crw--w---- 1 root tty 4, 48 2012-02-19 13:03 tty48
crw--w---- 1 root tty 4, 49 2012-02-19 13:03 tty49
crw------- 1 root root 4, 5 2012-02-19 13:03 tty5
crw--w---- 1 root tty 4, 50 2012-02-19 13:03 tty50
crw--w---- 1 root tty 4, 51 2012-02-19 13:03 tty51
crw--w---- 1 root tty 4, 52 2012-02-19 13:03 tty52
crw--w---- 1 root tty 4, 53 2012-02-19 13:03 tty53
crw--w---- 1 root tty 4, 54 2012-02-19 13:03 tty54
crw--w---- 1 root tty 4, 55 2012-02-19 13:03 tty55
crw--w---- 1 root tty 4, 56 2012-02-19 13:03 tty56
crw--w---- 1 root tty 4, 57 2012-02-19 13:03 tty57
crw--w---- 1 root tty 4, 58 2012-02-19 13:03 tty58
crw--w---- 1 root tty 4, 59 2012-02-19 13:03 tty59
crw------- 1 root root 4, 6 2012-02-19 13:03 tty6
crw--w---- 1 root tty 4, 60 2012-02-19 13:03 tty60
crw--w---- 1 root tty 4, 61 2012-02-19 13:03 tty61
crw--w---- 1 root tty 4, 62 2012-02-19 13:03 tty62
crw--w---- 1 root tty 4, 63 2012-02-19 13:03 tty63
crw--w---- 1 root tty 4, 7 2012-02-19 13:03 tty7
crw--w---- 1 root tty 4, 8 2012-02-19 22:00 tty8
crw--w---- 1 root tty 4, 9 2012-02-19 13:03 tty9
crw------- 1 root root 5, 3 2012-02-19 13:03 ttyprintk
crw-rw---- 1 root dialout 4, 64 2012-02-19 13:03 ttyS0
crw-rw---- 1 root dialout 4, 65 2012-02-19 13:03 ttyS1
crw-rw---- 1 root dialout 4, 74 2012-02-19 13:03 ttyS10
crw-rw---- 1 root dialout 4, 75 2012-02-19 13:03 ttyS11
crw-rw---- 1 root dialout 4, 76 2012-02-19 13:03 ttyS12
crw-rw---- 1 root dialout 4, 77 2012-02-19 13:03 ttyS13
crw-rw---- 1 root dialout 4, 78 2012-02-19 13:03 ttyS14
crw-rw---- 1 root dialout 4, 79 2012-02-19 13:03 ttyS15
crw-rw---- 1 root dialout 4, 80 2012-02-19 13:03 ttyS16
crw-rw---- 1 root dialout 4, 81 2012-02-19 13:03 ttyS17
crw-rw---- 1 root dialout 4, 82 2012-02-19 13:03 ttyS18
crw-rw---- 1 root dialout 4, 83 2012-02-19 13:03 ttyS19
crw-rw---- 1 root dialout 4, 66 2012-02-19 13:03 ttyS2
crw-rw---- 1 root dialout 4, 84 2012-02-19 13:03 ttyS20
crw-rw---- 1 root dialout 4, 85 2012-02-19 13:03 ttyS21
crw-rw---- 1 root dialout 4, 86 2012-02-19 13:03 ttyS22
crw-rw---- 1 root dialout 4, 87 2012-02-19 13:03 ttyS23
crw-rw---- 1 root dialout 4, 88 2012-02-19 13:03 ttyS24
crw-rw---- 1 root dialout 4, 89 2012-02-19 13:03 ttyS25
crw-rw---- 1 root dialout 4, 90 2012-02-19 13:03 ttyS26
crw-rw---- 1 root dialout 4, 91 2012-02-19 13:03 ttyS27
crw-rw---- 1 root dialout 4, 92 2012-02-19 13:03 ttyS28
crw-rw---- 1 root dialout 4, 93 2012-02-19 13:03 ttyS29
crw-rw---- 1 root dialout 4, 67 2012-02-19 13:03 ttyS3
crw-rw---- 1 root dialout 4, 94 2012-02-19 13:03 ttyS30
crw-rw---- 1 root dialout 4, 95 2012-02-19 13:03 ttyS31
crw-rw---- 1 root dialout 4, 68 2012-02-19 13:03 ttyS4
crw-rw---- 1 root dialout 4, 69 2012-02-19 13:03 ttyS5
crw-rw---- 1 root dialout 4, 70 2012-02-19 13:03 ttyS6
crw-rw---- 1 root dialout 4, 71 2012-02-19 13:03 ttyS7
crw-rw---- 1 root dialout 4, 72 2012-02-19 13:03 ttyS8
crw-rw---- 1 root dialout 4, 73 2012-02-19 13:03 ttyS9
crw-rw---- 1 root dialout 188, 0 2012-02-19 23:50 ttyUSB0 shawn@shawn-ThinkPad-T410:/dev$
上面,黑色字体一行,即是我的USB转串口的设备
下面配置minicom,串口通信工具
shawn@shawn-ThinkPad-T410:~$ 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 - 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 : No |
| G - Software Flow Control : No |
| |
| Change which setting? |
+-----------------------------------------------------------------------+
| Screen and keyboard |
| Save setup as dfl |
| Save setup as.. |
| Exit |
| Exit from Minicom |
+--------------------------+
设置好之后,输入回车,退回到如下界面。
注意,上面的设置中,默认值通常是开启硬件流控的,也就是Hardware flow control。请取消该选项,也就是设置成NO。
serial device 要选择正确,可以通过点击A,进行serial deviece的配置。配置好之后,点击Enter回车退出serial setup 建立界面。
+-----[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 |
+--------------------------+
经过配置,配置发生了变化,为了让配置生效,我们选择Exit from Minicom,退出Minicom。
之后,输入MInicom就会以默认配置启动了。
shawn@shawn-ThinkPad-T410:~$ minicom
上面配置好了串口,这时,如果给板子上电的话,
U-boot的菜单就会显示在Minicom的界面上了。
之后,让我们来看看,如何使用另一个USB口将image文件上载到目标开发板上。
这里会用到一个工具,名为 s3c2410_boot_usb,其sources的下载地址是
http://code.google.com/p/mini2440/downloads/detail?name=s3c2410_boot_usb-20060807.tar.bz2&can=2&q
下载保存到你希望的路径下。解压,有4个文件,如下面的黑色字体描述
shawn@shawn-ThinkPad-T410:~/Downloads$ tar xjf s3c2410_boot_usb-20060807.tar.bz2
shawn@shawn-ThinkPad-T410:~/Downloads/s3c2410_boot_usb$ ls
boot_usb.c lsusb.txt Makefile README shawn@shawn-ThinkPad-T410:~/Downloads/s3c2410_boot_usb$
但是,不要着急,在利用该sources构建s3c2410_boot_usb这么一个通过USB口upload文件到目标开发板的工具之前,
需要做2件事,
1. 确认安装libusb-dev,这个package里应该包含了一些操作USB接口的APIs。
shawn@shawn-ThinkPad-T410:~/Downloads/s3c2410_boot_usb$ sudo apt-get install libusb-dev
2. 如果你的Ubuntu安装的GCC版本是4.6,或者以上的,
shawn@shawn-ThinkPad-T410:~$ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.6.1/lto-wrapper Target: i686-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.1-9ubuntu3' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++,go --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-plugin --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu Thread model: posix gcc version 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3) shawn@shawn-ThinkPad-T410:~$
那么,需要修改 s3c2410_boot_usb 目录中的Makefile中的2行
将
s3c2410_boot_usb: boot_usb.o
$(CC) $(LDFLAGS) -o $@ $<
s3c2410_boot_usb: boot_usb.o
$(CC) -o $@ $< $(LDFLAGS)
做完上面的2件事,之后就可以在 s3c2410_boot_usb 目录下输入make 命令,构建s3c2410_boot_usb工具了
shawn@shawn-ThinkPad-T410:~/Downloads/s3c2410_boot_usb$ make
cc -o s3c2410_boot_usb boot_usb.o -lusb
shawn@shawn-ThinkPad-T410:~/Downloads/s3c2410_boot_usb$
该工具的使用命令是,第一个是上载工具,第二个参数是要上载到目标开发板的zImage镜像文件,注意两个参数间的空格
shawn@shawn-ThinkPad-T410:~/Downloads/s3c2410_boot_usb$ sudo ./s3c2410_boot_usb ~/test/build-linux-2.6.33/arch/arm/boot/zImage csum = 0x5b9d
send_file: addr = 0x33f80000, len = 0x002003e4
Error downloading program shawn@shawn-ThinkPad-T410:~/Downloads/s3c2410_boot_usb$
令人觉得奇怪的是,虽然上面提示了Error,但是,MInicom 却显示下载完毕,并“Uncompressing Linux . . "成功,"booting the kernel."了。