一. 简介
前面两篇文章,一篇文章实现了WIFI联网前要做的工作,另一篇文章配置了WIFI配置文件,进行了WIFI热点的连接。文章如下:
本文在上面两篇文章中工作实现的基础上进行。文学习 WIFI设备从路由器上动态获取ip地址,最后,通过 ping 百度(www.baidu.com)测试WIFI 功能。
二. WIFI驱动移植实验:WIFI从路由器动态获取IP地址与联网
这里在连接成功了 WIFI热点的基础上进行。即在运行了如下命令:
wpa_supplicant -D wext -c /etc/wpa_supplicant.conf -i wlan0 &
串口有打印如下红色框中的连接信息时进行:
1. WIFI设备从路由器动态获取IP地址
设置 wlan0 的 IP 地址,这里使用 udhcpc 命令从路由器申请 IP 地址,输入如下命令:
udhcpc -i wlan0 //从路由器动态获取 IP地址
运行后结果如下:
可以看出,这里路由器已经动态分配到了 ip地址。
输入如下命令查看 wlan0是否已经设置ip地址:
ifconfig wlan0
结果如下:
这里可以看出,无线网卡没有设置ip地址。这里可以看出,从路由器动态获取 ip地址出现了问题。
登录路由器网页查看设备是否动态获取到了一个 ip地址,登录 "tglogin.cn" 网址,一定要确认是否是自己的路由器。这里我的路由器型号为 :
输入管理员密码登录后,查看 "路由设置" -> "DHCP服务器"。可以看到 如下信息:
经过排查,可以确定 匿名主机这个就是我的开发板设备。可以看到分配到了 IP地址,分配到的 IP地址为 192.168.0.102 ,确实与设备串口打印信息显示的 IP地址一样。接下来就是先解决这个问题吧。
三. 解决 udhcpc动态获取 IP地址问题
经过咨询做开发的同学,百度等等,排查到可能就是 udhcpc工具的功能不全。需要一个脚本文件。解决方法如下(来自一个CSDN技术网友):
嵌入式Linux:解决busybox udhcpc获取IP但没有设置系统DNS的问题_busybox dns-CSDN博客
1. 总结
**动态获取ip的方式:**udhcpc 是给路由器服务端发送广播udhcpc包,路由器接收到后,回复可以分配的一个IP地址,然后,udhcpc工具默认会执行一个脚本文件来设置设置设备的ip地址。
2. 具体解决方法
(1) 首先,从 windows系统下重新拷贝一份 busybox-1.29.0 到 ubuntu系统下。解压压缩包文件。解压后进入加压后的 busybox-1.29.0 文件目录下,将 /examples/udhcp/simple.script 文件拷贝到 开发板文件系统 /usr/share/udhcpc/ 目录下。
首先,开发板上电,进入文件系统下,进入 /usr/目录下创建 share/udhcpc/ 目录:
进入 /usr/share目录下创建 udhcpc目录:
最后,(ubuntu系统下)终端进入 busybox-1.29.0文件根目录下,将 /examples/udhcp/simple.script 拷贝到开发板文件系统 /usr/share/udhcpc/ 目录下:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/linux/busybox-1.29.0$ sudo cp ./examples/udhcp/simple.script /home/wangtian/linux/nfs_File/rootfs/usr/share/udhcpc/ -f
(2) 其次,将 开发板上文件系统 /usr/share/udhcpc/目录下的 simple.script 重命名为 default.script:
重新运行 获取 IP地址的命令
重新运行 从路由器 获取 ip地址的命令: "udhcpc -i wlan0":
运行 "ifconfig wlan0" 命令查看无线网卡是否已分配到 IP地址:
可以看出, wlan0已经分配并设置好了 ip地址。
四. 联网测试
可以直接在开发板上使用 wlan0 来 ping 一下百度网站,输入如下命令:
ping -I 192.168.0.102 www.baidu.com
结果如下:
可以看出,WIFI设备已经可以 连接外网,至此,WIFI功能已经调试通过。