📌 核心逻辑与避坑原理
Buildroot 系统采用经典的 SYSV init 启动机制(即 /etc/init.d/Sxx 脚本按数字顺序从小到大执行)。
/etc/init.d/S40network会优先执行,尝试去读取/etc/network/interfaces或直接通过ifconfig设好静态 IP。- 随后执行的
/etc/init.d/S45connman(ConnMan 服务)会强制接管网卡。如果未插网线或未连上 DHCP,它会自作聪明地把 IP 改为 Link-Local 地址(169.254.x.x),导致之前的配置失效。
因此,最简单、彻底的配置方案是:废除 ConnMan 服务,直接将控制权交还给底层的网络脚本。
🛠️ 两步配置固定 IP 法(最推荐、最稳妥)
第一步:关闭并废除 ConnMan 服务
在开发板终端执行以下命令,剥夺 S45connman 脚本的执行权限并对其重命名,防止其开机自启截胡:
Bash
1 | chmod -x /etc/init.d/S45connman |
第二步:正确配置 /etc/network/interfaces
BusyBox/Debian 移植版的 ifupdown 工具对语法要求极高。请确保你的 /etc/network/interfaces 严格按照以下格式编写(注意:iface 等配置行前面的缩进必须是标准的 4 个空格或 1 个 Tab,且前面不能有任何杂质):
Plaintext
1 | # 本地环回网络 |
⚠️ 原子固件避坑:如果文件里原本有
allow-hotplug eth0,请直接删掉或注释掉,只保留auto eth0。因为在某些嵌入式固件上,热插拔检测会导致开机时ifup误判网线状态而跳过静态 IP 初始化。
第三步:配置静态 DNS(可选,确保外网畅通)
由于不再通过 DHCP 自动获取域名解析服务器,必须手动配置 DNS。
- 打开配置文件:
Bash1
vi /etc/resolv.conf
- 写入主流的公共 DNS 地址:
Plaintext1
2nameserver 114.114.114.114
nameserver 8.8.8.8
🔄 验证与生效
完成上述三步后,直接重启开发板:
Bash
1 | reboot |
开机后,通过以下命令验证网络状态:
- 检查 IP:输入
ifconfig eth0,看inet addr是否精准锁定为192.168.66.66。 - 检查外网:输入
ping 8.8.8.8或ping baidu.com,确认网络和 DNS 解析完全正常。