Yocto配置静态IP后仍获取DHCP地址的问题排查
Yocto Dunfell静态IP配置后网卡同时出现DHCP IP的解决方法
问题场景
将Yocto Dunfell版本的层更新至最新后,通过connmanctl配置静态IP并重启设备,网卡eth0同时关联DHCP分配的IP(10.78.113.57)和手动设置的静态IP(10.78.113.71)。临时删除DHCP IP后重启问题复现,系统无/etc/network/interfaces文件,Connman界面显示静态IP配置正确,但ifconfig默认显示DHCP IP。
排查与解决步骤
1. 检查是否存在其他DHCP客户端进程
系统中可能同时运行了其他DHCP客户端(如dhclient、dhcpcd),导致自动获取IP:
# 查找DHCP相关进程 ps aux | grep dhcp
如果找到对应进程,停止并禁用其服务:
# 以dhclient为例 systemctl stop dhclient@eth0.service systemctl disable dhclient@eth0.service
2. 验证Connman配置正确性
确认Connman的网卡配置文件是否正确保存,且未被覆盖:
- 进入Connman配置目录:
cd /var/lib/connman/ - 找到对应网卡的配置文件(命名格式为
eth_<mac_address>_cable.config),检查内容:
确保**没有[service_eth_<mac_address>_cable] Type = ethernet IPv4.method = manual IPv4.netmask = 255.255.252.0 IPv4.gateway = 10.78.112.1 IPv4.local_address = 10.78.113.71IPv4.method=dhcp**的配置项,若有冲突则手动修改,然后重启Connman:systemctl restart connman
3. 检查systemd-networkd是否干扰网络配置
Yocto Dunfell更新后可能默认启用systemd-networkd,若其配置了DHCP会导致冲突:
# 查看systemd-networkd状态 systemctl status systemd-networkd
若服务处于运行状态,检查/etc/systemd/network/下的.network配置文件:
- 找到针对
eth0的配置文件,修改[Network]段的DHCP设置:[Network] DHCP=no - 重启服务并禁用开机启动(若不需要该服务):
systemctl restart systemd-networkd systemctl disable systemd-networkd
4. 确保Connman为唯一网络管理器
检查Yocto构建配置(local.conf或层配方),确认未引入其他网络管理包(如network-manager、dhcpcd),仅保留connman作为网络管理组件。若有多余包,从构建配置中移除后重新编译镜像。
5. 重新确认Connman配置
执行以下命令重新配置并验证静态IP状态:
# 重新配置静态IP connmanctl config eth_<mac_address>_cable --ipv4 manual 10.78.113.71 255.255.252.0 10.78.112.1 # 查看服务状态,确认IPv4.method为manual connmanctl services
内容的提问来源于stack exchange,提问作者Jeanot Zubler
相关产品推荐
相关产品推荐

