STLite/OS20嵌入式系统中动态加载数据广播业务

来源:百度文库 编辑:神马文学网 时间:2024/04/28 04:18:46
STLite/OS20嵌入式系统中动态加载数据广播业务
尹西林 刘卫忠 龚家华

 

           (华中科技大学,湖北 武汉 430074)

 

摘要:  本文主要叙述了在STLite/OS20嵌入式系统中动态加载数据广播业务的具体实现过程。

关键词: 动态加载 RCU  机顶盒

 

1 引言

  随着数字电视走向广大电视观众的步伐越来越快,数字电视所能提供的丰富多彩的信息越发成为观众和运营商共同关注的话题。电视观众不仅希望看到精彩的各种电视节目,还希望通过数字电视接收丰富的其他信息以满足工作、学习、娱乐的需要,让人们充分体验信息时代的魅力。因此,我们开发出更具有吸引力的数据广播服务作为数字电视音视频服务的补充,极大的丰富了数字电视服务。

然而在数据广播业务不断增长日益丰富的情况下,带来了新的问题:存储资源本来就很有限的终端STB机顶盒设备为了支持这些服务,不得不增加存储器件集成更多的程序代码,成本也随之上升。大部分厂商只能选择性地集成部分业务的程序代码,但这对于推广数字广播业务是不利的:功能的不全或不丰富也会降低产品的市场竞争力。

但是从用户的角度来看,在同一时刻只会选择一种数据广播服务,因此我们采用分时复用存储资源的思想,在用户选择时才将需要的程序代码载入到存储器中并运行,使用完毕后就释放以接收下一个需要运行的程序代码的方案。该方案的前提是终端程序能够动态加载运行程序。

 

2 ST系统对RCU的支持

终端机顶盒的软件都是基于嵌入式系统实现的,目前比较流行使用的是uclinux、Vxworks、PSOS、STLite/OS20嵌入式系统。在ST系统中,可以动态加载的代码单元称为RCU(可重定位代码单元),相当于一个动态库,它导出一系列接口函数供其它模块调用。ST系统的编译器st20cc可以将C、C++和汇编语言的源代码编译和链接为一个RCU文件。st20cc在RCU文件的起始处生成了一个RCU头部,它描述了RCU文件中接下来的部分的结构。一个RCU文件的结构如图1所示:


图1 RCU文件的结构

 

3 RCU在机顶盒系统中的使用

3.1 RCU的下载

为了可以使用RCU,我们首先必须将生成的RCU存储在机顶盒中的相关媒介中,如硬盘、光盘、移动存储设备等。将RCU文件从PC机下载到机顶盒相关媒介上的可能方案也有很多,例如通过CABLE线、串口、USB接口等。在ST机顶盒系统中,目前我们主要研究的是通过CABLE线在硬盘上实现RCU的下载和加载。

从CABLE线下载时,我们需要前端系统的支持。前端的数据播发服务器将RCU文件按照私有数据分段的数据格式打成分段,最后打成TS分组在指定的PID上发送。在机顶盒中,首先初始化硬件(如硬盘ATA接口),接着开一个数据通道,并设置相应的PID和过滤参数,然后开始接收RCU分段,并通过ST系统的文件系统接口将收到的数据存储到硬盘上的文件中。

3.2 RCU的加载运行

为了从硬盘加载RCU文件,需要文件系统的支持。在ST系统中,实现了比较完善的文件系统,它提供了对硬盘和硬盘上的文件进行操作的一系列函数。在能进行硬盘操作前,首先要创建硬盘分区并格式化。为了操作硬盘上的某一个分区中的某一个文件,首先要打开一个分区,如下所示:


           图2:硬盘分区操作流程图

接下来就可以加载RCU文件。首先,通过文件系统将整个RCU文件读到内存中;然后,根据读取出的RCU头部的相关信息,为RCU的数据段和BSS段分配内存,并将RCU文件中的数据段和BSS分段的内容拷贝到分配的内存中;同时,通过读进内存的RCU文件中得到指向其它分段(如重定位表等)指针。

当一个RCU被加载到内存后,在代码可以运行前,我们必需构造一个静态区域。该区域包含RCU的所有全局和静态数据,由两个分段组成:数据分段(含有初始化过的数据)和BSS分段(含有未初始化或初始化为0的数据)。为了让链接器放置数据的效率更高,数据分段和BSS分段可以有图3中所示的两种顺序,但是它们必需是连续的。

用户负责分配该静态区域(使用RCU头部中指明的大小),并用RCU文件中的数据分段初始化静态区域的数据分段。另外,BSS分段也需要被初始化为0,虽然该工作通常由RCU库完成。还应该注意一点就是静态区域必需对齐到32位的边界。


图3 静态区域的布局

3.3 RCU的卸载

当用户使用新的数据业务时,即加载其它RCU单元时,我们必须注意要完全卸载当前的RCU,避免主程序调用已经卸载的RCU中的函数,例如,如果我们在RCU中用task_onexit_set(onexit_handler)注册了一个函数(它在每一个任务退出时都会被调用),在我们卸载该RCU前,必须用task_onexit_set(NULL)清除设置的任务退出函数,否则就会导致调用已经卸载的RCU中的函数,造成程序崩溃。

 

4 总结

由于STLite/OS20操作系统提供了完善的、操作简单的动态加载机制,因此,在该系统中实现应用的动态加载还是比较容易的。但在具体实现某个具有动态加载功能的模块时,我们必须要注意ST系统对RCU的一些限制条件。

随着在机顶盒中动态加载数据业务的实现,能够使有限资源的机顶盒实现无限的服务功能,同时也把整个数据广播增值业务提高到一个新的开发阶段。

                                       

参考文献:

[1] 钟玉琢、王琪等。MEPG-2运动图像压缩编码国际标准及MEPG的新进展 [M],清华大学出版社,2002.

[2] 段凯、刘卫忠 基于DVB标准的动态加载数据广播业务的方案实现[S] 中国有线电视2004年第13期.76-78.

[3] ST20 Embedded Toolset R1.9 User Manual  ST November 2001

[4] ST20 Embedded Toolset R1.9 Reference Manual  ST November 2001