DIY编程器网

标题: 嵌入式数字视频播放系统软件平台的构建 [打印本页]

作者: liyf    时间: 2012-1-22 00:16
标题: 嵌入式数字视频播放系统软件平台的构建
摘要:本文介绍了在PowerPC405上利用嵌入式Linux来构建数字视频播放系统软件平台的过程,探讨了嵌入式Linux系统里交叉编译器、bootloader、Linux内核、根文件系统等几个主要部分的构建过程。
关键词:PowerPC405;嵌入式Linux;数字视频播放机;U-bOOT

引言
数字视频播放设备在近几年的发展十分迅速,种类繁多。传统的视频播放设备(如DVD播放机)的软件系统一般都是一简单的控制环系统,没有操作系统,功能扩展和升级受到限制。本课题研究的便携式数字视频播放设备构建于嵌入式32位PowerPC405 CPU之上,运行Linux操作系统,以大容量的硬盘作为存储介质,具有网络功能。PowerPC405是IbM公司推出的一款专门针对嵌入式应用的RISC处理器,应用十分广泛。嵌入式Linux[1]作为一种开源的操作系统软件,具有免费、支持众多CPU、可裁减、支持网络、丰富的软件资源等特点。利用嵌入式Linux来构建数字视频播放系统的软件平台使得该播放机成本低,易于升级和管理,支持多种接口如USb,从而使得视频节目交换方便等优势,代表了该种设备未来发展的一个方向。本文主要探讨了构建应用于数字视频播放机的嵌入式Linux系统的bootloader、Linux内核移植的主要过程和可能碰到的问题,给出了相应的解决方案。
1 数字视频播放系统框图



(图1-1 码流播放系统硬件框图)
图1-1为本播放机的系统框图,其核心控制系统为基于PowerPC405的嵌入式Linux,通过其上的应用程序来把数据存储系统里的节目经过一定处理后搬移到码流控制系统里的FPGA里,由FPGA完成解密后送给解码系统,经过解码系统解压缩后输出RGb信号给显示设备来显示。其中我们要关注的就是核心控制系统里嵌入式Linux系统的搭建。
播放机的嵌入式Linux系统的层次结构如图1-2,硬件上电后,CPU的程序指针首先指向一个特定的存储器地址,该地址处一般存放着bootloader,bootloader在初始化完CPU以及内存等设备后,把Linux内核从一般ROM设备里搬移解压到内存里,然后程序指针跳转到内核在内存里的开始位置处,由Linux内核来继续完成剩下的系统引导工作。内核在重新初始化完系统后,就加载根文件系统,运行用户应用程序。整个嵌入式Linux系统平台的构建过程可以参照系统的启动过程,主要要做的工作有构建bootloader、Linux内核、根文件系统这几个部分。






(图3-1)PCI设备IDSEL管脚的两种接法
如图3-1所示,对于一般接法的(a)图,PCI从设备的IDSEL管脚是通过一电阻串联到PCI总线的地址线AD[11-31]中某一根,这样可通过在访问PCI总线的地址期内往AD[11-31]这些地址线一个个的置高电平,如果读回来的配置寄存器数据有效,说明该地址线连了某设备的IDSEL,若无效,说明未连接。而我们开发板则采用了图3-1里面的(b)接法,把PCI从设备的IDSEL管脚与CPU的一个GPIO端口相连,这样就可以通过控制GPIO来灵活的控制PCI总线上某设备的使能或者失效。在我们这种硬件连接下,访问PCI从设备配置空间时,需要先置该设备IDSEL管脚所连接的GPIO为高,再读写配置寄存器组。所以,对于我们这种开发板,需要在一般的读取配置寄存器空间的源码里(arch/ppc/kernel/indirect_pci.c),读写配置寄存器之前,插入下列代码:
switch  (dev_function)
{
       case PCI_DEV1: set_gpio1_high(); //置相应的GPIO为高
       case PCI_DEV2: set_gpio2_high();
       default:break;
}
另外一项需要修改的PCI初始化代码是有关PCI设备的中断号分配。对于没有bIOS的嵌入式Linux,PCI设备中断号分配是由内核根据板子的硬件连线来决定的。一般嵌入式设备不需要中断路径互连器,直接把插槽的/INT管脚与CPU的IRQ线相连。连接方法有很多种,如把一个插槽的四个中断脚都连到一个IRQ上,由操作系统来控制中断的复用关系,也可以一个PCI中断管脚只连一个IRQ线。所以PCI IRQ的分配这部分Linux代码要根据各开发板实际的中断连接方法来修改。
在我们的开发板里,每个PCI的/INT管脚都连接到一单独的IRQ线上,根据这种连接关系,我们从软件上可以构造出下面这样一张表:
/* arch/ppc/platforms/our_board_name.c:ppc405_map_irq ()*/
static char pci_irq_table[][4] =
/*      PCI  /INT PIN->INTLINE
*      A       b      C           D    */
{
              {28,       29,         30,         30}, /* IDSEL 1 - PCI 插槽 1 */
              {31,       31,         31,         31}, /* IDSEL 2 - PCI 插槽2 */
};
上表描述的PCI插槽1的/INT A中断的号是28,而这个28号中断的由来是该槽的/INT A与CPU的28号中断的IRQ线相连了。把所有PCI插槽的中断线与CPU IRQ线的连接关系填入表中,就可以通过内核里标准的PCI初始化代码正确分配各PCI设备的中断号了。当然,在板子的IRQ初始化部分(arch/ppc/platforms/our_board_name.c:board_setup_irq())还要正确设置这些分配了的中断线的触发方式,极性等。
Linux内核的移植牵涉到很多硬件的知识,对开发板的硬件原理图有比较清楚的认识可以对移植工作有事半功倍的效果。
结束语
有了bootloader,内核,再利用busybox[4][5]来构建一个简单的根文件系统后,这个嵌入式Linux系统平台就已经搭建完毕,用前述过程所搭建的嵌入式Linux系统平台体积小,功能强,运行稳定,对于像数字视频播放机这种需要长期工作运行的设备而言非常适合,而且升级性强,对于未来的一些应用需求,可以通过开发板上的PCI、USb、Ethernet等接口进行扩展,可以说是为以后设备的进一步功能增强奠定了坚实的基础。本论文的创新点在于将传统的视频播放设备的简单控制系统升级为嵌入式Linux系统,并对嵌入式Linux系统的构建和移植作了详细探讨,特别是根据PCI设备的新连接方法提出了一种新的初始化算法,具有很强的应用价值。
参考文献
1陈 福等,基于嵌入式系统的视频图像捕获研究与实现,《微计算机信息》,2005年第                12-2期,P12-13、P70
2 http://www.denx.de
3 http://www.denx.de/twiki/bin/view/DULG/Manual
4 http://www.busybox.net
5 Karim Yaghmour,building Embedded Linux System.,O’Reilly, 2004
                          
                       
                          
                               




欢迎光临 DIY编程器网 (http://diybcq.com/) Powered by Discuz! X3.2