嵌入式设计应用
摘要:文章描述了编写的基于 OpenWrt 的开放式路由动态帐号密码管理的应用设计,详细讲述了设计的用途、应用结构及功能。
整个硬件系统主要分成两部分,普通路由器硬件和基于单片机的人际交换系统。为了降低开发的难度,路由器硬件部分我们直接用现有的路由器进行改造,主要有两方面的改造:提升硬件性能,加大内存和,存储芯片容量,使路由器能够运行我们要是使用的OpenWRT系统;引出通信接口,与人机交换系统通信,通信接口采用TTL电平的串行异步通信接口。人机交换系统采用宏晶公司的51单片机作为主控,负责驱动LCD显示屏、输入按钮和微型打印机,并使用与路由器通信。
适当选用路由器硬件可以有效地简化整个系统的设计难度,为了降低应用开发的难度,可以直接使用以能够运行OpenWRT系统为卖点的路由器的硬件,这样可以避免系统移植带来的麻烦,直接进入应用开发。如果需要使用自己做的硬件时,系统移植无法避免,但是软件和硬件可以同步开发,减少开发周期。
整个应用系统运行在一个嵌入式Linux系统OpenWRT上,实现的功能是wifi无密码可直接连接,但是要上网必须先经过网页认证,否则不过浏览什么网站都被定向到认证页面,和CMCC的热点类似,但整个系统在一个普通路由器上实现。认证系统主要分成三部分,分别为web服务、网络控制和账户管理。整个应用结构上以账户管理为中心,提供接口与web服务器交换用户数据,根据用户信息操作网络控制系统,并与人机交换系统连接,提供后台用户管理操作。
由于整个系统集成在一个路由器上,硬件资源相对紧缺,搭建普通web服务器占用资源较多,综合考虑,我们在OpenWRT默认的web配置界面系统的基础上创建用于认证的网页和相关的数据交换接口。OpenWRT默认的界面是采用LuCi,整个web服务器由uhttpd和LcCi组成。uhttpd是简化版的web服务器端软件,专用于嵌入式系统;LuCi由lua语言编写,集成OpenWRT系统配置工具,与shell和C语言程序交换非常容易,可调用C语言写的库,执行效率很高,非常适用于嵌入式系统。
要在这个系统上建立用于认证的web服务,利用uhttpd建立多个网站,一个是路由器配置用的,已经可用的,还要使用不同的端口再建立一个。我们可以通过配置uhttpd增加监听端口,端口选择不能与ssh等服务专用的端口冲突,我们用了8086端口,这个端口对应的网站用于处理被网络控制部分重定向这里的访问请求,同时承担与用户终端交换认证数据。我们新建的网站也是使用LuCi,与用于配置的网站共用大部分代码以节省资源。
网路控制部分使用IPtable来控制网络,通过IPtable实现对数据包进行拦截、丢弃和重定向这几个重要网络控制功能。网络控制部分的所有网络操作都是基于上述几个基本功能进行的。
网络控制部分初始化时,拦截所有要访问网外的内网IP数据包,即源地址是内网IP,目的地址是外网IP的数据包,并把拦截到的数据包重定向到web服务器监听的8086端口。浏览器或者其他应用访问网站一般是通过域名来访问的,访问的过程是通过DNS服务器解析域名,解析成功后获得网站真正的地址才能访问到网站,当解析域名失败时,部分浏览器会认为IP网络有故障,停止访问。为了让浏览器能够解析域名,需要放行DNS数据包。DNS是使用UDP协议的,端口为53,所以初始化时需要放行53端口的UDP协议数据包。初始化完后还要提供两个操作接口,允许指定IP访问外网和拦截指定IP。
账户管理是整个应用的中心,负责用户的数据管理,通过web服务器与用户终端交换数据,通过人机交换系统与后台管理交换用户信息,根据用户状态调用网络控制部分提供的接口,实现对用户上网的控制。
增加账户通过人机交换系统实现,人机交换只有一个按键和一个LCD显示屏,按一下按键实现新建用户,并把用户名和密码嵌入到登录页面的URL的参数中,再把URL转换为二维码输出到LCD显示屏,用户连接wifi后扫描二维码即可实现认证上网。
账户删除由系统自动完成,每新建一个账户,系统都会给账户在线时间和一个有效时间,一天内不使用,账户自动清除,账户在线时间到了,关闭当前用户的上网权限并清除账户。
全部0条评论
快来发表一下你的评论吧 !