NOTE为哪吒 D1 开发板 构建适配的开源鸿蒙系统 后,默认情况下系统不带
dhcp服务,连接网线后无法自动配置 IP 地址,需要手动进行配置,或安装 budybox 后使用其提供的 dhcp 服务。
NOTE可以将网络配置为开机自动启动,具体方法请参考 开源鸿蒙系统配置开机启动程序。
查看网口信息
输入 ifconfig -a 命令查看网口信息。
ifconfig -a输出示例:
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 地址:
ifconfig eth0 x.x.x.x netmask 255.255.255.0 up配置默认网关
使用以下命令配置默认网关,注意将 x.x.x.x 替换为实际的网关地址:
route add default gw x.x.x.x配置 DNS 服务器
编辑 /etc/resolv.conf 文件,添加 DNS 服务器地址:
echo "nameserver 223.5.5.5" > /etc/resolv.conf开放 ping 权限
WARNING默认情况下,系统未开放
ping权限,直接使用ping命令会提示Permission denied错误。
直接使用 ping 会出现错误:
# ping www.baidu.comping: socket SOCK_DGRAM 1: Permission deniedKernel bug workaround (as root):echo 0 9999999 > /proc/sys/net/ipv4/ping_group_range报错提示可用以下命令开放 ping 权限:
echo "0 9999999" > /proc/sys/net/ipv4/ping_group_range测试网络连接
使用 ping 命令测试网络连接:
ping www.baidu.com出现类似输出即表示网络配置成功:
# ping www.baidu.comPing www.baidu.com (183.2.172.17): 56(84) bytes.64 bytes from 183.2.172.17: icmp_seq=1 ttl=0 time=27 ms64 bytes from 183.2.172.17: icmp_seq=2 ttl=0 time=27 ms64 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 lossround-trip min/avg/max = 0/0/26 ms配置动态网络(DHCP)
参考 预编译程序 下载 busybox,并将其放置在 /bin 目录下。
下面两种配置方式选择一种执行。
方式一:临时测试,不修改配置文件
清除静态配置并请求租约
# 设置运行中的主机名hostname d1-nezha
# 清除运行中的默认路由和 IPv4 地址# 没有默认路由时,删除命令报错可以忽略busybox ip route del default dev eth0busybox ip -4 addr flush dev eth0
# 显式启用网卡,避免 Network is downbusybox 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 和局域网参数执行。以下为本次验证值:
busybox ip addr add 192.168.31.103/24 dev eth0busybox 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/shPATH=/bin:/system/binexport 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 ;;esacEOF
chmod +x /usr/share/udhcpc/default.script脚本使用 DHCP 返回的地址、掩码、首个网关和 DNS;未返回掩码时回退为的 255.255.255.0,未返回 DNS 时保留现有 DNS 文件。
启动客户端
确认没有针对 eth0 的其他 DHCP 客户端后执行:
hostname d1-nezhabusybox 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 文件会保留,但上述启动命令本身不会建立开机启动。