用br104h制作eCos实验板
2008-02-16 01:17:36 / 个人分类:eCos
用br104h制作eCos实验板
1 前言
做这个的初衷主要想在国内推广eCos,为Open Source做一些力所能及的事,为在校的大学生们提供一个理论和实践结合的平台,毕业后不再是一颗大白菜。希望读者的批评和建议能够email告知我,在后续版本中改进。我的邮箱是 chou.o.ning@gmail.com,因为工作比较忙,不一定会回复,但一定会认真阅读。
这里要非常感
2 有关版权
本人移植到br104h的所有代码都为合法版权的代码,并遵守GPL版权。
如果读者使用本开发包,并对其修改,请遵循GPL。如果应用程序以库的形式链接到eCos,则无需遵守GPL。简而言之,后面会提到ecos-examples-
另外,由于Marvell的datasheet是保密的,我不能随便发放,索取的正确途径应该是Marvell的芯片代理商。不过大家不要着急,没有datasheet也没有关系,我移植的代码会给出部分硬件的驱动,后面我也会写一篇文档,给出驱动部分的API接口的说明,读者可以完全不依赖datasheet。如果对硬件和驱动有特殊要求,可以给我email,在邮件中讨论。
3 br104h简介
br104h是H
4 为什么是br104h
很多很好的理由,让我慢慢道来。
ü 便宜!!!只要一百多块钱买台设备,再加上自己动动手,你就可以拥有一块5个网口的ARM9实验板。
ü 由于工作关系,有Marvell 88E6218的Datasheet,而该芯片就是br104h的CPU。有了datasheet才能移植eCos。
ü 单板上预留有串口和JTAG口(需要自己动手引出来,后文有详细介绍),完全就是为实验板准备的。TP-LINK 的TL-R402这些脚没有引出来,这也是我没有使用TP的路由器做实验板的主要原因。
ü 单板是二层板,硬件的连线可以看得很清楚,没有原理图也没有关系。
ü booter是armboot,os映像下载用网口,非常快捷方便。
ü
512Kbytes Flash,
5 用br104h做实验板能够干什么
ü 学习ARM体系结构
ü 学习eCos内核、驱动、应用开发
ü 学习uCos内核、驱动、应用开发(uCos由于版权的原因,我不能提供,请读者自己参考br104h的代码移植。uCos网上有很多详细的移植文章,移植还是很简单的)
ü 网络的应用和开发
eCos有协议栈(open BSD和free BSD)、IPSEC、PPP、SNMP、HTTP SERVER、FTP、SNTP、DNS、文件系统的源代码资源,尝试着做一个路由器吧,可以学太多的知识!
注:网口和Switch的驱动我还没有提供,后面会提供。(网口驱动已提供,请在blog上获取)
6 硬件环境搭建
下面这部分需要读者自己DIY,需要花一些时间和金钱,总共不会超过200人民币。如果读者的硬件水平不好,可以去淘宝网上购买,或者请懂硬件的朋友帮您做一下。
首先需要买一个 H
翻到后面,将四个小圆脚挖开,可以发现两个螺丝钉,旋开之。
然后可以开塑料盖,很难开,需要用点力气和技巧,请在下图的位置撬开之。
将电路板拿出来,请注意下图,留下了一个四针的排针,这个是预留的串口,从上到下是GND TX RX VCC。电路板上有丝印。
用排针焊上去,GND脚因为有一大块地,因此比较难焊,需要用功率大一些的电烙铁。
由于板子上没有驱动芯片将TTL电平转换成RS232的电平,因此需要买一个或者自己做一个,淘宝上有卖(http://auction1.taobao.com/auction/snap_detail.htm?item_id=9d4378cc6098f2334b63ecad8ffc3598&snap_id=ZTJCLVSYU5AJO&x_id=db1) ,也可以自己做一个,下面是我做的,供大家参考。电容都是0.1uF的,db9的插座是公的,其他的就是连连线了。
原理图
正面
反面
将单板和串口小板用四芯的线连起来(儿子过来捣蛋,正巧拍到了小手),大家可以注意一下,两块板的串口TX和RX连接恰好反一下,TX连RX,RX连TX。
由于笔记本上没有串口,还需要买一个USB转串口(如果PC有串口的话,则需要一根串口线,电子市场和淘宝有卖)
接下来,就是整个硬件环境的连接(还有网线,不要忘记了)
7 JTAG仿真器连接
br104h预留有jtag调试的焊点,连接市面上很普及的multi-ice兼容的仿真器。我没有焊出来,下面将一些硬件信息写下来,提供给需要仿真器的读者。
管脚 名称 丝印
44脚 TRST TP4
45脚 TMS_ARM TP5
46脚 TDI TP3
47脚 TCK TP7
49脚 TDO TP6
注意br104h的TRST是下拉的,有些仿真器无法连接,可以将R45拿掉试一下。
8 串口的设置
我们需要使用串口连接br104h,这里需要说明一下,台式机一般都有串口,而当前市场在销售的笔记本电脑一般都不带串口,因此需要购买一个usb转串口的设备,大约20-40人民币。
下面是Windows超级终端配置和使用方法进行全方位的图解,供大家参照使用,希望对各位有所帮助。
第一步:首先要进入超级终端软件,WINDOWS所有的操作系统中均有自带。如果系统上面找不到,则直接到控制面板的“添加删除硬件”中添加WINDOWS组件从而添加超级终端软件。

第二步:将终端设备(这里指的是目标板br104h)与计算机超级终端软件建立一个连接。

第三步:选择连接时所使用的通讯端口,目标板所连接的哪个通讯端口就连接哪个通讯端口。
第四步:对所选定的COM口进行设置,br104h的串口波特率为38400bps、8bit 数据位、无校验、1 bit停止位、无流控,如下图。

第五步:点确定后将出现一个对话框,将目标板上电,如果出现下面的提示,说明串口已连接和设置正确。
Windows XP的超级终端有个bug,翻页查看历史的串口信息会有乱码。我推荐使用免费的串口终端Tera Term。它的下载网页为:http://hp.vector.co.jp/authors/VA002416/teraterm.html。该软件的配置我就不再详细说明了。
9 软件开发环境的设置
从http://www.lupaworld.com/131820下载《eCos 开发环境搭建指南》,按照该文档,创建好Linux的开发环境。
10 eCos源代码下载和配置工具生成
重要:一定要使用eCos最近的代码,不要使用eCos 2.0的代码,那些代码已经有5年的历史了,有很多的bug。
从http://www.ecoscentric.com/devzone/snapshots.shtml eCos的CVS代码库的快照,下载到最新的eCos源代码。如果打算自己编译最新的eCos配置工具,请下载full版本的代码,大约40多M,里面含有配置工具的源代码,可用它编译eCos配置工具。
解压之:
[ning@fedora4 ~]$ tar jxvf ecos-trunk-full.tar.bz2
如果需要编译eCos配置工具,请按照下面的步骤操作。
创建一个build目录,编译的文件会放在这里,请不要在ecos的目录下直接配置。
[ning@fedora4 ~]$ mkdir build
配置之,如果需要添加自己的选项,请阅读ecos/README.host
[ning@fedora4 ~]$ cd build/
[ning@fedora4 build]$ ../ecos/configure
编译之
[ning@fedora4 build]$ make
安装之。注意:要用root才有权限
[ning@fedora4 build]$ su
Password:
[root@fedora4 build]# make install
按上面的步骤编译出来的命令行编译工具安装在/usr/local/bin/ecosconfig。图形化的配置工具的编译我还没有搞定,不过建议大家用命令行工具,可以学习cdl语言和内核代码。eCos讨论组的Grant Edwards这样建议“Don't depend on the GUI configurator. Learn the basics of CDL and how to use the command-line admin/config tools. That too will pay many benefits in the long run.”。
如果不打算自己编译,可以直接下载2.0 版本的eCos:ftp://ecos.sourceware.org/pub/ecos/releases/ecos-2.0/ecos-2.0.i386linux.tar.bz2,解压后,在ecos-2.0/tools/bin有命令行的配置文件ecosconfig和图形化的配置文件configtool。不过这个版本有些老了,2003年的。图形工具我试了一下是好用的,命令行没有试过。
11 ARM交叉编译工具
从下面的网址 http://arm.cirrus.com/files/tools/arm-elf-gcc-3.2.1-full.tar.bz2下载ARM的交叉编译工具。
以root登陆,将该文件放到根目录下
[root@fedora4
ning]# mv arm-elf-gcc-
[root@fedora4 ning]# cd /
解压之
[root@fedora4
/]# tar jxvf arm-elf-gcc-
这样ARM的交叉编译工具就放到了/usr/local/arm/
12 设置环境变量
接下来需要设置一下环境变量。
从root返回到ning用户,编辑home/ning下的.bash_profile,添加红色的环境变量。第一行红色为ARM交叉编译工具所在的路径,第二、三行红色为eCos库的路径。如果路径改变,不要忘记同时修改之,并使之生效。
[root@fedora4 bin]# exit
exit
[ning@fedora4 ~]$ cd ~
[ning@fedora4 ~]$ vi .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and
startup programs
PATH=$PATH:$HOME/bin
PATH=/usr/local/arm/
export PATH
ECOS_REPOSITORY=/home/ning/ecos/packages
export ECOS_REPOSITORY
unset USERNAME
~
~
执行之,使环境变量生效
[ning@fedora4 ~]$ source .bash_profile
测试一下,如果不是下面的打印,则表明环境变量有错误或者还没有生效。
[ning@fedora4 ~]$ arm-elf-gcc -v
Configured with:
../configure --target=arm-elf --prefix=/usr/local/arm/
Thread model: single
gcc version
[ning@fedora4 ~]$ cd work/lib
[ning@fedora4 lib]$ ecosconfig --config=pid.ecc new pid (无错误提示)
[ning@fedora4 lib]$
13 代码的安装和编译
从http://www.lupaworld.com/131820下载ecos-porting-br104h-
将ecos-porting-br104h-
[ning@fedora4
ecos]$ tar zxvf ecos-porting-br104h-
将br104h.db 添加到ecos.db文件的末尾
[ning@fedora4 ecos]$ cd packages/
[ning@fedora4 packages]$ cat br104h.db >> ecos.db
将ecos-examples-
[ning@fedora4
~]$ tar zxvf ecos-examples-
产生build tree和头文件,如果这个步骤有错误,请检查ECOS_REPOSITORY环境变量是否设置正确。
[ning@fedora4 ~]$ cd work/lib
[ning@fedora4 lib]$ ecosconfig --config=br104h.ecc tree
编译eCos内核库
[ning@fedora4 lib]$ make
到eCos的应用程序目录,修改Makefile,修改eCos内核的路径是否正确(下面红色标注的行)
[ning@fedora4 lib]$ cd ../examples/
[ning@fedora4 examples]$ vi Makefile
# Usage: make INSTALL_DIR=/path/to/ecos/install
INSTALL_DIR=/home/ning/work/lib/install
include
$(INSTALL_DIR)/include/pkgconf/ecos.mak
编译应用程序,并链接eCos内核,生成elf文件和bin文件。
[ning@fedora4 examples]$ make clean
[ning@fedora4 examples]$ make
14 下载映像到目标板并运行
接上串口,当出现“Hit b for boot setup”的时候,敲入按键b。
Hit b for boot setup
ARMboot Rev 1.3 for Huawei-3Com BR104H (Dec 5 2006 - 09:46:38)
_----_ ____
| ---- |___/ __)___
| | _____)
| | ______)
| \__ ______)
| \_\________)
| ---,
/___/\_._._._./
ARMboot LE version
ARMboot code:
HW_VER = 0x00000200
HW_BOT_VER = 0x00000301
HW_SER_CONTROL = 0x12345678
HW_NAME = BR104
LAN_MAC = 00:
WAN_MAC = 00:
ARMboot->
可以看到,br104h的booter采用的是armboot(也是一个开源的项目,以后我也会提供armboot的移植,请关注我的blog)。键入一个?号,可以看到所有的命令。
ARMboot-> ?
go - start application at address 'addr'
runflash - copy zdemo.bin to flash, unzip, run
cfg - config sdk read_only cfg data.
tftp- boot image via network using TFTP protocol
printenv- print environment variables
setenv - set environment variables
fburn - write a block to the FLASH memory
bdinfo - print Board Info structure
icache - enable or disable instruction cache
dcache - enable or disable data cache
reset - Perform RESET of the CPU
echo - echo args to console
version - print monitor version
help - print online help
? - alias for 'help'
ARMboot->
敲入printenv,可以看到网络的设置,可以看到br104h的ip地址为192.168.0.2,tftp 服务器的ip 地址为192.168.0.99
ARMboot-> printenv
bootdelay=3
baudrate=38400
ethaddr=08:00:3e:26:
ipaddr=192.168.0.2
serverip=192.168.0.99
netmask=255.255.255.000
bootfile=bootrom.bin
sdramImgAddr=0x00100000
flashAddr=0xFFF80000
bootSource=flash
Environment size: 201/4092 bytes
ARMboot->
然后设置网卡地址为192.168.0.99。将Linux主机的工作目录映射为Windows的一个网络驱动器。(我使用的是Z盘)。从http://tftpd32.jounin.net 下载tftpd32软件。设置需要下载的文件的路径和网卡接口(如果你有多块网卡,需要选择链接目标板的网卡)。
然后,键入tftp命令将hello.bin文件下载到内存0x8000处(如果出现无法下载,请检查网络连接,ip地址,tftpd的设置)
ARMboot->
ARMboot-> tftp 8000 hello.bin
Please wait, this takes a while ...
TFTP from server 192.168.0.99; our IP address is 192.168.0.2
Filename 'hello.bin'.
Load address: 0x8000
Loading: #######
Bytes
transferred = 33964 (
键入go命令,指针从0x8000处执行代码。
ARMboot-> go 8000
## Starting application at 0x00008000 ...
Hello, eCos world!
至此整个实验板大功告成。
15 移植代码的说明
因为所有的源代码都有,因此看代码是最好的学习eCos的方法。88E6218的串口、中断、定时器和pid单板(ARM公司的评估板,eCos有它的源代码)的很相似,因此我采用pid的代码作为模版进行移植。大家可以用beyond compare做代码对比,看看移植到底修改了哪些。看完后,大家可能会觉得移植还是蛮简单的。其实确实如此,我花了大约两天的就搞定了。
代码的详细说明打算在网口移植完后会写,请关注我的blog。
16 参考书目和网站连接
a) Antrony J. Massa 《嵌入式可配置实时操作系统eCos软件开发》北京航空航天大学出版社
这本书是eCos的经典之作,网上有free的英文版下载,英文名为《Embedded Software Development with eCos》。
b) 蒋句平 《嵌入式可配置实时操作系统eCos开发与应用》机械工业出版社
这本书绝大多数的内容翻译自《eCos User guide》和《eCos reference》,虽然自己的东西少了一些,但确实是一本不错的参考书。我一般先查看这本书,然后再去看英文的参考。
c) http://ecos.sourceware.org
eCos的主要资源和文档,主要是针对2.0的版本,基本不再更新了。
d) http://www.ecoscentric.com/devzone/snapshots.shtml
eCos的CVS代码库的快照,可以下载到最新的eCos源代码。
e) http://ecos.sourceware.org/intouch.html
eCos的邮件讨论组的订阅网址
f) http://www.lupaworld.com/131820
本人的blog,刚刚开。后面会推出一些eCos的资源,将市面上已有的产品改造成开发实验板,提供详细的文档和所有源代码,让eCos的学习者和开发者可以自行DIY一块eCos的实验板,为eCos的推广做一些贡献。推荐 收藏 导入论坛 等级(0) 编辑 管理 查看(532) 评论(6) 评分(0/0)
-
删除
ning
发布于2008-05-12 22:32:54
- sorry, 和Marvell签过保密协议的。你可以告知需求,我给你解释。
-
删除
苍海云帆
发布于2008-05-12 09:17:31
-
楼主,苦于没Marvell 88E6218的Datasheet,我的路由有点问题修不了,楼主能不能发一份给我?谢谢。
EMAIL:shdnzwy@163.com
QQ:260325338
-
删除
ning
发布于2008-04-29 19:25:32
- 可以把程序下到内存,在内存中跑,不要覆盖原来的flash即可。
-
删除
zhyyh
发布于2008-04-29 18:48:35
- 把自己的程序down进去后,原来的br104h里面的程序是不是就没有了?













