林彦廷,师文庆
(广东海洋大学 电子与信息工程学院,湛江 524088)
汽车,是人们日常生活中的常用代步工具之一,也将是我国一个新的家庭消费热点,汽车的潜在市场、经济利益巨大[1]。随着国内汽车使用量增加,汽车电子在未来汽车产业中的地位越来越重要,近年来最为突出的是智能车载系统,随着人工智能进入人类视野,人们对于无人驾驶车载系统越发感兴趣,对智能车载系统的各种需求也会大大增加,就像当年智能手机一样,逐渐融入人们的生活。对于人们的生活来说,汽车早已不再满足于一种单一的交通工具,汽车的数字化、多媒体化、多功能化、智能化将是未来汽车电子产品的必然趋势,汽车导航、多媒体功能以及网络通信系统成为未来汽车的必备[2]。随着物联网等互联技术在汽车领域的发展及应用,智能汽车及智能车载系统已经是一个重要的研究方向[3]。为此,文中提出了基于嵌入式的智能车载多媒体控制终端设计,基于安全、实用、娱乐理念设计了4项功能:①可视化倒车雷达报警;②天气预报;③音乐播放器;④系统硬件控制。
目前,电子信息技术飞速发展,出现一些处理能力强、外设接口丰富的处理器芯片,比如ARM架构系列处理器,为开发多功能的车载终端提供了硬件技术基础[4]。此外,由于Linux操作系统的开源性,每年开发人员的大量投入,平台日渐成熟稳定,且所支持的外设驱动丰富,被高端消费电子产品广泛应用,也为该终端的设计开发提供了强大的软件系统支撑。
按照所设计的车载多媒体控制终端的需求分析以及现有材料,采用S5P681处理器为核心板,应用软件运行以嵌入式Linux为平台为主,基于Cortex-A53和Linux嵌入式技术,通过LCD触摸屏实现音频播放终端控制、可视倒车、倒车距离实时报警、实时天气预报等,使用方便,交互界面清晰简洁。
在智能车载多媒体控制终端的设计方案中,智能多媒体车载控制终端的硬件平台主要以ARM处理器为主,由S5P6818处理器核心板、超声波模块、摄像头模块和LCD触摸屏人机交互模块等部分组成,系统硬件结构如图1所示。各模块与Linux系统构成了完整的智能多媒体控制终端。模块完成功能,Linux系统进行调度。
图1 智能多媒体车载控制终端的系统结构Fig.1 System structure of intelligent multimedia on-board control terminal
不同嵌入式系统的开发有自身不同的的开发特点,从而构成嵌入式系统的多样性和复杂性。嵌入式系统是面向特定应用的系统,一般先进行硬件功能的开发,再根据设计需求分析移植对应操作系统,最后对底层的硬件驱动程序进行设计。设计中首先构建嵌入式操作系统,在64位Cortex-A53平台上构建起完整的嵌入式开发系统,在此基础上进行音频、摄像头等各个模块的开发设计,通过交叉编译,生成可应用软件,然后应用在ARM平台上,通过Linux系统进行调度[5]。
嵌入式操作系统的嵌入式开发的高效率,不仅仅体现在减少了系统的开发工作量,还体现在系统合理地调度多任务,合理利用系统资源、系统函数以及接口,提高嵌入式软件的可移植性。嵌入式Linux系统是一个完全内存保护、多任务、多线程的操作系统,是完成开源的,可以减少大量开发费用[6],同时也促进了促进了嵌入式的发展。
嵌入式Linux系统从软件的角度一般分为以下四方面:
1)Bootloader Bootloader启动引动程序,是系统启动加载的第一段汇编代码,主要负责系统硬件的初始化,引导并加载Linux内核参数,最后根据参数启动Linux内核。
2)Linux内核 Linux内核面向不同的场景,在不同嵌入式系统设计中会对内核进行裁剪、定制和移植,制作适合用户需要的嵌入式内核,包括内存管理、进程管理、虚拟文件系统等。
8.请附作者简介,包括姓名(使用笔名者请附真实姓名),出生年月,性别,民族(汉族可省略),籍贯,职称,学位,简历及论著情况(任选),工作单位,通讯地址,联系电话,邮政编码。
3)根文件系统 Linux系统的宗旨是“一切皆文件”,根文件系统就是Linux挂载在虚拟文件系统的第1个文件系统,根文件系统和Linux内核配合使用,建立在动态随机存储器上的根文件系统和建立在Flash设备上的文件系统,通常用动态随机存储器上的文件系统为根文件系统[7]。
4)用户应用程序 应用程序、Linux系统和硬件平台之间的关系如图2所示。Linux驱动的设计大大降低了应用层和硬件平台之间的耦合度,应用软件只需调用系统提供的接口即可控制硬件,无需关心硬件如何工作,大大提高了应用程序的可移植性以及开发人员的开发效率。
图2 系统关系逻辑Fig.2 Logical diagram of system
应用软件设计的基本过程如图3所示。由车载系统智能终端的需求分析以及设计总体框架开始,到系统移植、各模块的集成,再到功能模块测试阶段,最后完成设计。
图3 应用软件设计的基本过程Fig.3 Brief process of APP design
虽然Linux系统自带Media Player播放器,但由于系统自带的播放软件所支持的多媒体格式非常有限,所以在程序设计时,移植了第三方多媒体播放软件Mplayer[8]。音频播放器设计原理如图4所示。Mplayer一大特点是支持广泛的输出设备。设计中最重要的是MPlayer还支持通过硬件MPEG解码卡显示。
图4 音视频软件模块工作流程Fig.4 Flow chart of audiovisual software modules
该软件模块的工作流程如图5所示。这一模块主要分为摄像头采集一帧一帧的图片数据和超声波的测量距离显示到LCD屏上,提醒用户。用户空间要控制这2个硬件模块需要对其设计相应的驱动程序,如超声波驱动、蜂鸣器驱动和摄像头驱动等。当超声波测出的距离小于设定的距离,LCD屏上开始显示距离,同时蜂鸣器报警。
图5 可视化倒车工作流程Fig.5 Flow chart of visualized backing off
设计中集成了LED驱动模块、蜂鸣器驱动模块、超声波驱动模块。在此,以超声波模块的设计为例,给出其驱动程序的设计流程。基于嵌入式系统的应用程序开发,如图2所示,应用程序不能直接访问硬件,故设计了驱动程序,以此作为中间桥梁,给应用层提供访问硬件的接口,通过驱动程序来对系统内核访问硬件寄存器从而达到控制硬件的效果。
超声波模块驱动程序的编写以及设计使用混在设备驱动模型,大致流程如下:
1)定义文件操作集file_operations和混杂设备miscdevice,将文件操作集放到混杂设备中。
3)编写文件操作集file_operations里面各个函数指针所指的具体函数如 read,write,ioctl,等,即为系统调用接口函数。
同样地,由于Linux系统集成了摄像头的驱动,应用程序只要通过系统调用函数打开摄像头设备,即可访问摄像头采集的图像数据。Linux内核中采用V4L2的机制来管理摄像头图像信息。V4L2的运行原理如图6所示,通过完成1个队列来存储摄像头采集到的视频数据,申请3个或者3个以上内核数据缓存,并将它们依次插入到队列中,然后将缓存区通过系统调用函数mmap将缓存映射到用户空间,这样就可以采集图像数据并进行操作或显示,摄像头每采集1帧数据就做1个出队操作,读取数据后再入队,如此循环往复[10]。
图6 摄像头的V4L2的运行原理Fig.6 Operation principle of V4L2 of camera
天气查询Api是一个HTTP接口的简单应用,根据请求输入的报文头信息,查询当前/未来的天气状况,服务器会返回Json数据,在程序中对其进行解析出天气数据,从而应用自己编写的程序中,获得的实际效果如图7所示。天气预报模块的工作流程如图8所示。
1)购买天气预报查询接口Api,在此为阿里云全国天气预报查询(免费版)Api;
2)应用Qt中的QNetwork类实现http获取实时天气预报;
3)发送请求,请求方式为GET;
netrequest->setUrl (QUrl("http://jisutqybmf.market.alicloudapi.com/weather/query?city="+city));
netrequest->setHeader (QNetworkRequest::UserAgentHeader,"RT-Thread ART");
httpManager->get(*netrequest);
4)返回类型为Json数据,并对Json数据进行解析。
图7 天气预报的实际效果Fig.7 Visual effect of weather forecast program
图8 网络实时获取天气预报工作流程Fig.8 Flow chart of obtaining weather forecasts in real-time from the web
所设计的基于嵌入式Linux系统的车载终端控制系统,自动扫描U盘中MP3文件进行音频播放,可控制LED灯和蜂鸣器,可通过http协议访问实时天气预报,利用摄像头和超声波模块实现可视倒车及倒车距离报警等功能,实现了集娱乐、安全、网络为一体的智能车载多媒体终端控制系统。