APP下载

基于Android系统的机场噪声监测终端设计与实现

2014-11-27李成通蒿培培

中国民航大学学报 2014年2期
关键词:声卡网卡内核

李 国,李成通,蒿培培

(中国民航大学计算机科学与技术学院,天津 300300)

机场为城市提供了快速而便捷的交通,促进了经济的繁荣和社会的发展,但飞机的频繁起降产生了极其严重的噪声污染。机场噪声的综合治理需要民航局、研究单位和机场等相关单位通力合作、合理分工和协调推进。其中首要的工作就是测量机场周边区域机场噪声的实际强度值,“用数据说话”,需要在机场周边区域安装和运行噪声实时监测系统,用于取得实际的飞机噪声的污染强度。目前,国内还没有自主研发的功能完善的机场噪声监测系统,只能从国外引进,首都国际机场引进了丹麦B & K公司研制的机场噪声检测系统。但国外的这些系统价格极其昂贵,一套系统约2 500万人民币,若国内噪声污染非常严重的14个大型机场都引进该系统,则费用巨大。此外,部分噪声参数计算也不符合中国国家标准,因此,国内急需自主研制并完全满足中国机场噪声标准的机场噪声实时监测系统,从而对机场周边的区域噪声强度进行实时监测。

机场噪声监测终端是机场噪声监测系统的重要组成部分,其作为噪声监测点广泛布设在机场周边区域。这些监测点需要全天时全天候长时间不间断地对所在区域的噪声进行收集和存储,并进一步传送到汇聚层以作进一步的分析和处理,从而为以后相关的噪声预测、等值线绘制及噪声评价提供数据上的支持。

从终端设备来看,可分为简单的传感器设备、工控机和基于智能系统的终端设备。其中传感器设备占大多数,而基于智能系统的终端设备非常少,这也是由于物联网刚刚起步,其基础设施还有待更大范围的构建。现在普通的机场噪声监测终端类似工控机,设备大而笨重,其成本也很高,动辄几万块钱。由于这些设备的性价比不是很高,近年来流行的智能系统就可发挥其优势了。因为智能系统能最大化地利用硬件设备,在硬件设备配置非常低的情况下,依然能很好地完成任务。而且基于智能系统的噪声监测等应用软件的开发变得相对简单,这得益于智能系统其良好的系统架构和其丰富的函数库和软件资源。所以对基于智能系统的终端设备的研究就显得很有价值。

目前来看,机场噪声监测的实现主要是通过特定的噪声监测仪器。噪声监测仪器以单片机模块连接工控机进行噪声数据的采集和处理是当前厂家实施的运行模型。其单片机模块包含了必须的处理器、处理音频的芯片以及接口设备。这些仪器完全可以整合到终端设备上,而不是以单独的模块存在。本文涉及到的终端设备实现了机场噪声数据的采集和处理,为进一步把独立的噪声采集和处理的仪器整合到终端设备上奠定了理论和技术基础。基于智能系统的终端设备一方面可以降低硬件标准减少设备资金的投入,另一方面可以缩短噪声监测等应用软件的开发周期以降低人员成本的投入。从长远来看,终端设备的微型化和智能化已成为必然的趋势,所以基于智能系统的终端设备研究的重要性就不言而喻了。

1 机场噪声监测终端的硬件体系

MagicArm270开发板是致远电子有限公司提供的开发平台。该平台是一款可以运行Linux和WinCE嵌入式操作系统、支持图形系统QT和MiniGUI、且具备其它多种功能的XScale开发平台[1]。采用Intel公司的Xscale内核的PXA270微处理器,扩展有充足的存储资源和众多典型的嵌入式系统接口,是一款性价比很高的系统平台。MagicArm270的软硬件架构图如图1所示。

图1 监测终端的软硬件架构图Fig.1 Monitoring terminal chart including hardware and software

2 机场噪声监测终端的系统平台搭建

机场噪声监测终端要实现噪声信息采集程序的运行,必须具备稳定而可靠的平台支撑。对噪声监测终端的平台搭建主要包括Linux内核移植和平台相关驱动程序的移植,以及Yaffs2文件系统的制作。本文从这3个方面展开对噪声监测终端的平台搭建过程。

2.1 Linux内核移植

在实际做Linux内核移植时,需改动的主要是与硬件相关部分的代码。具体移植步骤如图2所示。

图2 Linux内核移植步骤Fig.2 Transplant steps of Linux kernel

本文将从以下几个方面来做Linux内核移植:

1)Linux内核配置

在Linux内核配置过程中,选择命令“make menuconfig”进入文本菜单的配置界面,然后根据提示进行操作。以选择处理器类型为例,来说明如何配置Linux内核。依次进入“System Type->ARM system type(PXA2xx/PXA3xx-based)-> PXA2xx/PXA3xx-based”选择处理器具体类型。

2)交叉编译环境的建立

这里是通过互联网下载已经做好的工具链:armnone-linux-gnueabi-gcc,并把其放在了/usr/local/arm/目录下[2]。

3)Linux内核编译器的设置

在内核源码根目录下Makefile文件中设置处理器体系和编译器的具体路径。

4)平台相关代码的移植

首先,修改Linux内核代码里对Bootloader、Kernel和文件系统的各个分区的设置,使其在MagicArm270开发板上能正常运行。其次,修改Linux内核代码里对IDE设备的设置,使其在MagicArm270开发板上能进行正常的设备操作。最后,修改Linux内核代码对Nand设备的设置,修改文件drivers/mtd/nand/Kconfig。

5)Linux内核编译

在保存以上配置后,就可以用命令“make zImage”编译内核了。编译结束后将在内核源码目录的arch/arm/boot中得到Linux内核映像:zImage。

6)Linux内核的运行

需先将Linux内核通过FTP传输至MagicARM270 RAM的RAM中,传输完毕后,在ZLG/BOOT命令行使用cpf命令将其固化到NOR Flash中。内核启动时的效果如图3所示。

图3 Linux内核启动时的效果图Fig.3 Rendering of Linux kernel startup

2.2 平台相关驱动程序的移植

因为驱动程序是硬件工作的前提,所以必须把相关硬件所对应的驱动程序进行一定的修改,例如:DM9000网卡驱动移植、LCD驱动移植、触摸屏驱动移植和声卡驱动移植等。

2.2.1 DM9000网卡驱动移植

移植DM9000网卡驱动程序,要做的就是找出并修改最小相异性。这里的最小相异性是:基地址、位宽和中断引脚等信息。下面将从7个方面来阐述网卡驱动的移植过程。

1)配置相应内核选项

在编译Linux内核时,利用make menuconfig的配置选项 ,选中Device Drivers->Network device support->Ethernet(10/100Mbit)->DM9000 support。

2)网卡所需的IO地址、中断等资源的设置

在文件arch/arm/mach-pxa/mainstone.c中添加对IO地址和IRQ中断的设置。

3)添加设备文件

在文件arch/arm/mach-pxa/mainstone.c中添加DM9000对应的设备文件。

4)设置网卡硬件地址

在文件driver/net/dm9000.c中设置网卡DM9000相应硬件地址。

5)注册网卡驱动程序driver/net/dm9000.c

DM9000网卡正常工作时的信息打印效果如图4所示。

图4 内核启动时网卡被成功识别Fig.4 Card being successfully identified when kernel boots

2.2.2 LCD驱动移植

LCD设备是一类平台总线设备。因为在嵌入式系统中会经常使用LCD进行交互,这里通过修改平台代码使内核支持LCD,进而完成相应功能。下面将从5个方面来阐述LCD驱动的移植过程。

1)配置Linux相应内核选项

在编译Linux内核时,利用make menuconfig的配置选项,选中 Device Drivers->Graphics support->Support for frame buffer devices->LCD framebuffer support。

2)添加相应LCD相关平台信息,确定LCD类型

首先,在文件arch/arm/mach-pxa/mainstone.c中进行LCD类型修改,其次是修改关于toshiba_ltm04c380 k_mode的定义,以适应开发板的LCD硬件要求。

3)LCD设备所需的IO地址、中断等资源的设置

在文件arch/arm/mach-pxa/devices.c中添加对IO地址和IRQ中断的设置。

4)添加设备文件

在文件arch/arm/mach-pxa/devices.c中添加LCD对应的设备文件。

5)注册LCD设备

在文件driver/char/led.c中调用函数misc_register(),注册LCD设备。

2.2.3 触摸屏驱动移植

触摸屏作为一种输入设备,在Linux2.6内核中通常作为input子系统的一部分。在input子系统中已提供了触摸屏的驱动上层抽象层,因此只需对新的触摸屏驱动器提供驱动程序。下面将从3个方面来阐述声卡驱动的移植过程。

1)配置Linux相应内核选项

在编译Linux内核时,利用make menuconfig的配置选项,选中Device Drivers->Input device support->Touchscreens->Philips UCB1400 touchscreen。

2)定义和添加触摸屏设备文件

在文件arch/arm/mach-pxa/mainstone.c中添加触摸屏设备文件的定义。

3)编写触摸屏驱动程序中的探测函数,用来识别触摸屏硬件设备

内核启动时触摸屏设备被成功识别的效果如图5所示。

图5 内核启动时触摸屏设备被成功识别Fig.5 Touch screen devices being successfully identified when kernel starts

2.2.4 声卡驱动移植

由于本文主题是噪声智能终端,所以必须有声音方面的采集和处理,同时也进行了相关声卡驱动和音频驱动方面的移植。这里着重叙述声卡驱动的移植过程。声卡设备是字符设备,所有整体的移植过程相对简单[3],下面将从5个方面来阐述声卡驱动的移植过程。

1)配置Linux相应内核选项

在编译Linux内核时,利用make menuconfig的配置选项,选中 Device Drivers->Sound->Sound card support->Advanced Linux Sound Architecture->ALSA ARM devices->AC97 driver for the Intel PXA2xx chip。

2)添加设备文件

在文件arch/arm/mach-pxa/mainstone.c中添加DM9000对应的设备文件。

3)声卡驱动程序初始化和声卡设备文件的创建。

4)设置IRQ值

在文件/include/asm-arm/arch-pxa/irqs.h中修改IRQ值:

#define IRQ_AC97 PXA_IRQ(14)/*AC97 Interrupt*/

启动MagicArm270开发板后,首先将带有歌曲的U盘插入到开发板的USB接口,开发板成功挂载U盘后,运行命令:

cat test.mp3>/dev/dsp

当听到耳机输出声音,就可以证明声卡驱动移植成功。

2.2.5 SPI总线和I2C总线驱动移植

系统移植中,总线的移植也至关重要。下面从SSP和I2C这2个总线来阐述总线移植的过程。

1)SPI总线移植

首先在文件arch/arm/mach-pxa/mainstone.c中添加SPI总线所对应的平台设备文件,其次是设置SPI控制器,最后是设置IRQ值。

2)I2C总线的移植

I2C总线移植的主要工作包括了其IRQ值的修改。因为文件irqs.h在新旧内核上变化很大,如求IRQ值的宏PXA_IRQ(x)的实现就发生了很大的变化,导致同样的x值,会得到不同的IRQ值。具体IRQ值的修改是操作文件/include/asm-arm/arch-pxa/irqs.h。

2.3 制作Yaffs2文件系统

Linux内核启动后,其根据参数linux_cmd_line的指示而跳转到根文件系统挂载的地址,从而完成文件系统的初始化和挂载任务。下面介绍基本的根文件系统的创建:

1)Android源代码下载

首先安装git与curl工具,然后安装并初始化Repo,其次执行“repoinit”的操作来获取最新的源代码列表,最后执行“repo sync”同步下载Android1.6源码。

2)Android源码编译

在Android源码目录下,直接键入“make”命令,会在此目录中生成新目录out。然后把out/target/generic/目录下的文件组合成一个目录为android_fs。并且在此android_fs/dev/目录下用以下命令增添两个文件:

mknod-m 660 console c 5 1

mknod-m 660 null c 1 3

3)以NFS挂载方式启动Yaffs2文件系统

首先确定Linux内核中的.config文件里CONFIG_CMDLINE包含语句“rootfstype=nfs”。然后就可以在开发板上的Linux内核启动后通过网线挂载PC机上的文件系统,便于调试文件系统,提高文件系统的制作效率。

开发板启动时成功挂载文件系统的效果图如图6所示。

图6 Yaffs2文件系统的移植Fig.6 Transplant of Yaffs2 file system

3 噪声监测系统平台的自动化测试

本节以Monkey自动化测试方法来测试视频监控系统的稳定性,并提供噪声监测系统运行效果图。具体测试将分别从邮件、浏览器、联系方式以及系统设置等多个方面展开。

3.1 Monkey自动化测试

作为一个命令行工具,Monkey可以同时运行在实际设备或模拟器中。Monkey工具具备很高的扩展性,它不仅面向一款手机终端,而且可以存储配置信息文件并供读取。Monkey通常会向系统发送一些伪随机的用户事件流,以实现对正在开发和调试的应用程序或者系统进行一些压力测试[4]。

3.2 系统启动时的各个子系统的测试

下面将从6个方面来测试系统的各个子系统,包括基本设置settings、音乐music、联系contacts、浏览器browser、邮件email和短信mms等6个系统。

开发板正常运行时,执行如下命令以测试基本设置子系统:

$adb shell monkey-pcom.android.settings500000

图7是执行该命令后,开发板所测试的基本设置子系统的效果图。

图7 系统基本设置在测试时的效果图Fig.7 Testing effect diagram of basic system settings

本文用同样的方式测试了其它5个子系统,系统运行比较稳定,可以经得起上万次连续测试。系统同时也把camera等子系统屏蔽掉,所以在测试时会显示系统错误信息。

4 噪声信息采集

噪声监测终端的平台搭建好后,就可以编写噪声信息采集程序,以实现噪声信息的采集。本文将从环境搭建、应用程序编写和软件升级3个部分来阐述噪声信息采集的过程。

4.1 应用软件开发环境搭建

应用软件的开发需要相关工具的支持,下面将从3个方面来介绍应用开发环境的搭建:

1)配置JAVA JDK环境,配置JAVA环境变量;

2)安装 Eclipse和 ADT;

3)配置Linux版本的Android SDK。

4.2 噪声数据采集设计

Android系统的一个主要功能是多媒体功能,可以使用Android来播放各种音频和视频。在Android的SDK中同样提供了各种多媒体开发接口,可以提供许多API函数来开发出各种音视频软件[5]。下面2个函数是噪声数据采集时所需要的关键函数:AudioRecord()和 AudioRecord.getMinBufferSize()。这 2个函数分别实现了录音API函数的调用和最小缓冲区的设置,最终把周围的声音数据录制下来。

ar.startRecording();//开始录音

ar.read(buffer,0,bs);//把录音数据读取到 buffer里

程序再利用循环求出buffer值的平方和并除以数据的总长度,最终得到音量大小。由音量大小就可以获取白噪声值,然后对实际采样进行标准化。

double dB=10*Math.log10(v/(double)r);

经傅里叶变化后得到的复数数组是二维数组,实部和虚部的平方和取对数后乘10就大致等于表示音量的分贝值。具体噪声信息采集程序的数据流向示意图如图8所示。

图8 噪声信息采集程序的数据流向示意图Fig.8 Data flow diagram of noise program information collection

4.3 噪声数据采集的效果图演示

为了在终端上运行噪声采集程序,首先应该把编译好的apk文件从Ubuntu系统中拷贝出来,然后再安装到终端上的Android系统中。Ubuntu系统中已经编译好的apk文件的具体路径是:workspace/mynoise/bin/mynoise.apk,此处的workspace是Eclipse软件所运行的工程默认保存的工作区,而mynoise是自编的噪声采集程序所命名的工程。

在噪声监测终端上安装噪声采集程序,程序可以稳定运行。图9是在安静的实验室运行时的效果图。

图9 安静实验室里Android 1.6版本噪声终端运行效果图Fig.9 Terminal effect of noise figure in quiet laboratoy on Android 1.6 version

噪声采集程序运行时会显示一个图形界面,直接显示所测的分贝值,同时也会通过指针指向实际测到的噪声值。图9所测到的噪声值为43 dB,属于实验室比较安静时的噪声值。对比标准噪声采集设备所采集的噪声值,其误差控制在1 dB之内。因本文设计的噪声监测终端的应用是基于飞机噪声,实验环节中也对实验环境做了改变:在终端周围播放带有飞机起飞录音的声音,终端运行的效果图如图10所示。

图10 播放飞机起飞录音时噪声终端运行效果图Fig.10 Terminal effect of taking off recording noise figure on Android 1.6 version

通过实验可以获得飞机起飞时的噪声值围绕97 dB变化。参考相关文献,民航机起飞时的噪声值一般为95 dB左右,进场噪声值为101.1 dB,侧向噪声值为100.6 dB,而战斗机则可以达到120 dB以上。同时也可了解到,飞机的引擎声音大约为130 dB,喷射飞机起飞时100m处的噪音可达到130 dB。

通过和标准噪声采集设备所采集的噪声值相比较,噪声监测终端采集的噪声值误差很小,可以控制误差为1 dB之内。噪声监测终端达到了监测周围飞机噪声的效果。在实验阶段,噪声监测终端作为移动终端,实时实地在机场周围进行噪声采集,每当飞机起飞和降落时,其噪声采集值都会有大的变化,其采集到的噪声值也非常接近文献中噪声值,实现了噪声监测终端作为移动终端实时实地监测机场周围飞机噪声[6]。

5 噪声监测系统平台的优越性

噪声监测系统经过手动和自动化两个方面的测试,验证了其系统稳定性和可靠性比较高,并且能很好地完成噪声信息的采集。下面将从噪声监测终端自身来阐述本文中的噪声监测终端的优越性。

传统噪声监测终端与本文中设计的噪声监测终端的优缺点对比如表1所示。

表1 传统噪声监测终端与智能噪声监测终端的对比Tab.1 Comparison of traditional noise monitoring terminal and intelligent terminal

6 结语

本课题结合项目的实际应用,设计和实现了以Android系统为平台的噪声监测终端。经过对噪声监测终端测试,其达到了稳定可靠的系统要求。该终端能很好地运行噪声信息采集程序,可以作为移动终端实时监测周围噪声。最后阐述了噪声监测终端显著的特点:较低的硬件成本、稳定可靠的系统和可作为移动终端等。其在机场噪声实时监测领域中将会具有很好的应用前景。

[1]周立功.PXA270 & Linux2.6实验教程[M].广州:致远电子有限公司,2007:8-20.

[2]KARIM YAGHMOUR,JON MASTERS.Building Embedded Linux Systems[M].O'Reilly Publisher,2009:38-43.

[3]胡 伟.Android系统架构及其驱动研究[J].广州广播电视大学学报,2010(4):96-101.

[4]Monkey自动化测试:如何用Monkey运行example_script.txt做好自动化测试[EB/OL].[2012-12-20].http://blog.csdn.net/hoozheng/article/details/5964773.

[5]宋小倩,周东升.基于Android平台的应用开发研究[J].软件导刊,2011(2):104-106.

[6]PAUL K.Android on Mobile Devices:An Energy Perspective[C]//Computer andInformation Technology(CIT),2010IEEE 10th International Conference,2010:2421-2426.

猜你喜欢

声卡网卡内核
多内核操作系统综述①
强化『高新』内核 打造农业『硅谷』
活化非遗文化 承启设计内核
部署Linux虚拟机出现的网络故障
微软发布新Edge浏览器预览版下载换装Chrome内核
Server 2016网卡组合模式
挑战Killer网卡Realtek网游专用Dragon网卡
提升笔记本电脑音质
聊天室背景放音乐 为啥我的本本就不行?
USB故障又一原因