基于数字电视系统的嵌入式linux操作系统实现

时间:2007-11-14
1. 简介:
    数字电视是在电视信号产生后的处理、传送、接收、记录等过程都采用数字技术的电视。在设计数字电视系统时,应用于传统模拟电视系统中的硬件,不能满足音频、视频和数据处理等功能的需要,因此,数字电视系统需要更高性能的处理器和大规模的存储器。嵌入式操作系统可以有效的管理这些硬件资源。
    本文将嵌入式linux操作系统移植到一个数字电视上,使其能够接收数字广播节目。为了将操作系统移植到数字电视系统上,需要修改内核和交叉开发环境,重新设计基本的设备驱动,配置系统的存储器映像以便加载内核到主存储器中,并且设计一个总线接口设备的驱动程序来控制整个系统。
2. 数字电视操作系统
    数字电视比模拟电视能够提供更优质的电视图像和更多的视频服务。它采用改进的扫描线和水平清晰度获得高质量的视频效果,同时采用AC3或MPEG2压缩技术来获得高质量的音频效果。数字电视的节目不但便于存储,而且还可以通过众多的媒介进行传播。因此,数字电视系统需要处理大量的数据。如在EPG(电子节目指南)服务中,被提取出来的数据被修改并存储后作为一个画面打印至OSD(屏幕菜单式调节)界面,在这个过程中需要靠操作系统来不断地接收到被筛选、存储后的信号,同时产生屏幕画面。
    市场上的数字电视系统包括如pSOSTM (Windriver Inc.)等的商业操作系统,这些系统具有高可靠性和化的特点,但要支付昂贵的版税。如果在数字电视系统中使用嵌入式linux操作系统,则不用支付版税费用。嵌入式linux操作系统还有其他一些优点,如有开放源代码的设备驱动程序及应用程序的存在,大大缩短了开发时间;利用shell、文件系统及模块功能方便了开发环境的配置;许多问题可以在开源社区得到快速解决等。
3. 商业数字电视系统
 
    数字电视的结构
    数字电视系统包括数字处理模块、视频处理模块、射频模块、LCD驱动模块和模拟输出模块,其结构如图1所示。

    数字处理模块负责控制其它模块和执行程序。它由MCU、SDRAM、FLASH存储器、UART、I2C总线接口构成。视频处理模块把从射频模块捕获的数据解码生成视频、音频和文本消息。它由一个信号处理单元(SPU)和一个SDRAM构成,SDRAM中包含被显示的数据帧。射频模块接收数字广播信号,并且将该信号解调成数据流。LCD驱动模块控制LCD面板。模拟输出模块控制视频-音频信号输出和输出信号。数字处理模块通过I2C总线,控制射频模块、LCD模块和模拟输出模块,同时通过DMA控制视频处理模块。
 
    硬件构成
    在数字电视系统中,数字处理模块的是ARM7TDMITM,它不包括MMU(存储器管理单元)。在数字电视系统中MCU只支持大端格式[5],存储器映射由MCU内的系统管理寄存器来配置,在系统运行之前,嵌入式linux内核运行在flashROM中,当系统运行时,内核被拷入ram中。除了ROM和RAM外,外设也经常被使用。这些设备被映射到一个线性存储器映射单元,且可以按同样的方式寻址。。MCU的中断控制器包括21个中断资源(其中17个来自内部设备,4个来自外部设备)。数字处理模块中的定时器是一个32位的间隔模式定时器。在系统中用串口设备如UART(通用异步收发器)来打印启动过程中的消息和程序出错信息,由于射频模块、LCD驱动模块、模拟输出模块都是由MCU通过I2C总线控制,因此,在MCU和I2C串行总线之间需要一个接口。在这里使用PCF8584 (Philips Inc.)。图2描述了MCU和I2C总线之间的连接。


图2  MCU和I2C总线之间的连接

4.linux系统移植 
    在这一部分中,我们将解释linux操作系统的移植顺序。包括修改内核初始化代码和编写设备驱动程序。
    4.1重建内核初始化代码
    为了将linux内核加载到嵌入式系统中,有必要修改与硬件相关的内核初始化代码。这个过程包括设置存储器映射以便加载内核映像,以及为支持内核的运行而修改设备驱动程序。
    4.1.1设置存储器映射
    Linux内核映像是一种压缩文件,存放在flash存储器中,执行时被拷贝到SDRAM中并解压。图3描述了内存映像的加载顺序。


    系统复位时,CPU只能接受flash ROM空间的代码,同时执行位于flash ROM底层的bootloader,它负责从主机端代码并且将代码存储到flashROM中。
    1)bootloader将主机的linux内核拷贝到数字处理模块上的SDRAM中。
    2)SDRAM中被的linux内核映像被存储在flash ROM中位于bootloader顶层的空间中。
    3)系统初始化,同时,bootloader调用linux映像内的一段执行代码(head.o),将全部flash ROM空间中的内容拷贝到SDRAM中。
    4)CPU利用系统管理寄存器,将flash ROM中的初始地址空间与SDRAM的初始地址空间相交换。
当flash ROM中的映像被加载到SDRAM之后,无需改变程序计数器就可以执行代码(head.o)。图4中显示了终的存储器映射。

    拷贝到SDRAM中的linux映像可解压执行,为了完成释放功能,需要一些存储器空间,例如符号开始段、用户堆栈、分配的内存等。在这些空间中,一个压缩的linux内核映像被解压工具释放出来,被释放的代码位于被分配的内存空间的下一地址。
    4.1.2 内核需要的设备
    内核需要的基本设备包括中断控制器、定时器和控制台设备。这些设备被映像到MCU的内部寄存器中,通过修改内部寄存器而提供必要的功能。
    4.2设备驱动的设计
    数字电视系统包括视频处理设备和模拟输出设备以及内核所必须的设备,本文为I2C总线接口(PCF8584)设计一个设备驱动。PCF8584设备驱动包括接口模块、内核模块、算法模块、适配器模块,如图5所示。
    接口模块提供设备驱动程序与应用程序之间的接口,定义设备文件操作(open, read, write, ioctl,release)以及初始化设备文件(/dev/i2c0);内核模块用来增加或移除适配器、定义I2C总线的功能以及初始化包含系统信息的文件系统(/proc);算法模块用来初始化PCF8584设备以及定义PCF8584的函数(i2c_start,i2c_stop(), wait_for_pin());适配器模块通过被映射到MCU的存储器地址将数据传送到MCU。
    为了驱动PCF8584接口设备,需要对模块进行初始化。在通常的linux系统中,设备驱动在运行时载入和初始化,而在嵌入式linux系统中,设备驱动将在启动阶段被加载和初始化。4个模块的初始化程序被存储在“.init”段的“_init”处,由“do_initcalls()”函数在启动时调用执行。控制数据从接口模块开始,依次经内核模块、算法模块、适配器模块传送。接口模块接收应用程序的请求(open, write, read, ioctl),调用内核模块的接口程序(master_send(), master_receive(),transfer()),同时传递参数。内核模块将从地址、标记位、信息长度等数据传送到算法模块。算法模块检查I2C总线的状态和从地址,设置PCF8584的控制寄存器。,适配器模块从被映射到外部总线的地址空间中读写数据。

5.系统构建
    为了移植linux操作系统,我们首先在主机端安装一个交叉开发环境,然后在供测试的目标板上安装一个测试环境,测试好后,再移植到数字电视系统上。
    5.1安装交叉开发环境
    在裁减和定制Linux,运用于你的嵌入式系统之前,由于一般嵌入式开发系统存储大小有限,通常需要在强大的pc机上建立一个用于目标机的交叉编译环境。这是一套编译器、连接器和libc库等组成的开发环境。图6描述了交叉开发环境的安装过程。

    要制作二进制linux映像文件,首先应制作二进制连接器、汇编器和其它目标工具。然后,用 make menuconfig配置内核,此时在内核目录中将生成include/linux/version.h 和 include/linux/autoconf.h 文件。注意,由于数字电视系统的MCU只支持大端存储器格式,所以,应在内核库中做相应修改。第三步是制作交叉编译器(gcc)和c库(glibc)。由于两者是相互依赖的关系,可以先制作一个不带glibc的gcc,然后用交叉编译器创建一个glibc,再重新编译这个带glibc的gcc。第四步,由于移植好的linux运行在只读存储器中,所以需要安装用于制作二进制文件系统映像的工具(genromfs),和一个用于将elf格式(通用文件格式)转换为flt格式(扁平格式)的工具。
    5.2开发环境
    系统开发环境包括测试板的SNDS100TM(Samsung)、用于远程调试的JEENITM (Jtag EmbeddedICE Ethernet Interface)、数字电视机主板等。表1列出了开发环境的各个部分。
表1 开发环境
 组成部分 功能
测试板
 三星 s3c4510B (ARM 7TDMI),16M字节的SDRAM, 1M字节的flashROM, LED, RJ45连接器. 网络应用开发板

数字电视主板 三星s3c4500(ARM 7TDMI),16M字节的SDRAM, 8M字节的flashROM, pcf8584, SPU (LG electronics),32M字节SDRAM. 数字处理模块
JEENITM EPI, 两个硬件断点,以太网主机接口,内部的ARM 710A高速缓冲存储器 远端调试环境
软件
 gcc-2.95.3, glibc-2.1.3, binutils-2.12, genromfs-0.5.1, elf2flt, gdb-5.0, ADS(ARMTM Developer Suite),evaluation ver. 1.1 交叉开发和调试的工具
    在主机中制作一个二进制的linux内核映像,将其通过串口线传送到开发板上。利用JEENI来安装远端调试环境。由于flash ROM中的boot块被保护,不能修改,因此我们需要将它与数字电视主板分开,在flash ROM中烧入一个bootloader后再安装到主板上。
    通过这一实验,可以通过PCF8584控制音频输出。也就是说,I2C总线的从设备将数字信号转换为音频输出信号。终,我们可以听到蜂鸣声,也可以通过数字示波器来检测I2C总线信号。


  

参考文献:

[1]. PCF8584 datasheet https://www.dzsc.com/datasheet/PCF8584_318668.html.
[2]. flt datasheet https://www.dzsc.com/datasheet/flt_329018.html.


上一篇:基于ARM7的指纹考勤机设计
下一篇:基于AVR单片机的新型自动准同期装置的设计

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料