智能家居成功接入互联网,实现远程访问

来源:互联网 发布:python re.match 编辑:程序博客网 时间:2024/05/22 07:50

实现基础:采用ok6410开发板,已在其上装载linux内核及文件系统,内核采用nfs方式的文件系统挂载方式,文件系统为静态链接方式,文件系统内已有写好的驱动程序、CGI程序和搭载好的boa服务器。

在做的时候经历了一波三折。刚开始在设定好目标(实现智能家居系统接入外网)的情况下,就开始搜集资料,受http://bbs.21ic.com/icview-92335-1-1.html四楼的启发,开始一步一步进行实现。

因为第一步已经完成,直接迈向第二步,但发现根本就不能在ping通www.biadu.com,提示bad address “www.baidu.com”。后查资料提示让先让ping下百度域名解析后的IP地址:202.108.22.5,看能不能ping通,发现并不能。后发现原因是因为你没有设置好网关(路由器登录地址),找到两种解决方案:第一,使用命令“route add default gw 192.168.1.1”多添加一个网关(192.168.1.1是我路由器的网关,读者可根据自己路由器的实际地址来进行设置)。这种方法可以是可以,但没次开发板只要一重启,就需要重新设置,烦!!于是,找到第二种方案:重新设置开发板启动参数,setenv bootargs noinitrd console=ttySAC0,115200 init=/linuxrc root=/dev/nfs rw nfsroot=192.168.1.199:/home/ARM-part4/part4/rootfs ip=192.168.1.3:192 .168.1.199:192.168.1.1:255 .255.255.0::eth0:off,将原来的错误网关给修正过来,这里修正后是192.168.1.1(其中192.168.1.3是开发板的地址,192.168.1.199是windows上虚拟机内Linux的地址)。ok,到此为止,完成了一小步,实现了对外网的访问,但还是不能访问www.baidu.com。

后又找到方案说,缺少三个文件:hosts、resolv.conf和nsswitch.conf。将上述三个文件直接从PC上的Linux内拷贝到文件系统的/etc/目录下,nsswitch.conf文件不做修改,将resolv.conf文件的内容修改为“nameserver 218.30.19.50”,这里添加的一个地址是西安本地的DNS服务器地址(可以参考你路由器上的DNS地址),再将hosts文件修改为下图所示:
这里写图片描述
,修改之后还是ping不通百度的域名!再找方案!!在这个帖子 http://www.360doc.com/content/13/0219/11/5907545_266512152.shtml 上发现是因为busybox并没有用动态链接库文件的原因造成的,然后就重新配置busybox。进入配置界面选中Busybox Setting->Build Options->后,将配置配置成下图所示:
这里写图片描述
其他地方不做改变,后保存进行编译。
然,新问题又开始出现。提示
这里写图片描述
,这是因为现在开发板上的库为动态链接方式,而开发板在启动的时候需要一些动态链接库文件来对一些文件进行解析,当发现缺少这些文件时就会提示上述错误。解决方案:在PC上的Linux内找到交叉编译器的的安装目录,在目录中找到其lib库,然后将它们全部复制到开发板文件系统的lib目录下。我的安装位置是在/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib/,里面有这些文件(我只罗列出一些,仅供对比参考):
这里写图片描述
然后,重新启动开发板,成功启动。

成功启动后,能ping同域名www.baidu.com了,很高兴。但,这时发现输入一个命令,可能会需要好长时间来响应,并且是不是的蹦出这样的提示:
这里写图片描述
痛苦、伤心!!!然后再次寻找解决方案,有种说法是在启动参数多设置一个选项,proto=tcp,完整的设置为setenv bootargs noinitrd console=ttySAC0,115200 init=/linuxrc root=/dev/nfs rw nfsroot=192.168.1.199:/home/ARM-part4/part4/rootfs,proto=tcp ip=192.168.1.3:192 .168.1.199:192.168.1.1:255 .255.255.0::eth0:off,自己和上面的一个bootarg进行对比。但(又是但!!),问题依旧,于是就改用新的文件系统挂载方式,Initramfs。

后在启动的时候又出现问题:
这里写图片描述
这个提示说我在文件系统的lib/目录下放入的内容太多了,这是发现自己之前就在这个文件下放过一些东西,造成总大小在23MB,删除一些后,成功解决。

然后,成功启动开发板,并且可以流畅的ping通百度的域名。到此为止,完成总设计的第二步。
按照4楼的说法,下一步需要进行端口映射。然后登录路由器,在路由器的虚拟服务里设置映射机制,
这里写图片描述
因为开发板的boa服务器在配置的时候配置的是80端口,IP地址为开发板地址,后保存。但仍然不能实现远程访问,因为我发现路由器的wan口IP地址和电脑用浏览器在百度输入框中输入IP后得到的IP地址并不一样,这就想起来,在学校内的原因,wan口的地址实际上只是学校给局域网内各个设备分配的一个虚拟地址,并非真正的出口地址(即电脑用浏览器在百度输入框中输入IP后得到的IP地址)。再次陷入绝望!!!

抛开绝望,再次找啊找啊,找到了花生壳内网版,他可以实现这种情况下的端口映射。坑爹的是内网版是收费的,不过还好,6RMB(注册送的域名好像1小时之后才会生效)。

注册、登录、买内网版功能,后下载花生壳软件并登录后,选择内网穿透功能,在弹出的网页中添加一个映射,我的映射为:
这里写图片描述
不知为什么,在我选择除网站80端口外的其他选项,都不能实现远程访问,除了这个选项!!(没学过网络,这方面不懂)。添加映射之后得到下面的结果,
这里写图片描述

将上图中的外网访问地址输入到浏览器中,成功实现远程访问!!!