1269 字
6 分钟
开源鸿蒙系统配置网络
NOTE

为哪吒 D1 开发板 构建适配的开源鸿蒙系统 后,默认情况下系统不带 dhcp 服务,连接网线后无法自动配置 IP 地址,需要手动进行配置,或安装 budybox 后使用其提供的 dhcp 服务。

NOTE

可以将网络配置为开机自动启动,具体方法请参考 开源鸿蒙系统配置开机启动程序。

查看网口信息#

输入 ifconfig -a 命令查看网口信息。

Terminal window
ifconfig -a

输出示例:

Terminal window
eth0 Link encap:Ethernet HWaddr 56:22:6c:6a:59:9b Driver sunxi-gmac
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 TX bytes:0
Interrupt:62
sit0 Link encap:IPv6-in-IPv4
NOARP MTU:1480 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 TX bytes:0
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope: Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 TX bytes:0

从返回的信息可以看到默认有 eth0 有线网口,下面对其进行配置。

配置静态网络#

配置 IP 地址#

使用以下命令配置 IP 地址,注意将 x.x.x.x 替换为实际的 IP 地址:

Terminal window
ifconfig eth0 x.x.x.x netmask 255.255.255.0 up

配置默认网关#

使用以下命令配置默认网关,注意将 x.x.x.x 替换为实际的网关地址:

Terminal window
route add default gw x.x.x.x

配置 DNS 服务器#

编辑 /etc/resolv.conf 文件,添加 DNS 服务器地址:

Terminal window
echo "nameserver 223.5.5.5" > /etc/resolv.conf

开放 ping 权限#

WARNING

默认情况下,系统未开放 ping 权限,直接使用 ping 命令会提示 Permission denied 错误。

直接使用 ping 会出现错误:

Terminal window
# ping www.baidu.com
ping: socket SOCK_DGRAM 1: Permission denied
Kernel bug workaround (as root):
echo 0 9999999 > /proc/sys/net/ipv4/ping_group_range

报错提示可用以下命令开放 ping 权限:

Terminal window
echo "0 9999999" > /proc/sys/net/ipv4/ping_group_range

测试网络连接#

使用 ping 命令测试网络连接:

Terminal window
ping www.baidu.com

出现类似输出即表示网络配置成功:

Terminal window
# ping www.baidu.com
Ping www.baidu.com (183.2.172.17): 56(84) bytes.
64 bytes from 183.2.172.17: icmp_seq=1 ttl=0 time=27 ms
64 bytes from 183.2.172.17: icmp_seq=2 ttl=0 time=27 ms
64 bytes from 183.2.172.17: icmp_seq=3 ttl=0 time=26 ms
--- 183.2.172.17 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss
round-trip min/avg/max = 0/0/26 ms

配置动态网络(DHCP)#

参考 预编译程序 下载 busybox,并将其放置在 /bin 目录下。

下面两种配置方式选择一种执行。

方式一:临时测试,不修改配置文件#

清除静态配置并请求租约#

Terminal window
# 设置运行中的主机名
hostname d1-nezha
# 清除运行中的默认路由和 IPv4 地址
# 没有默认路由时,删除命令报错可以忽略
busybox ip route del default dev eth0
busybox ip -4 addr flush dev eth0
# 显式启用网卡,避免 Network is down
busybox ip link set dev eth0 up
# 请求地址,并向 DHCP 服务器上报设备名称
busybox udhcpc -i eth0 -f -n -q -t 4 -T 3 -v \
-s /bin/true -x hostname:d1-nezha

成功输出类似:

udhcpc: lease of 192.168.31.103 obtained from 192.168.31.1, lease time 43200

手动应用取得的地址#

-s /bin/true 禁用了 DHCP 配置脚本,因此上一步不会自动设置 IP、路由或 DNS。按照实际租约 IP 和局域网参数执行。以下为本次验证值:

Terminal window
busybox ip addr add 192.168.31.103/24 dev eth0
busybox ip route add default via 192.168.31.1 dev eth0

其中 /24 和网关沿用原局域网配置;不是从上述租约日志中读取的 DHCP 选项。其他网络需要确认实际掩码和网关。

此方式取得租约后退出,不自动续租;需要在租期到期前重新获取租约。主机名、地址和路由均为运行时设置,重启后会重新执行原来的开机配置。

方式二:允许修改文件,自动应用 DHCP 参数并续租#

原系统 /usr/share/udhcpc/default.script 不存在,该脚本在取得租约后会更新 /etc/resolv.conf。

创建 DHCP 配置脚本#

mkdir -p /usr/share/udhcpc
cat > /usr/share/udhcpc/default.script <<'EOF'
#!/bin/sh
PATH=/bin:/system/bin
export PATH
case "$1" in
deconfig)
busybox ip route del default dev "$interface" 2>/dev/null
busybox ip -4 addr flush dev "$interface"
busybox ip link set dev "$interface" up
;;
bound|renew)
busybox ip route del default dev "$interface" 2>/dev/null
busybox ip -4 addr flush dev "$interface"
busybox ifconfig "$interface" "$ip" \
netmask "${subnet:-255.255.255.0}" up || exit 1
for gateway in $router; do
busybox ip route add default via "$gateway" dev "$interface"
break
done
if [ -n "$dns" ]; then
{
for server in $dns; do
printf 'nameserver %s\n' "$server"
done
} > /etc/resolv.conf
fi
;;
esac
EOF
chmod +x /usr/share/udhcpc/default.script

脚本使用 DHCP 返回的地址、掩码、首个网关和 DNS;未返回掩码时回退为的 255.255.255.0,未返回 DNS 时保留现有 DNS 文件。

启动客户端#

确认没有针对 eth0 的其他 DHCP 客户端后执行:

Terminal window
hostname d1-nezha
busybox ip link set dev eth0 up
busybox udhcpc -b -i eth0 \
-s /usr/share/udhcpc/default.script \
-x hostname:d1-nezha

这里不使用 -q,客户端会保持运行并自动续租。-b 表示初次未获得租约时转入后台继续尝试;命令返回并不一定代表已成功获取地址,需要检查实际配置。

排查时可将 -b 换成 -f -v,在前台观察日志。前台进程被停止后也会停止自动续租,不要同时启动两份客户端。

此方式的配置脚本和 DNS 文件会保留,但上述启动命令本身不会建立开机启动。


参考#

  1. 【OH 干货】给 OpenHarmony 开发板配置网络
开源鸿蒙系统配置网络
https://blog.wely.fun/posts/开源鸿蒙系统配置网络/
作者
Wely
发布于
2025-09-30
许可协议
CC BY-NC-SA 4.0