<?xml version="1.0" encoding="gbk"?> <rss version="2.0"><channel> <title>定阅帖子更新</title> <link>http://www.broadkey.com.cn/XML.ASP</link><description>TEAM Board - 科伟奇电子</description> <copyright>TEAM 2.0.5 Release</copyright><generator>TEAM Board by TEAM5.Cn Studio</generator> <ttl>30</ttl><item><link>http://www.broadkey.com.cn/Thread.asp?tid=475 </link><title>基于ARM&amp;nbsp;Linux&amp;nbsp;QT的掌上多媒体系统的设计和实现</title><author>清风细雨</author><pubDate>2009/12/19 9:59:07</pubDate><description><![CDATA[<strong>　0 引言</strong>
<p>　　随着人们生活水平的提高，消费结构发生了巨大变化，消费者用于娱乐方面的支出在总支出中所占的比例正在不断扩大。<a style="color: blue; text-decoration: underline" title="掌上多媒体系统" href="http://article.ednchina.com/word/261233.aspx">掌上多媒体系统</a>可以满足人们对于试听以及便携的需求，另外还可以实现一些其他功能，如图片浏览、网络下载、以及影音录制等。目前市场上的掌上多媒体系统多是Windows CE、Symbian、Palm OS等商用操作系统，其开放的程序不够高，而且价格偏高，不适于第三方应用软件的移植。<a style="color: blue; text-decoration: underline" title="ARM" href="http://article.ednchina.com/word/261230.aspx">ARM</a>体系作为专用嵌入式系统设计的通用处理器内核，具备高性能、低功耗、易扩展的特点。本系统基于ARM9、嵌入式Linux操作系统设计并实现了一个更为开放的嵌入式平台，来实现掌上多媒体系统的诸多功能。</p>
<p><strong>　　1 多功能掌上媒体播放器系统的硬件设计</strong></p>
<p>　　多功能掌上媒体播放器系统的硬件设计如图1所示。LCD采用的是Sharp的TFT屏，3．52in，分辨率240&times;320；音频控制器是IIS接口的音频控制器，解码芯片是UDA1314TS；另外扩展了用于视频录制的Philips的视频解码芯片<a style="color: blue; text-decoration: underline" title="SAA7113" href="http://article.ednchina.com/word/261232.aspx">SAA7113</a>和ADI的JPEG压缩芯片。视频录制的框图如图2所示。</p>
<p align="center"><img alt="多功能掌上媒体播放器系统的硬件设计" src="http://pagesadmin.ednchina.com/images/article/4bd37c2e-5fac-41a0-bbae-0d21bbdd7ef3/1.jpg" /></p>
<p>　　<strong>2 多功能掌上媒体播放器系统的软件设计</strong></p>
<p>　　系统设计和软件设计是本系统的难点。系统软件设计的总体框架如图3所示。</p>
<p><strong>　　2．1 嵌入式Linux操作系统</strong></p>
<p>　　Linux最初由<a style="color: blue; text-decoration: underline" title="Linux " href="http://article.ednchina.com/word/261231.aspx">Linux </a>Torvalds编写，后来在网络上被众多的Linux爱好者加以修改和维护，具有内核高效稳定、开源、可移植性强、内核可定制可裁剪、多线程多任务等特点，因此选择其作为本媒体播放器系统的操作系统。</p>
<p>　　首先定制裁剪并移植了Linux2．6的内核，然后为使各硬件能正常工作编写了键盘驱动、LCD驱动、触摸屏驱动、音频驱动、USB驱动等驱动。多功能掌上多媒体系统的正常工作首先是进入ARM－Linux操作系统，然后加载各个硬件的驱动程序并初始化各外围设备，接着就进入基于QT／Embedded库的Qtopia桌面系统编写的GUI图形界面程序的播放器，最后选择要进行的操作。</p>
<p>　　对于Linux内核的移植首先要移植bootloader，系统采用的是VIVI，其功能包括：分区管理、参数管理、启动Linux操作系统、文件系统管理、支持网络、通过串口下载程序到Flash或者RAM等。建立嵌入式开发环境，使得能够交叉编译源代码，对VIVI的源代码进行交叉编译，生成能在 ARM Linux上运行的bin文件，通过开发板的JTAG口将其烧写到开发板的Flash中。</p>
<p>　　对内核的移植首先要对内核进行修改MAKEFILE文件指定编译器以及目标平台，然后配置内核，交叉编译生成内核镜像，通过UART口(串口)下载到开发板上。移植相应的文件系统。文件系统中的文件是数据的集合，不仅包含着文件中的数据，而且还有文件系统的结构，所有Linux用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。在设计过程中把文件系统设置为可读写，这样操作性强一些，在投入到生产中的时候应该把文件系统设置为只读的，这样整个掌上多功能媒体播放器的操作系统就加载好了。</p>
<p><strong>　　2．2 驱动程序的设计</strong></p>
<p>　　本系统共涉及到键盘驱动、触摸屏驱动、LCD驱动、音频驱动和USB驱动等驱动。因为多媒体功能是本系统的重点，所以播放器部分很重要，这里主要介绍音频驱动的编写。</p>
<p>　　目前Linux下常用的音频驱动程序主要有两种类型：OSS(Open Sound System) 和ALSA。最早出现的Linux上的编程接口是OSS，它由一套完整的内核驱动程序模块组成，可为大多数音频芯片驱动提供统一的编程接口。在嵌入式系统中，对于特定的处理器(如本系统采用的S3C2410)，可以按照OSS接口标准来编写音频驱动程序，以满足Linux上的应用程序。OSS接口已经足够简单，需要完成的主要的工作就是对音频设备(本系统采用的是Philips的UDA1314TS)的read，write和ioctl等操作。<br />
<strong>　0 引言</strong></p>
<p>　　随着人们生活水平的提高，消费结构发生了巨大变化，消费者用于娱乐方面的支出在总支出中所占的比例正在不断扩大。<a style="color: blue; text-decoration: underline" title="掌上多媒体系统" href="http://article.ednchina.com/word/261233.aspx">掌上多媒体系统</a>可以满足人们对于试听以及便携的需求，另外还可以实现一些其他功能，如图片浏览、网络下载、以及影音录制等。目前市场上的掌上多媒体系统多是Windows CE、Symbian、Palm OS等商用操作系统，其开放的程序不够高，而且价格偏高，不适于第三方应用软件的移植。<a style="color: blue; text-decoration: underline" title="ARM" href="http://article.ednchina.com/word/261230.aspx">ARM</a>体系作为专用嵌入式系统设计的通用处理器内核，具备高性能、低功耗、易扩展的特点。本系统基于ARM9、嵌入式Linux操作系统设计并实现了一个更为开放的嵌入式平台，来实现掌上多媒体系统的诸多功能。</p>
<p><strong>　　1 多功能掌上媒体播放器系统的硬件设计</strong></p>
<p>　　多功能掌上媒体播放器系统的硬件设计如图1所示。LCD采用的是Sharp的TFT屏，3．52in，分辨率240&times;320；音频控制器是IIS接口的音频控制器，解码芯片是UDA1314TS；另外扩展了用于视频录制的Philips的视频解码芯片<a style="color: blue; text-decoration: underline" title="SAA7113" href="http://article.ednchina.com/word/261232.aspx">SAA7113</a>和ADI的JPEG压缩芯片。视频录制的框图如图2所示。</p>
<p align="center"><img alt="多功能掌上媒体播放器系统的硬件设计" src="http://pagesadmin.ednchina.com/images/article/4bd37c2e-5fac-41a0-bbae-0d21bbdd7ef3/1.jpg" /></p>
<p>　　<strong>2 多功能掌上媒体播放器系统的软件设计</strong></p>
<p>　　系统设计和软件设计是本系统的难点。系统软件设计的总体框架如图3所示。</p>
<p><strong>　　2．1 嵌入式Linux操作系统</strong></p>
<p>　　Linux最初由<a style="color: blue; text-decoration: underline" title="Linux " href="http://article.ednchina.com/word/261231.aspx">Linux </a>Torvalds编写，后来在网络上被众多的Linux爱好者加以修改和维护，具有内核高效稳定、开源、可移植性强、内核可定制可裁剪、多线程多任务等特点，因此选择其作为本媒体播放器系统的操作系统。</p>
<p>　　首先定制裁剪并移植了Linux2．6的内核，然后为使各硬件能正常工作编写了键盘驱动、LCD驱动、触摸屏驱动、音频驱动、USB驱动等驱动。多功能掌上多媒体系统的正常工作首先是进入ARM－Linux操作系统，然后加载各个硬件的驱动程序并初始化各外围设备，接着就进入基于QT／Embedded库的Qtopia桌面系统编写的GUI图形界面程序的播放器，最后选择要进行的操作。</p>
<p>　　对于Linux内核的移植首先要移植bootloader，系统采用的是VIVI，其功能包括：分区管理、参数管理、启动Linux操作系统、文件系统管理、支持网络、通过串口下载程序到Flash或者RAM等。建立嵌入式开发环境，使得能够交叉编译源代码，对VIVI的源代码进行交叉编译，生成能在 ARM Linux上运行的bin文件，通过开发板的JTAG口将其烧写到开发板的Flash中。</p>
<p>　　对内核的移植首先要对内核进行修改MAKEFILE文件指定编译器以及目标平台，然后配置内核，交叉编译生成内核镜像，通过UART口(串口)下载到开发板上。移植相应的文件系统。文件系统中的文件是数据的集合，不仅包含着文件中的数据，而且还有文件系统的结构，所有Linux用户和程序看到的文件、目录、软连接及文件保护信息等都存储在其中。在设计过程中把文件系统设置为可读写，这样操作性强一些，在投入到生产中的时候应该把文件系统设置为只读的，这样整个掌上多功能媒体播放器的操作系统就加载好了。</p>
<p><strong>　　2．2 驱动程序的设计</strong></p>
<p>　　本系统共涉及到键盘驱动、触摸屏驱动、LCD驱动、音频驱动和USB驱动等驱动。因为多媒体功能是本系统的重点，所以播放器部分很重要，这里主要介绍音频驱动的编写。</p>
<p>　　目前Linux下常用的音频驱动程序主要有两种类型：OSS(Open Sound System) 和ALSA。最早出现的Linux上的编程接口是OSS，它由一套完整的内核驱动程序模块组成，可为大多数音频芯片驱动提供统一的编程接口。在嵌入式系统中，对于特定的处理器(如本系统采用的S3C2410)，可以按照OSS接口标准来编写音频驱动程序，以满足Linux上的应用程序。OSS接口已经足够简单，需要完成的主要的工作就是对音频设备(本系统采用的是Philips的UDA1314TS)的read，write和ioctl等操作。<br />
　　(1)整数运算。在没有硬件浮点单元的CPU上，浮点运算是仿真方式，因此解码代码中应直接采用整数运算方式编码，而避免浮点运算；</p>
<p>　　(2)通过查表方式代替很多运算式获取计算结果，对调用频繁的小函数采用inline修饰；</p>
<p>　　(3)关键代码采用汇编语言编程，以获得更高效的目标代码，来提高系统的运行性能。</p>
<p><strong>　　3．2 打开Cache</strong></p>
<p>　　<a style="color: blue; text-decoration: underline" title="ARM" href="http://article.ednchina.com/word/261230.aspx">ARM</a>9处理器带有独立的16 kB数据Cache和16 kB的指令Cache。本系统中，打开指令Cache肯定能在一定程度上提高性能。至于数据Cache，由于从SD卡或者U盘读进来解码的数据使用完毕后就再也不会使用了，解码产生的数据也是一样，使用一次就会被丢弃，因此数据访问的时间局限性基本是不存在的。但是，系统在访问数据时存在很强的&quot;空间局限性&quot;，所以打开数据Cache后可以提高性能，因为：</p>
<p>　　(1)Cache和IDRAM之间通过Burst方式传递数据，提高了总线带宽，从而降低读数据的延迟。</p>
<p>　　(2)Cache一次读128bit或256bit，当读已在Cache中的数据时就会命中。</p>
<p>　　(3)通过WriteBuffer或WriteBack方式读内存时，没有写DRAM的延迟。</p>
<p>　　但是这样也会带来数据不一致的问题，主要是DMA造成数据的不一致，因为SD卡或USB的传输是通过DMA进行的，其传输过程无需CPU干预，DMA操作直接访问内存，但不会跟新Cache和写缓存相应的内容，这样就造成了数据的不一致，可用以下方法解决：</p>
<p>　　(1)将SD卡或USB和CPU共享的控制数据空间设置为uncachable，否则无法保证CPU读到的Cache中的数据是最新数据，从而可能造成系统运行错误。</p>
<p>　　(2)SD卡或USB输入模块通过DMA像主存传输文件数据时，写数据的缓冲区是由文件系统提供的。该缓冲区的特点是存储空间比较大而且是顺序访问的，可将其设置为cachable。</p>
<p>　　经过上述方法的优化以后，系统性能得到了大幅度的提高。经过测试表明，优化后解码所需的时间为优化前的15％左右，均小于正常播放所需的时间，完全满足实时播放的要求。</p>
<p><strong>　　4 结束语</strong></p>
<p>　　本系统以ARM9处理器为核心建立嵌入式多媒体系统，并在其上移植Mplayer播放器，扩展其功能，使mpeg-1、mpeg-2、avi等视频格式以及MP3、WMA等音频格式都能在其上流畅地播放，并实现了影音录制功能。在测试中各模块工作正常，达到了能全屏播放视频，流畅播放音频，能够将摄像头拍到的视频传送到Mplayer进行播放，能读取外接U盘或者SD卡中的多媒体文件进行播放，能从网络下载多媒体文件到扩展存储设备被Mplayer播放的设计要求。随着多媒体技术的广泛应用，掌上多功能媒体播放器会有更广阔的应用前景。</p>]]></description></item></channel></rss>