WIFI驱动移植实验:WIFI从路由器动态获取IP地址与联网

一. 简介

前面两篇文章,一篇文章实现了WIFI联网前要做的工作,另一篇文章配置了WIFI配置文件,进行了WIFI热点的连接。文章如下:

WIFI驱动移植实验:WIFI 联网前的工作-CSDN博客

WIFI驱动移植实验:连接WIFI热点-CSDN博客

本文在上面两篇文章中工作实现的基础上进行。文学习 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功能已经调试通过。

相关推荐
Kaede62 小时前
如何应对Linux云服务器磁盘空间不足的情况
linux·运维·服务器
apocelipes8 小时前
Linux c 运行时获取动态库所在路径
linux·c语言·linux编程
DevSecOps选型指南8 小时前
2025软件供应链安全最佳实践︱证券DevSecOps下供应链与开源治理实践
网络·安全·web安全·开源·代码审计·软件供应链安全
努力学习的小廉9 小时前
深入了解linux系统—— 进程池
linux·运维·服务器
秃头菜狗9 小时前
各个主要目录的功能 / Linux 常见指令
linux·运维·服务器
2301_793102499 小时前
Linux——MySql数据库
linux·数据库
国科安芯9 小时前
抗辐照MCU在卫星载荷电机控制器中的实践探索
网络·嵌入式硬件·硬件工程·智能硬件·空间计算
jiunian_cn10 小时前
【Linux】centos软件安装
linux·运维·centos
程序员JerrySUN10 小时前
[特殊字符] 深入理解 Linux 内核进程管理:架构、核心函数与调度机制
java·linux·架构
孤寂大仙v10 小时前
【计算机网络】非阻塞IO——select实现多路转接
linux·计算机网络