如何给开发板连上网(以th1520为例)


本人接触了很多开发板,从Zynq系列到th1520,当使用这类含操作系统的开发板时,通常会希望连接网络,然后使用apt之类的工具安装软件,不然的话还需要在主机搭建交叉编译环境,很麻烦。

但是很多人对计算机网络不熟,更不用说如何在Linux下操作网络了,若是有图形界面还好,能用鼠标操作,但对于命令行操作,光为了联网都能鼓捣半天,效率很低。这里记录一下面对th1520这款开发板的联网过程。

IP地址这种基础的网络知识这里不涉及,仅涉及具体实操。

有线网络

开发板通常都有以太网口,RJ-45水晶头插入网口,则完成了联网的前期准备。

对于PYNQ这类比较完善的系统,这时候其实就已经可以上网了,但可惜大多数开发板还做不到这么完善。

确保上网有三点:拥有正确的IP地址/广播地址/子网掩码、拥有正确的DNS服务器地址、拥有正确的路由表

IP地址/广播地址/子网掩码

设置IP地址有临时方法和永久方法。

临时方法

ifconfig [网卡名] [IP地址]
# 例如:ifconfig eth0 192.168.100.164
# 一般只输入IP地址,就会自动识别子网掩码和广播地址,广播地址通常是在该子网内IP最大的地址。但是如果识别# 不对,也可以手动指定
# 例如:ifconfig eth0 192.168.1.56 netmask 255.255.255.0 broadcast 192.168.1.255
# 该命令的更多用法可参考:https://www.runoob.com/linux/linux-comm-ifconfig.html

设置成功后,之间输入ifconfig查看网卡情况,则对应的网卡会多出一行inet addr:xxxx Bcast:xxx Mask:xxx。如果显示了,则说明设置成功了。

查看网卡情况除了ifconfig,还可以用ip addr show。该命令可以显示ifconfig不显示的信息,如

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: sit0@NONE: <NOARP> mtu 1480 qdisc noop qlen 1000
    link/sit 0.0.0.0 brd 0.0.0.0
3: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq qlen 1000
    link/ether 48:da:35:60:11:f2 brd ff:ff:ff:ff:ff:ff
4: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq qlen 1000
    link/ether 48:da:35:60:11:f3 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::4ada:35ff:fe60:11f3/64 scope link
       valid_lft forever preferred_lft forever
5: wlan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq qlen 1000
    link/ether 2c:05:47:e7:dc:93 brd ff:ff:ff:ff:ff:ff
6: p2p0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000
    link/ether 2e:05:47:e7:dc:93 brd ff:ff:ff:ff:ff:ff

eth0 后显示了NO-CARRIER,说明该网卡无物理连接,即没有插网线,而eth1没有此标志,说明有物理连接。这一点在ifconfig是没有的,不过ifconfig可以通过查看是否有RUNNING来判断网卡是否在正常工作。也可以用ethtool [网卡名]来查看网卡状态

同样的,当成功设置ip之后,ip addr show也会多出inet一行,如

4: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq qlen 1000
    link/ether 48:da:35:60:11:f3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.164/24 brd 192.168.100.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::4ada:35ff:fe60:11f3/64 scope link
       valid_lft forever preferred_lft forever

永久方法

永久更改默认静态IP则复杂一些,这涉及到修改配置文件,而不同网络管理工具的配置文件又各不相同,Linux系统的网络管理工具有Netplan, systemd-networkd, Network Manager等,甚至有的开发板以上都不使用,而是使用更为传统的ifupdown,这种方式主要靠修改/etc/network/interfaces来管理。

  1. 首先要判断开发板使用什么网络管理工具,可以先尝试systemctl status NetworkManagersystemctl status systemd-networkd,看看哪个active,则可判断是Network Manager或systemd-networkd。

  2. 判断是不是传统的ifupdown,则是看是否存在/etc/network/interfaces文件,以及查看是否存在ifupdown的deb包,命令是dpkg -s ifupdown

  3. 对于netplan,可以尝试systemctl list-units --type=service --all | grep netplan,若有输出,则是netplan。该方式也可以用来判断NetworkManager或systemd-networkd。

th1520使用systemd-networkd,因此后文主要关注systemd-networkd。

首先需要找到网卡对应的配置文件,一般位于/etc/systemd/network/或/lib/systemd/network/,具体路径可以通过systemctl status systemd-networkd查看,如下图eth1: Configuring with /lib/systemd/network/80-wired.network这种文字表明了读取网卡配置的具体位置。

● systemd-networkd.service - Network Configuration
     Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled; preset: enabled)
     Active: active (running) since Mon 2022-08-08 17:10:02 CST; 1 year 8 months ago
TriggeredBy: ● systemd-networkd.socket
       Docs: man:systemd-networkd.service(8)
   Main PID: 204 (systemd-network)
     Status: "Processing requests..."
     CGroup: /system.slice/systemd-networkd.service
             └─204 /lib/systemd/systemd-networkd

Aug 08 17:10:02 light-lpi4a systemd-networkd[204]: Enumeration completed
Aug 08 17:10:02 light-lpi4a systemd[1]: Started Network Configuration.
Apr 10 11:41:39 light-lpi4a systemd-networkd[204]: eth1: Configuring with /lib/systemd/network/80-wired.network.
Apr 10 11:41:39 light-lpi4a systemd-networkd[204]: eth1: Link UP
Apr 10 11:41:39 light-lpi4a systemd-networkd[204]: eth0: Configuring with /lib/systemd/network/80-wired.network.
Apr 10 11:41:39 light-lpi4a systemd-networkd[204]: wlan0: Configuring with /lib/systemd/network/80-wifi-station.network.
Apr 10 11:41:40 light-lpi4a systemd-networkd[204]: eth0: Link UP
Apr 10 11:41:40 light-lpi4a systemd-networkd[204]: wlan0: Link UP
Apr 10 11:41:43 light-lpi4a systemd-networkd[204]: eth1: Gained carrier
Apr 10 11:41:45 light-lpi4a systemd-networkd[204]: eth1: Gained IPv6LL

在 systemd 中,网络配置文件可以分别存储在两个位置:

  1. /etc/systemd/network/:这是用户配置目录,用于存放管理员自定义的网络配置文件。对这个目录下的文件所做的修改会直接影响系统的网络设置,且这些更改不会在系统更新时被覆盖。
  2. /lib/systemd/network/:这是系统预设的配置目录,包含由系统或发行版维护者提供的默认网络配置文件。这些文件通常用于提供基础的网络配置,作为用户自定义配置的起点或备份。当 /etc/systemd/network/ 目录下没有对应的自定义配置时,systemd-networkd 会回退到使用 /lib/systemd/network/ 下的默认配置
    因此,如果自己修改,推荐/etc/systemd/network/目录下新建一个文件或者编辑一个已有的文件。
[Match]
Type=ether
Name=!veth*
KernelCommandLine=!nfsroot
KernelCommandLine=!ip

[Network]
Address=192.168.100.163/24
Gateway=192.168.100.1
DNS=192.168.100.1

Type=ether表示使用所有以太网,Name=!veth*表示除去veth*之外的网卡。后两行则意味着当内核启动参数不含nfsroot和ip时生效。

下一段实际上一次性设置了IP地址、网关和DNS服务器地址,这一步完成后reboot,如果能成功上网了,则不再需要看本章后半部分内容了。同样,完成后通过systemctl status systemd-networkd查看是否读取了该配置文件。

DNS服务器地址

调试某域名是否能被DNS服务器解析,是通过nslookup命令,使用方式是nslookup HOST [DNS_SERVER]

nslookup www.baidu.com 192.168.100.1
nslookup www.baidu.com

systemd-resolved 是 systemd 中负责域名解析的服务,它可以与 systemd-networkd 协同工作。systemd-resolved 有自己的配置文件 /etc/systemd/resolved.conf,其中也可以定义全局的DNS服务器和搜索域。不过,通常情况下,systemd-networkd 通过 [Network] 部分的 DNS= 和 Domains= 参数设置的DNS配置会覆盖 systemd-resolved 的全局配置,以适应特定网络接口的需求。

因此除了上节指定的方法外,还可以在/etc/systemd/resolved.conf添加DNS=192.168.100.1这一行来实现定义DNS服务器。

/etc/systemd/resolved.conf与/etc/resolv.conf的关系

systemd-resolved 管理下的系统:
在使用 systemd-resolved 的系统中(如许多现代的基于 systemd 的Linux发行版),/etc/resolv.conf 通常会被 systemd-resolved 服务接管。systemd-resolved 会根据自身的配置(包括 /etc/systemd/resolved.conf 和来自 systemd-networkd 的接口特定配置)生成一个合适的 resolv.conf 内容,并将其写入 /run/systemd/resolve/resolv.conf 或 /var/run/systemd/resolve/resolv.conf(具体路径可能因系统而异)。同时,systemd-resolved 会创建一个符号链接,将 /etc/resolv.conf 指向这个运行时生成的文件,确保应用程序仍通过标准位置访问DNS配置。
因此,在这种情况下,如果需要修改DNS设置,应编辑 /etc/systemd/resolved.conf 或相关网络接口的 .network 配置文件,而不是直接修改 /etc/resolv.conf,因为后者会被 systemd-resolved 自动管理并覆盖。
未使用 systemd-resolved 的系统:
在不使用 systemd-resolved 的系统(如一些旧版系统或未集成 systemd 的发行版),/etc/resolv.conf 直接由网络管理工具(如 dhclient、NetworkManager 或手动编辑)维护。在这种情况下,编辑 /etc/resolv.conf 即可直接更改DNS设置。

路由表

路由表决定了网关在哪里,即当请求了一个IP地址时,开发板需要知道往哪个IP去发。

通过route命令来查看路由表

使用方式: Linux 路由表详解及 route 命令详解_use iface br-b548282d0156-CSDN博客

添加网关的方式是添加默认路由,如下所示
route add default gw 192.168.100.1 eth1

route输出如下时成功:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         _gateway        0.0.0.0         UG    0      0        0 eth1

无线网络

TH1520开发板的无线网络使用wpa_supplicant工具来管理,该工具是个开源项目,已经被移植到Linux,Windows以及很多嵌入式系统上。它是WPA的应用层认证客户端,负责完成认证相关的登录、加密等工作。基本介绍:工具使用篇:wpa_supplicant和wireless-tool - 知乎 (zhihu.com)

通过以下命令来实现扫描WiFi

wpa_cli scan
wpa_cli scan_results

开发板通常时间日期不太准,导致apt使用的时候容易遇到invalid问题。因此在连上网之后,可以通过请求NTP服务器校准时间,如下所示:

ntpdate ntp1.aliyun.com

服务器列表 - 全球可用的NTP服务器列表与解析服务 - ntp.org.cn & ntpdate.net有更多NTP服务器列表。

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值