基于Lemon ZYNQ的PYNQ上手笔记 章节二 PYNQ系统的启动及网络的配置

第一章我们已经实现了TF卡的下载和镜像烧录,本节将对TF中的操作系统进行启动进行验证及对两种进行配置。

除了本文的内容外,我们也可以参考PYNQ官网www.pynq.io下的Get Started (PYNQ-Z1 Setup Guide)页面来进行使用和配置 。

一、准备工作

要开始在Lemon ZYNQ主板上体验PYNQ功能,请在开机之前先做好下列准备工作:

1. 准备一张已写入PYNQ镜像的的TF卡(TF卡的写入过程请看上一章节内容 基于 Lemon ZYNQ 的PYNQ 开发 章节一 准备工作之PYNQ系统镜像的烧录)。

2. 准备一根千兆以太网线,以及一根TYPY C数据线(用于主板的供电和串口调试)。

3. 准备一台电脑:用于PYNQ的功能调试。

二、启动主板

1. 将TF卡插入Lemon ZYNQ 主板的TF卡槽中(TF卡槽在主板的背面)。

2. 将板子的启动方式调整成SD启动,BOOT拨码开关拨码如下图所示:

3. 对板子进行上电操作 (将板子上的UART口通过TYPE C线连接到电脑用于供电和串口调试),如果之前已经上电了,可以按POR按键进行重启。

4. 上电之后板子上的红色POWER指示灯亮起(但是和以往开发不同,DONE指示灯并没有被点亮,因为此时FPGA部分还没有被配置)。如果我们的UART已经用TYPE C数据线和电脑连接了,此时用PUTTY等专业软件查看串口信息(波特率设置成115200),可以看到我们的系统已经启动,串口正在发送PYNQ启动的日志信息。

5. 一分钟之后,你应该会看到两个蓝色的 LD4 和 LD5 (RGB LED)灯,以及四个绿色的LED灯(单色)LD0,LD1,LD2,LD3 同时闪烁, 随后两个蓝色 LD4-LD5(RGB-LED)被关闭,而绿色的LD0-LD3 LED保持亮起,证明系统现已启动并可供正常使用了。

此时DONE 灯被点亮,证明FPGA部分代码也已被加载配置, 另外通过串口工具(PUTTY)也可以看到系统已经完成了启动(显示 Welcome to PYNQ Linux 字样)。 (备注 命令行启动完成时间会早于 上述LED灯的闪烁以及DONE灯的点亮时间)

三、网络连接(两种连接方式)

除了UART串口之外,想要进行PYNQ的开发,我们还需要通过网络将开发板和计算机进行连接,以访问Jupyter Notebook。通过网络和计算机的连接有下面两种方式:

方式一:同电脑直连方式

1)通过网线直接连接开发板和计算机(普通千兆网线就可以不需要特制的交叉网线),这种方式下我们的计算机是可以访问PYNQ的Jupyter Notebook,但是这种方式下开发板就无法直接访问互联网,也无法对主板直接更新和安装软件包。(当然也有解决方法,那就是对主板和计算机进行网络的桥接,大家可以自己研究)。

2)在直连方式下主板的IP是默认固定的(静态 IP) 192.168.2.99 , 我们需要手动为计算机分配一个相同网段(192.168.2.*)的静态IP。

3 ) 分配之后,我们可以尝试在PC端ping 开发板,以及开发板ping PC的方式验证网络是否通畅,如果之前的设置无误,两种方式都是可以直接ping通(如遇主机端可以ping 通开发板,但开发板无法ping 通主机端请检查下防火墙的相关设置)

方式二:主板连接路由器

1)通过网线将开发板和路由器进行连接。连接上之后开发板将自动从路由器端获取 IP 地址。如果此时我们的网络环境是可以访问互联网的,那我们的开发板在获得IP地址之后也能正常的访问网络。

2)要让我们的计算机能够通过网络访问开发板子,我们同样需要将计算机连接到和开发板相同的路由器上(有线或者无线方式都可以)。

3)因为开发板的IP是路由器动态分配的,所以我们需要先在串口工具下(putty)用ifconfig命令获得当前主板的IP地址,如下图所示当前我们获得的IP是192.168.1.109。 (在PYNQ 3.0.1的环境下,如果开发板获得了路由器分配的新的IP地址,那新的IP地址将被显示,另外系统默认的静态IP 192.168.2.99也会存在 )。

4) 之后可以同样采用相互ping的方式验证主机和开发板之间的网络是否畅通(主机PC ping 开发板,以及开发板ping 主机)(如遇主机端可以ping 通开发板,但开发板无法ping 通主机端请检查下防火墙的相关设置)

备注:连接路由器的情况下,每次重启后主板从路由器获得的IP地址都有可能变动。所以访问前最好都用ifconfig先确认下当前开发板的地址。 如果嫌麻烦的也可以手动设置一个和路由IP段相同的静态IP,可以看本文最后第五部分内容手动设置静态IP地址。

四、访问PYNQ的 Jupyter 界面

完成第三步的网络连接操作后,打开我们的网页浏览器在下面输入开发板的IP地址。之后我们可以看到Jupyter 的登陆界面了,如下图所示: (此处的登录密码是xilinx, 其实pynq系统的登录账号也是xilinx)

输入密码登录后,就可以登录系统了。

至此,我们PYNQ 系统算是已经真正的跑起来了。

五、手动为主板设置IP地址(选看)

因为上述两种连接方法都存在各自的缺点:方法一的192.168.2.99的IP有时重启后并不会出现,方法二的IP地址受路由器DHCP功能的影响,每次开机后IP地址可能会变动造成原先的IP地址无法登录需要查询更新的IP地址的情况,所以这里介绍一种手动设定IP地址的方法。因为手动设置IP并不是必须的,所以这部分内容大家选看。 (另外如果我们手动设置了IP,那DNS部分也必须手动设置一遍,否则无法通过域名访问互联网)

1) 手动设置IP地址

a ) 原先的网络配置内容是在 /etc/network/interfaces.d/eth0 文件内的。通过vi 我们可以查看原先的IP设置内容 ,可以看到 eth0:1是默认分配了一个静态IP的 192.168.2.99。 而 eth0是通过dhcp自动获取IP的, 所以这里我们将eth0的IP设置也更改为静态IP。

b ) 输入sudo vi 命令,这里需要输入密码(密码是xilinx)

sudo vi  /etc/network/interfaces.d/eth0

c ) 按下我们键盘上的”i”键,对内容进行编辑,将下列内容替换原本文档中的内容:

auto eth0
iface eth0 inet static
address 192.168.1.99
netmask 255.255.255.0
gateway 192.168.1.1

auto eth0:1
iface eth0:1 inet static
address 192.168.2.99
netmask 255.255.255.0
gateway 192.168.2.1

这里我们保留了原先 192.168.2.99的静态IP, 又将eth0的 IP从DHCP获取修改成固定的192.168.1.99 (这里假设我们的路由器IP是192.168.1.1,并且192.168.1.99这个IP并没有被其同网络环境下的其他设备占用),这样每次系统重启后,系统的登录界面就不会改变了。另外gateway网关的设置必须要添加,否则会影响后续访问互联网的功能

d ) 之后按下键盘上的ESC键,并输入 :wq! (冒号也需要) 并退出

e ) 用sudo reboot命令重启系统(会提示输入密码 密码是 xilinx)

sudo reboot

f )等系统重启成功后 ,输入ifconfig 命令,可以看到IP地址变更成刚刚设置的两个静态IP了,不论我们以哪种网络连接方式连接,甚至不接网线的情况下,这两个IP都是存在的。

至此我们手动设置IP地址成功。接下来我们需要手动设置DNS地址。

2) 手动设置DNS地址

手动设置IP之后 我们还需要对DNS进行设置,不然我们无法在主板上通过域名的方式访问互联网(比方说当我们ping www.baidu.com这时候会提示失败) 手动设置DNS的步骤如下:

a) 用sudo vi 指令 对resolved.conf文件进行编辑

sudo vi /etc/systemd/resolved.conf

b) 这里我们在文档的最后添加下列内容(备注每一行的开头不能有”#”)

DNS=192.168.1.1
DNS=8.8.8.8
DNS=8.8.4.4
DNS=223.5.5.5
DNS=223.6.6.6
  • 其中192.168.1.1 是路由器(网关)地址,也可以充当本地DNS服务器
  • 8.8.8.8 和8.8.4.4是GOOGLE提供的 DNS服务器
  • 223.5.5.5 和 223.6.6.6 是阿里提供的DNS服务器

c ) 之后按下键盘上的ESC键,并输入 :wq! (冒号也需要) 并退出

d ) 用sudo reboot命令重启系统(会提示输入密码 密码是 xilinx)

e )系统重新启动后,我们再ping baidu (ping www.baidu.com),由下图可知我们的DNS服务器已正常工作,ping网络域名成功。

网络IP的设置其实是可选项,在PYNQ官网上都没有提到手动设置IP的内容,不过手动设置IP确实能带来一些访问上的便利,大家可以按需求自行选择是否设置。

另外经过测试,我们手动设置eth0 IP的这个操作同样也解决了eth0:1 默认的ip 192.168.2.99容易偶发性丢失的问题。猜测出现这种情况的可能原因是 eth0:1属于eth0的虚拟端口,而eth0原本被设置为自动获取IP,所以当eth0没有获得IP并未正常工作情况下,eth0:1就有概率不显示静态IP(所以将eth0也手动设置成静态IP ,eth0:1偶然没有IP的情况也就同时被解决了)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注