如何构建eCos嵌入式系统

上一篇 / 下一篇  2006-08-22 16:47:18 / 天气: 晴朗 / 心情: 高兴 / 个人分类:Backup

引言
:Po&]:S!`0EDA中国门户网站@Y8\Kx9X }T+X
  目前,嵌入式操作系统的种类较多,其中比较流行的有VxWorks、Windows CE、Psos、Palm OS、嵌入式Linux等。这些嵌入式操作系统在开放性、实用性以及性能等方面各有千秋,但大多数为商用产品。除了商用产品外,还有一些免费的嵌入式操作系统,uClinux是其中比较流行的,而eCos则是另一个选择。嵌入式可配置操作系统eCos(Embedded Configureable Operating System)的特点是可配置性、可裁减性、可移植性和实时性。它的一个主要技术特色就是功能强大的配置系统,可以在源码级实现对系统的配置和裁减。与Linux的配置和裁减相比,eCos的配置方法更清晰、更方便;且系统层次也比Linux清晰明了,移植和增加驱动模块更加容易。正是由于这些特性,eCos引起了越来越多的关注,同时也吸引越来越多的厂家使用eCos开发其新一代嵌入式产品。EDA中国门户网站)n7~f~'^A
EDA中国门户网站 D@Q[D `j
  eCos现在由Red Hat维护,可支持的处理器包括:ARM、StrongARM、XScale、SuperH、Intel X86、PowerPC、MIPS、AM3X、Motorola 68/Coldfire、SPARC、Hitachi H8/300H和NEC V850等。源代码及开发工具可在Red Hat的网站上免费下载,网页地址是http:/sources.redhat.com/ecos。
o`'PMN_W_U.E a0EDA中国门户网站 H~v;{IN-k
1 eCos的层次结构EDA中国门户网站R$t_g.Q)Wzg#s

"r+G'WD*UU0  eCos采用模块化设计,由不同的功能组件构成,eCos系统的层次结构如图1所示。EDA中国门户网站;?i/W+Q;~2}U Z

-Q'n;]v0J!nh0  这种层次结构的最底层是硬件抽象层(Hardware Abstraction Layer),简称为HAL,它负责对目标系统硬件平台进行操作和控制,包括对中断和例外的处理,为上层软件提供硬件操作接口。只需提供新硬件的抽象层,就可以将整个eCos系统包括基于eCos的应用移植到新的硬件平台上。
.NZvc@{b0
deX!^eRuE"Ag02 构建eCos系统 
nJ/}B0ciRN0
Z9Dm C,v[Q0  构建eCos系统首先要搭建自己的硬件抽象层,然后创建驱动程序,之后就可以编制应用程序了。
/xdBo F:ZC_"j dRO0EDA中国门户网站:e{3@ T$`+ffK
3 硬件抽象层的移植EDA中国门户网站#`v*g]#@x
EDA中国门户网站1yI.\e:wL5^^*r
  硬件抽象层分为三个不同的子模块:体系结构抽象层(Architecture HAL)、变体抽象层(Variant HAL)和平台抽象层(Platform HAL)。
9u#R\&cs0EDA中国门户网站Mah$X1H
  体系结构抽象层。eCos所支持的不同处理器系列具有不同的体系结构,如ARM系列、PowerPC系列、MIPS系列等。体系结构抽象层对CPU的基本结构进行抽象和定义,此外它还包括中断的交付处理、上下文切换、CPU启动以及该类处理器结构的指令系统等。
O3a ?3LB9d'gB _,f0
:i*}*[%X\$kY.k0  变体抽象层指的是处理器在该处理器系列中所具有的特殊性,这些特殊性包括Cache、MMU、FPU等。eCos的变体抽象层就是对这些特殊性进行抽象和封装。EDA中国门户网站i Jz#u}7WB3Y0a9XV

l2I.w ~UL4j0  EDA中国门户网站-Rd'ny+}Hd4|&h

8YbML5zV-N.G)f0lq0                    图1EDA中国门户网站5e`9l2zsX/?]%Lx2G8o

Y `(GX'i ~@0  平台抽象层是对当前系统的硬件平台进行抽象,包括平台的启动、芯片选择和配置、定时设备、I/O寄存器访问以及中断寄存器等。EDA中国门户网站7\W0Im ir!|

;v8[b2bu0  硬件抽象层的这三个子模块之间没有明显的界线。对于不同的目标平台,这种区分具有一定的模糊性。例如,MMU和Cache可能在某个平台上属于体系结构抽象层,而在另一个平台上则可能属于变体抽象层的范围;再比如,内存和中断控制器可能是一种片内设备而属于变体抽象层,也可能是片外设备而属于平台抽象层。EDA中国门户网站8F0LXMpYk `&TK
EDA中国门户网站%t7b hFaU
  eCos的移植通过这三个子模块来完成,即平台抽象层的移植、变体抽象层的移植和体系结构抽象层的移植。对一个新的体系结构来说,其系统结构抽象层的建立相对来说比较困难。eCos支持大部分当前广泛使用的嵌入式CPU,已具有了支持各种体系结构的硬件抽象层。因此,eCos的移植很少需要进行体系结构抽象层的编写。EDA中国门户网站+o wSlC0a
EDA中国门户网站HSW4Z.{'_0s#b w&]
4 平台抽象层的移植EDA中国门户网站&`cS6vE+m;`2V$[)y

F\j(B;K|UN{Z0
  一般来说,进行eCos开发时,移植的主要工作在于平台抽象层,这是由于eCos已实现了绝大多数流行嵌入式CPU的体系结构抽象层和变体抽象层。平台抽象层主要完成的工作包括:内存的布局、平台早期初始化、中断控制器以及简单串口驱动程序等。EDA中国门户网站,w$l5]-mUdW0C

+M,O1S#\_5P^(f a0  构建一个新的平台系统,最简单的方法是利用eCos源码提供的具有相同体系结构和CPU型号的参考平台硬件抽象层,将其作为模板,复制并修改所有与新平台相关的文件。若eCos没有这样的平台,则可用另一种体系结构或CPU型号的类似硬件抽象层作为模板。比如,eCos提供了以三星公司ARM CPU S3C4510b为核心的平台SNDS4110,当需要移植eCos到ARM CPU S3C44B0上时,这将是一个很好的起点。EDA中国门户网站(p6t]-s-Xe
EDA中国门户网站b4Bk.VQ-C+G_
   移植工作最好是从RedBoot开始,实现的第一个目标是使RedBoot运行在新平台上。RedBoot是eCos自带的启动代码,它比eCos要简单,没有使用中断和线程机制,但包含了大部分最基本的功能。
4Y-B7P?5z)|t0
`2qJ`e/R8x0   建立目标平台的RedBoot通常按以下步骤进行(以构建S3C44b0的新平台为例)。EDA中国门户网站!`F%v8N*kLdW}6~^
  EDA中国门户网站!L"c%Ss Ln
   ① 复制eCos源码中选定的参考平台,根据需要对目录及文件更名。更名的主要内容有:新平台的目录名、组件定义文件(CDL)、内存布局文件(MLT)、平台初始化的源文件和头文件EDA中国门户网站/g _+S ~s2D+eU!L

"dJQ8PV3TM5s6HE0   ② 调整组件定义文件(CDL)选项。包括选项的名字、实时时钟/计数器、CYGHWR_MEMORY_LAYOUT 变量、串口参数以及其他的一些选项。
H o8}[#S'H9^ b@c0
%O!y;Lywu#Wq0   ③ 在顶层ecos.db文件中加入所需要的包,并增加对目标平台的描述。在最初,该目标平台的入口可以只包含硬件抽象层包,其他硬件支持包以后再加入。经过修改后,就可在eCos配置程序中选择新的平台进行配置。EDA中国门户网站 C qm~%h~ S

/Dsv1K3q"s7z*d0   ④ 修改include/pkgconf中的内存布局(MLT)文件。按照新的硬件平台内存布局修改MLT文件。MLT文件对应每种启动类型有三个不同后缀的文件:.h文件以及.ldi文件和mlt文件。手工修改时只需修改.h文件和.ldi文件,并保证两个文件同步修改。修改的主要内容有ROM的起始地址、ROM的大小、RAM的起始地址和RAM的大小。
ScGNQv0EDA中国门户网站 w_gP6{3uPq#k
   ⑤ 修改平台的io宏定义。在include/plt_io.h文件中完成对平台的各种IO宏定义,包括各种CPU的系统配置寄存器、内存配置寄存器、串口配置寄存器、LCD配置寄存器、以太网配置寄存器等的I/O地址。EDA中国门户网站jz.{7en

:W#\#UQX\ Sx0   ⑥ 修改平台的Cache代码。在include/hal_cache.h文件中修改有关Cache的宏定义。在开发初期,最好先将Cache关闭,等移植稳定后再打开。
9j?"|d|9JIC0EDA中国门户网站gGu,u9^c!r*r8j
   ⑦ 实现简单的串口驱动程序。串口的初始化、接收和发送在src/hal_diag.c文件完成。主要的函数如下:
b7S Sr-u4{0  cyg_hal_plf_serial_init_channel(),完成对某个串口的具体初始化工作;EDA中国门户网站B/|;b2v)qP[S
  cyg_hal_plf_serial_putc(),从串口发送一个字符;EDA中国门户网站(WkoW-Ib,X}%`&Ez
  cyg_hal_plf_serial_getc(),从串口接收一个字符;EDA中国门户网站y7d.t#|X`
  cyg_hal_plf_serial_getc_nonblock(),以无阻塞的方式接收一个字符,即缓冲区中无数据时立即返回;EDA中国门户网站Q ~&BP3Fgv#HQ
  cyg_hal_plf_serial_isr(),串口中断服务程序;EDA中国门户网站9@v^ xk:U_I
  cyg_hal_plf_serial_init(),调用cyg_hal_plf_serial_init_channel()函数初始化各串口,并向内核注册串口中断服务程序、串口的读写例程和配置例程。EDA中国门户网站a![)Exh
EDA中国门户网站u5Qex3f$B/{
   ⑧ 修改或增加平台初始化程序。平台初始化在3个文件文件中完成:src/s3c44b0_misc.c、include/hal_platform_setup.h和include/hal_platform_ints.h。
/LA2L&t8q1T-E0  hal_platform_ints.h完成系统的中断宏定义。在不同的平台中设备数量和类型不同,中断的译码方式也不一致,需要根据具体情况作出调整。
D| c}S6M w$N0  hal_platform_setup.h主要完成系统硬件的初步配置,这里一般要在看门狗和中断关闭后,配置系统时钟频率、ROM和RAM的初始化参数。EDA中国门户网站(Y'A2woo)Y,nky5h%c?
  s3c44b0_misc.c文件完成目标板的进一步初始化、中断处理、延时例程和操作系统时钟设置。
jo7|9j,d|P'b8T{0  经过以上修改,底层的平台抽象层就基本完成了,这时可用eCos的配置工具生成RedBoot进行测试。EDA中国门户网站o`%f&D#] vV#S
  RedBoot测试成功后,说明平台已经能正确完成初始化操作,且串口驱动也能正常工作,接着要完成中断和Cache等测试工作。可利用一些多线程的小程序测试,检测时钟配置是否正确,同时也检测了中断能否正常工作。
\8j)T}m V+YR/Y0EDA中国门户网站z;~UN j
5 驱动程序设计
]s;Lovw0
S ss5kF5K'M7J0
  平台抽象层完成后,接着要完成系统的设备驱动程序。eCos设备驱动程序的中断模块分为三个层次:中断服务程序ISR、中断滞后服务程序DSR和中断线程。ISR在响应中断时立即调用,DSR由ISR发出调用请求后调用,而中断线程为驱动程序的客户程序。EDA中国门户网站6n7K%`Hb9W^
EDA中国门户网站5rdQ6NC!L
  硬件中断在最短的时间内交付给ISR处理。硬件抽象层对硬件中断源进行译码并调用对应的中断ISR。ISR可以对硬件进行简单的操作,应使ISR的处理时间尽量短。当ISR返回时,它可将自己的中断滞后服务程序DSR放入操作系统的任务调度中,DSR可以在不妨碍调度器正常工作时安全运行。大多数情况下,DSR将在ISR执行完成后立即运行。
Tj3\EqC0
u*E+S e1ZTLzCp+Pal0  eCos设备驱动程序一般可分为三个部分,如图2所示。
!h$Rs ?1UM"D0EDA中国门户网站.FN5U&z` [ D}"q
          http://www.pld.com.cn/blog/EDA中国门户网站zN [!^^,F1B&k

,K_2}W^/Y$@-^0                      图2
q9}6l u ~,T7n&i a0
s4}Gj C~/P0  eCos的所用设备驱动程序都使用设备表入口来描述。使用宏DEVTAB_ENTRY()可生成设备表入口。其格式为:
Fi"f$Mc#S0
v7tn._ xL0  DEVTAB_ENTRY(l, name, dep_name, handlers, init, lookup, priv)。
I~6P(I!v-b s%t0EDA中国门户网站CP&e Ro'| {Z*W]
  l:设备表入口的“C”标识符。EDA中国门户网站VK3E+X_
  name:该设备的“C”字符串名字,在搜索设备时用到。
t"?F rk;H0  dep_name:对于一个层次设备,此参数是该设备下层设备的“C”字符串名字。EDA中国门户网站%HY` j ~'{
  handlers:I/O函数句柄指针,由宏DEVIO_TABLE实现的。EDA中国门户网站E _J!rP D*](N~
  init:当eCos处于初始化阶段时被调用的函数,该函数可以进行查找设备,对硬件进行设置等操作。
~Lm%H4h j:n0  lookup:当调用cyg_io_lookup()函数对该设备进行操作时调用的函数。
"myP!r'gGG?e0  priv:该设备驱动程序所需的专用数据。
0u!G5q0Y:mS K0  设备入口中的句柄handlers包含了一组设备驱动程序接口函数,是设备函数表DEVIO_TAB的指针,DEVIO_TAB包含了一组函数的指针。设备I/O函数表通过DEVIO_TAB宏来定义,格式如下:
Cn|'B#s;t7X2~0h0  DEVIO_TABLE(l, write, read, get_config, set_config)。
;{&Ng/Z'\*oW[0  l:改表的“C”标识符,即在DEVTAB_ENTRY中的handlers。
2~#S+T/k3W9sp+U0  write:实现向设备传送数据。
/j"r5f*T0K0  read:实现从设备读取数据。
.IW D+@Y'iv+L0  get_config:实现读取设备配置信息。
L!DoUAb@9rT0  set_config:实现对设备的配置操作。
(@7[P8Z/M'l8\0  在eCos的初始化引导过程中,对系统中的所有设备调用其相应的init()函数(即DEVTAB_ENTRY宏注册的初始化函数),所有对设备的I/O操作通过handlers完成。
7H R J+]$sU4{d)\ Gp8l0  设备驱动程序包含如下内容(xxx:表示某种设备)。EDA中国门户网站2}(F*vG Q)? w
EDA中国门户网站.d0of8VVzGIA5W
  ◆ 用宏定义DEVIO_TABLE设备I/O函数表。EDA中国门户网站hA~ d,Q+b(K1f7f
DEVIO_TABLE(xxx_handlers, // I/O函数句柄指针
vBht&z0      xxx_write, // 写函数
g)A eDnXVy6L0      xxx_read, // 读函数
.oc-|!KD)zz0      xxx_get_config, // 读配置EDA中国门户网站m? SjP K.jS e$l
      xxx_set_config)// 设置配置EDA中国门户网站+}CS2J&z+Rw.r)i0z(\
  ◆ 用宏定义DEVTAB_ENTRY注册设备入口。
7H |$S;s3L1^ qT0DEVTAB_ENTRY(xxx_device, // 设备入口名EDA中国门户网站 S j&c?/P| x+p blN
      “/dev/xxx”, // 设备名,查找设备时用到EDA中国门户网站}`-_[\:^UV
      NULL,// 需用到的底层驱动,这里为空
3`.M g%o$|Ky)W/f-y0      xxx_handles, // I/O函数句柄指针
%w0gF k(O0ku0      xxx_init, // 设备初始化函数EDA中国门户网站0qUE7UL
      xxx_lookup, // 设备搜索
i*G!I6d'~`3BH/E0      xxx_priv)// 设备专用数据指针
5cJ6Vy*bn(J9Rw0  ◆ 完成初始化函数xxx_init。完成对硬件的初始化,调用函数cyg_drv_interrupt_create建立中断对象,然后调用函数cyg_drv_interrupt_attach完成中断与硬件向量的连接。EDA中国门户网站Y n7i(E.XZ;z
  ◆ 完成中断服务程序。EDA中国门户网站-}K-G8z c&Y
  ◆ 完成中断滞后服务程序。
]1Kwq HzCm0  ◆ 若有中断线程,则完成中断线程。
-p%N]k%b{jL7T0  ◆ 完成设备搜索函数xxx_lookup。EDA中国门户网站0ECZ0g"j gR
  ◆ 完成写函数xxx_write。EDA中国门户网站3x cFV#y$W(vD{
  ◆ 完成读函数xxx_read。EDA中国门户网站B.C ][ B*y1t,? }e
  ◆ 完成读配置函数x xx_get_config。EDA中国门户网站q}Z u t8q/yF
  ◆ 完成设置配置函数xxx_set_config。EDA中国门户网站!tqoc`7y"x
EDA中国门户网站M%y0ss{(Jp
结论
EDA中国门户网站$[G;jqut6}

5B F9~$obI0  经过硬件平台的移植和驱动程序的编写,就可在此基础上开发各种应用程序了。EDA中国门户网站XXf(`#`

~4r.o#KX3f["N2?0  eCos具有非常优秀的可移植性;使用多任务抢占机制,具有最小的中断延迟;支持嵌入式系统所需的所有同步原语,提供包括设备驱动程序、内存管理、例外处理、标准C和数学库;提供各种开发嵌入式应用所需的工具,是开发嵌入式系统的强有力工具。
qMa(xY!}&` e0
-O1M!P1[!S%DS i0                  参考文献EDA中国门户网站TAn a}

J(ee8n`] @%Q01 eCos Users Guide. Red Hat Inc. & eCosCentric Ltd, 2003EDA中国门户网站6ih;Bo5Q H1Q
2 eCos Tutorial. Red Hat Inc, 2002
`R3Sf oW0w:l03 eCos Reference Manual. Red Hat Inc & eCosCentric Ltd, 2003
R1a6L-Um7Ovxk&Q04 Bart Veer, John Dallaway. The eCos Component Writers Guide. Red Hat Inc, 2003
Z'dL2u3p$hj?1C05 Antony J. Massa, Embedded Software Development with eCos. Prentice Hall PTR, 2002


TAG: EDA

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-08-30  
     12
3456789
10111213141516
17181920212223
24252627282930
31      

数据统计

  • 访问量: 8564
  • 日志数: 96
  • 建立时间: 2006-08-07
  • 更新时间: 2007-06-30

RSS订阅

Open Toolbar