基于Linux内核链表音视频检索技术的应用

2021-02-07 08:56长江大学电子信息学院黄志杰孙先松
电子世界 2021年2期
关键词:链表开发板内核

长江大学电子信息学院 黄志杰 孙先松

在信息化时代的今天,报刊、广播、电视和网络这些信息媒体已经和我们的生活息息相关,而媒体对信息的发布和传播已经发挥着至关重要的作用,而人们的日常生活特别是物联网的发展推动了信息的快速传播。本设计采用了ARM8构架的S5P6818为主控芯片,利用Linux作为底层的操作系统,通过C语言对图片和音频的检索与分组管理,通过mplayer对视频的播放,实现对信息的传播应用。

信息的传递在人们日常生活中无时无刻都在发生,在广告机出现之前,传统的广告展示方法,例如路牌、发光二极管、卷帘式等内容展现单一,没有立体感,只能被动的传递信息,内容不具有可替代性,造成资源浪费。嵌入式系统的特殊媒体优势是:多模块显示:每个模块都是相对独立的,内容更新不会影响其它模块的显示;功能全面:可以按照用户的需求进行内容的搭配显示;视觉效果丰富:画面生动形象,立体感强;应用广泛:可以配置在酒店、商城、车站、公交车站牌以及娱乐场所。

本系统采用ARM cotex-A53架构的S5P6818作为主控芯片,利用Linux作为底层操作系统,应用C语言来划分为管理员模式和普通用户模式进行对信息的管理,通过C来操作底层驱动并对各类信息进行相应的检索,把检索的图片信息通过LCD呈现出来,把检索到的音频信息通过AC97声卡进行播放;最后的视频是通过Linux下的一款开源多媒体播放器Mplayer进行播放。

1 广告系统总体结构

1.1 系统硬件设计

嵌入式媒体系统由1片大小为256M、型号为K9F2G08的NAND闪存,1片1GB的SDRAM内存和1块800*1024分辨率的7寸电容屏组成。SDRAM采用DDR3接口,有着单通道32位数据总线,工作频率为800MHz。硬件框图如图1所示。

图1 广告系统的硬件框图

1.2 软件系统平台搭建

由于嵌入式系统的资源有限,通常情况下都是在PC机上完成程序的开发和测试,但由于目标平台(ARM开发板)和宿主平台(LinuxPC机)架构不同,导致PC机上编写和编译的程序不能直接在目标平台运行,为了解决此问题,在嵌入式开发过程中,通常使用交叉编译工具。本平台首先要做的是在虚拟机中安装Ubuntu18.04操作系统,进行软件的开发时,需要在虚拟机中设置一个共享文件夹(此文件夹共享在Windows和Linux系统下),最终在Windows环境下对C文件进行编写,Linux环境下编译以及调试。

首先在开发板上要配置Linux的版本为2.6.32,将图片、音频、视频、Mplayer播放器以及交叉编译的二进制文件,通过tftp-g-r传输到创建的gec/huang文件夹下,最后通过指令./文件名,执行程序获得结果。

2 系统软件设计与实现过程

2.1 软件功能设计

本系统包括普通用户模式和管理员模式。管理员模式可以对开发板上的音频、图片、视频信息进行增加、删除;普通用户模式可以播放图片和对应的背景音乐。功能系统设计流程图如图2所示。

图2 广告系统软件设计框架图

2.2 系统软件实现过程

信息的存储方式:

Linux操作系统为了更好、更高效地使用内存,将实际的物理内存进行了映射,屏蔽了物理内存的具体细节,有利于简化程序的编写和管理。假设正在使用的计算机实际物理内存大小只有1GB,当前系统运行了3个进程,Linux会将PM中的部分内存映射为3个大小均为4GB的内存,让每个进程都拥有了独立的内存空间,极大地扩展了数据和代码的内存空间。而数据是存储在虚拟内存中的内核链表里,因此ARM开发板能源源不断的存放所需要的信息,避免了内存不足的问题。Linux的内核链表的另一个突出优点是:由于可以方便地将其标准实现(即“小结构体”)镶嵌到任意节点当中,因此任何数据组成的链表的所有操作都被完全统一。另外,即使在代码维护过程中要对节点成员进行升级修改,也完全不影响该节点原有的链表结构。既然Linux内核链表是一种统一且抽象的数据结构,那么在Linux源码中就有与之相关的库,实现了内核链表的初始化、插入、删除、遍历、移动等功能。

图3 数据存储状态示意图

内核链表的整体结构分为数据域和指针域两部分。指针域分为头指针和尾指针,头指针指向前一个数据,尾指针指向下一个数据;而头结点则让整个链表产生循环关系。信息存储在堆空间里的存储形式如图3所示。

信息的递归检索:

递归是指在函数的定义中使用函数自身的方法,递归问题可以分解为若干个规模较小,与原问题形式相同的子问题,这些子问题可以用相同的解题思路来解决。递归检索的原理如图4所示。

图4 递归原理

在支持自调用的编程语言中,递归可以通过简单的函数调用来完成,递归函数的数学公式如下:

Linux中一切皆文件,可以通过对文件的递归索引来提取信息,这里要提到的是递归二要素:

明确递归的终止条件为检测文件的后四位.ebm.mp3.avi。

给出递归终止时的处理办法为文件子目录类型(文件的后缀名长度)为4。

这样就方便了递归检索。信息检索结果如图5所示。

音视频播放的实现过程:

在系统IO函数对LCD屏幕进行初始化的过程中,采用了一个非常重要的接口函数——mmap内存映射函数,用于解决显示图片时,图片逐渐显示完全的问题。每张图片附加对应的背景音乐,于是相邻图片的切换,采用Linux的kill-9号信号将后台的播放器停止,这样就实现了音频和视频对应播放的功能。

图5 广告系统信息检索结果

音视频的播放采用了MPlayer,其是一款开源的多媒体播放器,以GNU通用公共许可证发布。此款软件可在各主流系统使用,例如Linux和其他类Unix系统、微软的视窗系统及苹果电脑的Mac OS X系统。MPlayer是基于命令行界面的一款软件,在各系统可选择安装不同的图形界面。MPlayer的常用指令如:pause(暂停/取消暂停)、mute(静音开关)和seek value(向前查找到文件的位置播放参数value为秒数)等。播放效果如图6所示。

图6 播放效果展示

总结:本文以实现广告机功能为主要目标,在对现有的广告技术进行深入探究的基础上,利用嵌入式精简小巧的特点,设计了一个成本较低,界面丰富的广告机系统。可以进一步的简化人们获取信息的方式,方便人们的日常。整个系统由多个C语言模块实现,基于Linux的各种底层系统IO函数来操作ARM开发板,最后通过网络传输将交叉编译的文件传输到开发板中,实现图片、音频和视频的播放。

猜你喜欢
链表开发板内核
强化『高新』内核 打造农业『硅谷』
基于二进制链表的粗糙集属性约简
跟麦咭学编程
基于嵌入式Linux内核的自恢复设计
Linux内核mmap保护机制研究
基于链表多分支路径树的云存储数据完整性验证机制
浅析单片机开发板的设计与制作
微生物内核 生态型农资
ARM宣布mbed Enabled Freescale FRDM—K64F开发板通过微软认证
链表方式集中器抄表的设计