Android平台双以太网接口设计与实现
2017-09-09张建民高大利
张建民+高大利
摘 要:随着嵌入式技术的飞速发展,移动设备融合了PC的以太网等功能。介绍了有线通信终端的软硬件平台,使用USB2.0 HUB和USB转以太网芯片,在嵌入式硬件平台上设计了双以太网接口,然后使用Eclipse集成开发工具,采用Java语言编程实现了双以太网IP地址设置软件,并通过功能测试验证了双以太网的接口功能。该方法能够较好地解决嵌入式硬件平台多以太网接口的设计问题,而且为Android平台多以太网接口的IP地址设置提供了有效的扩展方法。
关键词:Android;双以太网;接口设计;地址设置
DOIDOI:10.11907/rjdk.172175
中图分类号:TP319
文献标识码:A 文章编号文章编号:1672-7800(2017)008-0097-03
0 引言
Android是一种基于Linux的开源操作系统[1],由Google公司开发。Android系统主要应用于移动设备,如智能手机和平板电脑等。随着嵌入式技术的飞速发展,移动设备融合了PC的诸多特性[2-4],如支持以太网等功能。由于原生的Android系统不支持以太网等功能,这就要求对Android系统进行定制开发,以实现特定功能。
对安全保密性要求较高的行业,大多采用以太网接口进行有线通信。本文以有线通信终端为例,介绍了有线通信终端的软硬件平台,在嵌入式硬件平台上设计了双以太网接口,并在Ubuntu12.04宿主机上,使用Eclipse集成开发工具,采用Java语言编程实现了双以太网IP地址设置软件。
1 有线通信终端软硬件平台
1.1 有线通信终端硬件平台
有线通信终端硬件平台由三星Exynos 4412四核ARM处理器、1GB DDR3内存、4GB eMMC闪存、USB/OTG、液晶屏、触摸屏、摄像头、电源管理芯片、音频芯片等部分组成。USB2.0 HUB芯片USB3503通过HSIC总线与Exynos 4412处理器相连,可扩展3个USB2.0接口,通过扩展的USB2.0接口连接2个USB转以太网芯片DM9621,可对外提供2个10/100M自适应的以太网接口。有线通信终端的硬件平台如图1所示。
1.2 有线通信终端软件平台
有线通信终端软件平台采用Android4.4系统,由Linux 内核、Android运行时和库、应用程序框架、应用程序4个层次组成[5-7]。Linux内核包括显示驱动、摄像头驱动、触摸屏驱动、音频驱动、USB驱动、电源管理等;Android运行时和库包括界面管理器、媒体框架、SQLite、WebKit、libc、核心库、Dalvik虚拟机等;应用程序框架包括活动管理器、窗口管理器、内容提供者、通知管理器、位置管理器等;应用程序包括主程序、联系人、电话、浏览器、小部件等。有线通信终端软件平台如图2所示。
有线通信终端的Linux内核中,已适配了USB2.0 HUB芯片USB3503与USB转以太网芯片DM9621的驱动,在Linux shell环境下通过ifconfig命令可对以太网接口的IP地址进行设置,使用ping命令可测试双以太网接口功能是否正常。但对于大部分终端使用者而言,不会使用命令来设置以太网接口的IP地址。因此,通过友好的界面设置以太网接口IP地址是十分必要的。
Android平台双以太网IP地址设置软件的设计思路是:①界面设计采用Windows平台以太网设置的传统风格,为用户提供直观友好的操作界面;②将用户界面中的设置参数自动转化成命令脚本来设置以太网接口IP地址;③对于多个以太网接口,只需增加标签选项卡,复用代码即可实现多个以太网接口IP地址设置软件的开发,具有较好的扩展性。
该软件在Ubuntu12.04的宿主机上进行开发,需要安装Java 语言软件开发工具包(Java Development Kit,JDK的版本为1.6)、Android SDK(Software Development Kit)以及Eclipse ADT插件和编译环境所需的软件包。JDK是Java的核心,包含了Java运行环境(Java Runtime Environment)、Java工具和Java類库。Android SDK提供了使用Java 语言开发 Android 应用程序的 API接口和工具,以便开发者便捷地开发应用程序。Eclipse 是一个开放源代码的、基于Java的可扩展开发平台,可以通过在Eclipse中添加ADT(Android Development Tools,安卓开发工具)来搭建安卓应用程序开发和调试环境。
2 Android平台双以太网IP地址设置软件实现
Android平台双以太网IP地址设置软件采用Java语言编程实现,该软件由以太网接口电源控制、静态IP地址设置、自动获取IP地址等部分组成。每部分的设计与实现简述如下:
2.1 以太网接口电源控制
以太网接口供电通过Exynos 4412处理器的GPIO进行控制,若以太网接口供电未打开,以太网IP地址设置软件会提示“请先开启以太网!”。单击“开启”按钮后,Exynos 4412处理器的控电GPIO输出高电平,连通供电开关,给以太网接口供电;以太网接口供电打开后,“开启”按钮的标题变为“关闭”,单击“关闭”按钮后,Exynos 4412处理器的控电GPIO输出低电平,切断以太网接口的供电;单击“以太网1”、“以太网2”标签选项卡可对两个以太网接口进行设置,以太网接口电源控制界面如图3所示。
2.2 静态IP地址设置
以太网接口供电打开后,单击“以太网1”或“以太网2” 标签选项卡选择不同的以太网接口,单击“使用下面的IP地址”单选按钮可对以太网接口的静态IP地址进行设置,例如:可将以太网2的IP地址设置为:192.168.0.20,子网掩码:255.255.255.0,默认网关:192.168.0.1,DNS1地址:101.226.4.6,DNS2地址:218.85.152.99。静态IP地址设置界面如图4所示。endprint
静态IP地址设置的实现步骤如下:
(1)静态IP地址设置界面由标签选项卡、单选按钮、文本框、标签和按钮组成,单击“使用下面的IP地址”单选按钮,在文本框中输入静态IP地址的相关参数。
(2)单击“保存”按钮后,用户界面中的设置参数被自动转化为命令脚本,保存在/sdcard/ethset.sh文件中,主要代码如下:
static public String sh_title="#! /system/bin/sh";
static public void ethstaticip(Context i_context,int i_ethtype,String i_addr,String netmask,String i_gw,String i_dns1,String i_dns2)
{ String sendmsg=sh_title+"\\n"
+"busybox ifconfig "+getethstr(i_ethtype)+" "+i_addr+" netmask "+i_netmask+" up \\n"
+"busybox route add default gw "+i_gw+" "+getethstr(i_ethtype)+"\\n"
+"setprop net.dns1 "+i_dns1+"\\n"
+"setprop net.dns2 "+i_dns2+"\\n";
writefile(i_context,sendmsg);
}
以上代码用于生成命令脚本,/sdcard/ethset.sh示例文件内容如下:
#! /system/bin/sh
busybox ifconfig eth1 192.168.0.20 netmask 255.255.255.0 up
busybox route add default gw 192.168.0.1 eth1
setprop net.dns1 101.226.4.6
setprop net.dns2 218.85.152.99
(3)执行/sdcard/ethset.sh命令脚本文件,设置指定以太网接口的静态IP地址、子网掩码、默认网关、DNS1、DNS2,主要代码如下:
public class CommandExecution {
public static final String TAG = "CommandExecution";
public static CommandResult execCommand(String command, boolean isRoot) {
String[] commands = {command};
return execCommand(commands, isRoot); }
}
CommandExecution.execCommand(“/sdcard/ethset.sh”, true)
以上代碼用于执行/sdcard/ethset.sh命令脚本,并设置以太网接口的静态IP地址。
2.3 IP地址自动获取
以太网接口供电打开后,单击“以太网1”或“以太网2”标签选项卡,选择不同的以太网接口,单击“自动获取IP地址”单选按钮可从DHCP服务器获取IP 地址等参数。例如,以太网1设置为“自动获取IP 地址”方式,从DHCP服务器获取IP地址等参数。自动获取IP 地址界面如图5所示。
自动获取IP 地址的实现步骤如下:
(1)自动获取IP 地址界面由标签选项卡、单选按钮和按钮组成,点击“自动获取IP 地址”单选按钮。
(2)单击“保存”按钮后,设置参数被自动转化为命令脚本,保存在/sdcard/ethset.sh文件中,主要代码如下:
static public String sh_title="#! /system/bin/sh";
static public void ethauto(Context i_context,int i_ethtype)
{
String sendmsg=sh_title+"\\n"
+"netcfg "+getethstr(i_ethtype)+" up dhcp \\n"; writefile(i_context,sendmsg);
}
以上代码用于生成命令脚本,/sdcard/ethset.sh示例文件内容如下:
#! /system/bin/sh
netcfg eth0 up dhcp
(3)执行/sdcard/ethset.sh命令脚本文件,从DHCP服务器获取IP地址等参数,主要代码同静态IP地址设置的代码相同。
3 功能测试
将有线通信终端和宿主机通过RJ45双绞线接入路由器,用USB调试线连接有线通信终端和宿主机。在宿主机上通过adb程序将编译好的以太网IP地址设置软件安装到有线通信终端,运行程序后,设置有线通信终端以太网1、以太网2和宿主机的静态IP地址,使它们在同一个网段。以太网1的IP地址为192.168.0.10,以太网2的IP地址为192.168.0.20,宿主机的IP地址为192.168.0.1,子网掩码均为255.255.255.0。在宿主机上通过ping命令进行测试,宿主机和有线通信终端以太网1、以太网2之间均能相互通信,无丢包现象。endprint
将有线通信终端以太网1、以太网2和宿主机均设置为“自动获取IP地址”方式,从路由器自动获取IP地址,在Linux shell环境下通过ifconfig命令可查看到以太网1的IP地址为192.168.0.116,以太网2的IP地址为192.168.0.113,宿主机的IP地址为192.168.0.112,子网掩码均为255.255.255.0。在宿主机上通过ping命令进行测试,宿主机和有线通信终端以太网1、以太网2之间均能相互通信,无丢包现象。
4 结语
本文对有线通信终端的软硬件平台进行了介绍,在三星Exynos 4412硬件平台上采用USB2.0 HUB芯片USB3503扩展了USB2.0接口,通过USB转以太網芯片DM9621实现了以太网功能,并在Android4.4平台上采用Java语言编程实现了双以太网IP地址设置软件。经过大量测试,采用静态IP地址或自动获取IP地址方式,宿主机和有线通信终端以太网1、以太网2之间均能相互通信,无丢包现象。
本文采用的方法简单易行、高效快速,能够较好地解决嵌入式硬件平台多以太网接口的设计问题,为Android平台多以太网接口的IP地址设置提供了有效的扩展方法。在以后的工作中,可根据实际需要设计两个以上的以太网接口,并进一步测试多以太网接口的可靠性和稳定性。
参考文献:
[1] 文波,周渊平.基于Android的MT8880芯片的设计与实现[J].微型机与应用,2016,35(21): 88-92.
[2] 杜奇才,邓诚刚,刘荧,等.基于Android平台的VoIP设计实现[J].微处理机,2017(2):41-45.
[3] 王烨.多媒体技术环境下嵌入式网络视频监控系统研究[J].计算机测量与控制,2017, 25(4): 91-95.
[4] 阎旭鹏.嵌入式计算机技术及其应用的探讨[J].信息与电脑:理论版,2016(17): 73-74.
[5] 陆少鹏,周渊平.基于Android的通讯录实时同步功能[J].计算机系统应用,2017(5): 257-261.
[6] 程传旭,关娜.基于安卓系统的船联网信息终端的设计[J]. 舰船科学技术,2017,39(10): 146-148.
[7] 申鸿烨,于维海. Android网络学习平台安全架构的相关研究[J]. 网络安全技术与应用,2017(5): 114-115.endprint