用br104h制作eCos实验板

2008-02-16 01:17:36 / 个人分类:eCos

br104h制作eCos实验板

1        前言

做这个的初衷主要想在国内推广eCos,为Open Source做一些力所能及的事,为在校的大学生们提供一个理论和实践结合的平台,毕业后不再是一颗大白菜。希望读者的批评和建议能够email告知我,在后续版本中改进。我的邮箱是 chou.o.ning@gmail.com,因为工作比较忙,不一定会回复,但一定会认真阅读。

这里要非常感谢我的夫人toybear,能够支持我做这些事情。还要感谢儿子臭蛋,让我的生活充满了快乐。

2        有关版权

本人移植到br104h的所有代码都为合法版权的代码,并遵守GPL版权。

如果读者使用本开发包,并对其修改,请遵循GPL。如果应用程序以库的形式链接到eCos,则无需遵守GPL。简而言之,后面会提到ecos-examples-1.0.0.src.gz文家解压后有两个目录 work/libeCos内核的编译路径)和work/exampleseCos应用程序),work/lib编译到的文件需要遵守GPL,而work/examples则不需要。

另外,由于Marvelldatasheet是保密的,我不能随便发放,索取的正确途径应该是Marvell的芯片代理商。不过大家不要着急,没有datasheet也没有关系,我移植的代码会给出部分硬件的驱动,后面我也会写一篇文档,给出驱动部分的API接口的说明,读者可以完全不依赖datasheet。如果对硬件和驱动有特殊要求,可以给我email,在邮件中讨论。

3        br104h简介

br104hH3C公司的一款家用路由器,在该公司的网站上有介绍:http://www.h3c.com.cn/Products%5F%5F%5FTechnology/Products/IP%5FNetwork/Router/Aolynk%5FBR/BR104H/。该路由器的CPU主芯片为Marvell 88E6218,一款集成MAC7SwitchARM9SoC芯片。http://www.mcuol.com/Solution/195/2177.htm有成都西南民族大学向强写的“基于88E6218SOHO网络开发平台设计”一篇文章,介绍了88E6218特性和规格,我这里就不再罗唆了。

4        为什么是br104h

很多很好的理由,让我慢慢道来。

ü         便宜!!!只要一百多块钱买台设备,再加上自己动动手,你就可以拥有一块5个网口的ARM9实验板。

ü         由于工作关系,有Marvell 88E6218Datasheet,而该芯片就是br104hCPU。有了datasheet才能移植eCos

ü         单板上预留有串口和JTAG口(需要自己动手引出来,后文有详细介绍),完全就是为实验板准备的。TP-LINK TL-R402这些脚没有引出来,这也是我没有使用TP的路由器做实验板的主要原因。

ü         单板是二层板,硬件的连线可以看得很清楚,没有原理图也没有关系。

ü         booterarmbootos映像下载用网口,非常快捷方便。

ü         512Kbytes Flash2M bytes SDRAM,对一般的实验板应用来说应该足够了。(Linux不够,后面会有Linux的实验板出来,打算找一款MIPSCPU的板子,不过还在计划中,有兴趣的读者可不时关注一下我的blog http://www.lupaworld.com/131820

5        br104h做实验板能够干什么

ü         学习ARM体系结构

ü         学习eCos内核、驱动、应用开发

ü         学习uCos内核、驱动、应用开发(uCos由于版权的原因,我不能提供,请读者自己参考br104h的代码移植。uCos网上有很多详细的移植文章,移植还是很简单的)

ü         网络的应用和开发

 

eCos有协议栈(open BSDfree BSD)、IPSECPPPSNMPHTTP SERVERFTPSNTPDNS、文件系统的源代码资源,尝试着做一个路由器吧,可以学太多的知识!

注:网口和Switch的驱动我还没有提供,后面会提供。(网口驱动已提供,请在blog上获取)

6        硬件环境搭建

下面这部分需要读者自己DIY,需要花一些时间和金钱,总共不会超过200人民币。如果读者的硬件水平不好,可以去淘宝网上购买,或者请懂硬件的朋友帮您做一下。

首先需要买一个 H3C 公司的Aolynk br104h路由器,需要花费115人民币。如果找不到可以到淘宝上去看看。下图是实物图。(注:图画是儿子画的游泳池,黄黄的那个是儿子的橡皮泥)

翻到后面,将四个小圆脚挖开,可以发现两个螺丝钉,旋开之。

 

然后可以开塑料盖,很难开,需要用点力气和技巧,请在下图的位置撬开之。

将电路板拿出来,请注意下图,留下了一个四针的排针,这个是预留的串口,从上到下是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的插座是公的,其他的就是连连线了。

原理图

 

正面

 

反面

 

将单板和串口小板用四芯的线连起来(儿子过来捣蛋,正巧拍到了小手),大家可以注意一下,两块板的串口TXRX连接恰好反一下,TXRXRXTX

由于笔记本上没有串口,还需要买一个USB转串口(如果PC有串口的话,则需要一根串口线,电子市场和淘宝有卖)

接下来,就是整个硬件环境的连接(还有网线,不要忘记了)

7        JTAG仿真器连接

br104h预留有jtag调试的焊点,连接市面上很普及的multi-ice兼容的仿真器。我没有焊出来,下面将一些硬件信息写下来,提供给需要仿真器的读者。

管脚    名称         丝印

44   TRST        TP4

45   TMS_ARM   TP5

46   TDI         TP3

47   TCK         TP7

49   TDO         TP6

 

注意br104hTRST是下拉的,有些仿真器无法连接,可以将R45拿掉试一下。

8        串口的设置

我们需要使用串口连接br104h,这里需要说明一下,台式机一般都有串口,而当前市场在销售的笔记本电脑一般都不带串口,因此需要购买一个usb转串口的设备,大约2040人民币。

下面是Windows超级终端配置和使用方法进行全方位的图解,供大家参照使用,希望对各位有所帮助。
  第一步:首先要进入超级终端软件WINDOWS所有的操作系统中均有自带。如果系统上面找不到,则直接到控制面板的添加删除硬件中添加WINDOWS组件从而添加超级终端软件。

             

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

                          


  第三步:选择连接时所使用的通讯端口,目标板所连接的哪个通讯端口就连接哪个通讯端口。



第四步:对所选定的COM口进行设置,br104h的串口波特率为38400bps8bit 数据位、无校验、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 eCosCVS代码库的快照,下载到最新的eCos源代码。如果打算自己编译最新的eCos配置工具,请下载full版本的代码,大约40M,里面含有配置工具的源代码,可用它编译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 版本的eCosftp://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-3.2.1-full.tar.bz2 /

[root@fedora4 ning]# cd /

解压之

[root@fedora4 /]# tar jxvf arm-elf-gcc-3.2.1-full.tar.bz2

这样ARM的交叉编译工具就放到了/usr/local/arm/3.2.1-elf/bin目录下。

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/3.2.1-elf/bin:$PATH

export PATH

 

ECOS_REPOSITORY=/home/ning/ecos/packages

export ECOS_REPOSITORY

 

unset USERNAME

~

~

 

执行之,使环境变量生效

[ning@fedora4 ~]$ source .bash_profile

 

测试一下,如果不是下面的打印,则表明环境变量有错误或者还没有生效。

[ning@fedora4 ~]$ arm-elf-gcc -v

Reading specs from /usr/local/arm/3.2.1-elf/lib/gcc-lib/arm-elf/3.2.1/specs

Configured with: ../configure --target=arm-elf --prefix=/usr/local/arm/3.2.1-elf --with-gnu-as --with-gnu-ld --with-newlib --disable-debug --with-gxx-include-dir=/usr/local/arm/3.2.1-elf/arm-elf/include --enable-languages=c,c++

Thread model: single

gcc version 3.2.1

[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-1.0.0.src.gzecos-examples-1.0.0.src.gz 两个文件,前一个是br104hbsp包,后一个是应用程序和br104ecc文件。代码还没有网口和Switch的驱动,以后我会把它补充完整,有兴趣的朋友请关注我的blog

 

ecos-porting-br104h-1.0.0.src.gz 拷贝到ecos目录,并解压之

[ning@fedora4 ecos]$ tar zxvf ecos-porting-br104h-1.0.0.src.gz

 

br104h.db 添加到ecos.db文件的末尾

[ning@fedora4 ecos]$ cd packages/

[ning@fedora4 packages]$ cat br104h.db >> ecos.db

 

ecos-examples-1.0.0.src.gz 拷贝到/home/ning目录,并解压之

[ning@fedora4 ~]$ tar zxvf ecos-examples-1.0.0.src.gz

 

产生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: 001c0000 -> 001d1760

HW_VER = 0x00000200

HW_BOT_VER = 0x00000301

HW_SER_CONTROL = 0x12345678

HW_NAME = BR104

LAN_MAC = 00:0F:E2:4D:9A:07

WAN_MAC = 00:0F:E2:4D:9A:08

ARMboot->

 

可以看到,br104hbooter采用的是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,可以看到网络的设置,可以看到br104hip地址为192.168.0.2tftp 服务器ip 地址为192.168.0.99

 

ARMboot-> printenv

bootdelay=3

baudrate=38400

ethaddr=08:00:3e:26:0a:5b

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 (84ac hex)

 

键入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

eCosCVS代码库的快照,可以下载到最新的eCos源代码。

e)      http://ecos.sourceware.org/intouch.html

eCos的邮件讨论组的订阅网址

f)       http://www.lupaworld.com/131820

本人的blog,刚刚开。后面会推出一些eCos的资源,将市面上已有的产品改造成开发实验板,提供详细的文档和所有源代码,让eCos的学习者和开发者可以自行DIY一块eCos的实验板,为eCos的推广做一些贡献。

TAG: eCos br104h

删除 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里面的程序是不是就没有了?
翔云阁-桃李满天下是我的人生目标 删除 xautofzx 发布于2008-02-20 11:52:25
我正好有BR104,有空也学着折腾一下。
我来说两句

-5 -3 -1 - +1 +3 +5

Open Toolbar