其实在这个开发板上安装 Linux 和在树莓派上安装 Linux 并没有太大区别,遇到问题的时候可以参考一些树莓派资料尝试解决。

当然,实际操作上有一些细节不太一样,尤其是在系统启动之后的配置方面。

硬件准备

除了 FPGA 本身和用来操作的电脑之外,大致还需要:

  • USB 键鼠一套:首次运行 Linux 用来配置系统
  • VGA 显示器一台:首次运行 Linux 用来配置系统
  • 网线一根:连接电脑
  • SD 卡一张(8G+,CLASS 10+):作为文件系统。
其实键鼠和显示器不是必须的。如果第一次配置时直接采用无头模式(headless),需要进行比较复杂的操作,可参考下文。

镜像选择

根据官方教程,有一些预编译的镜像可以选择,下载地址:

Terasic - DE Boards - Cyclone - DE1-SoC Board

TitleLinux KernelMin. microSD CapacitySize(KB)Date Added
Linux Console3.124GB664952014-01-14
Linux Console with framebuffer3.124GB3285242014-03-24
Linux LXDE Desktop4.58GB12404662016-11-14
Linux Ubuntu Desktop4.58GB19330492016-12-28

Desktop 版本也有 3.12 内核的可供下载,但是官方并不建议使用。

本文基于官网的最新预编译版 Linux Ubuntu Desktop (Ubuntu 16.04.1 LTS),其他发行版的大致配置步骤应当相似,但并不保证一定能够使用。

烧录 SD 卡

这个部分和树莓派的操作完全相同(除了不能用树莓派定制的 Image 写入工具)。

建议参考:

Win32DiskImager写入ubuntu镜像-百度经验 (baidu.com)

设置 FPGA 工作模式

建议参考:

DE1-SoC User Manual —— 3.1 Settings of FPGA Configuration Mode,依照表 3-2 所示拨动 SW10 开关到指定的位置就可以了:

表3-2
表3-2

默认情况下开关应当在 10010 模式。对于运行普通的 Linux,或者需要使用 Linux 上的程序对 FPGA 进行重编程,需要设置开关为 01010,对于运行需要 Frame Buffer 的 Linux 则需要设置开关为 00000(带有 GUI 的 Linux 都需要 Frame Buffer)。

初次启动与配置

把 SD 卡插入 FPGA,连接好外设,然后开机,没有意外的话就可以看到 Linux 的企鹅在屏幕上出现,然后就可以登录系统了。注意:预编译系统的用户名为 root,密码为 terasic

为了下次登录调试方便,对网络进行设置。

  1. 用网线将 FPGA 和电脑连接起来,FPGA 开机状态下应该能看到 “未识别的网络” 的字样。

    未识别的网络
    未识别的网络

  2. 打开 “控制面板\网络和Internet\网络连接”,右键打开“以太网”的属性页面,为其手动分配一个 IP 地址(很简单,具体做法请百度)。

    这里以 192.168.137.1 为例。

  3. 右键 WLAN(或者其他有 Internet 连接的网卡)打开“属性”页面,选择共享选项卡,选择“以太网”(即 FPGA 对应的网卡)并启用共享功能。

    网络共享
    网络共享

    设置共享的目的是为了让 DHCP 服务器给 FPGA 分配一个 IP 地址,从而让电脑可以和 FPGA 通过网线进行通讯。

  4. 配置静态 IP。

    • 如果有显示器,需要使用 Network Manager 进行配置,桌面环境下 NM 有 GUI,可以直接取消 DHCP 并设置静态 IP 地址和子网掩码以及网关地址。

      设置方法参见 NetworkManager (简体中文) - ArchWiki (archlinux.org))。

      这里以下面的配置为例,注意配置之后可能需要重启才能生效。

      address 192.168.137.2         # IP 地址
      netmask 255.255.255.0         # 子网掩码
      gateway 192.168.137.1         # 网关地址
      dns-nameservers 192.168.137.1 # DNS服务器
      
    • 如果没有显示器,请直接参考本文最后的 无头配置网络 部分。
  5. 设置 SSH 连接。

    推荐一个 SSH Terminal:MobaXterm,比 PuTTY 好用很多。

    具体设置方法比较简单,总体思路是使用 Windows 上的 SSH 客户端连接 FPGA 的 IP 地址,然后通过 SSH 进行操作。

    如果需要使用 GUI ,可以参考之前的 X11 Forwarding,设置 X11 Forwarding 在 Windows 上显示图形界面。一个 FPGA 为什么需要GUI ?!

    如果需要传送文件,可以使用 SFTP,Xshell、MobaXterm 这类常用的 SSH 软件都已经集成了基于 SFTP 的文件传输功能。

  6. 到此就可以重启,尝试 SSH 连接,如果一切正常就可以把键鼠和显示器都撤走了。以后的开发工作可以通过 SSH 和 SFTP 完成。

常见问题

  • 如果出现 SSH 连接不上,请尝试附加参数 -v 查看详细日志信息。连接失败的原因大概率是禁用了 root 用户使用密码登录。可以先使用 ubuntu 用户登录,然后修改 SSH 配置。请参考:ssh 怎样以root用户登录_liming066的博客-CSDN博客_ssh用root登录
  • 一般情况下是用不到这块板子的 GUI 的(为了配置方便除外)...所以我一般选择禁用。

    systemctl disable lightdm

    另外这个预编译版竟然还安装了 Apache2 服务器(FPGA 一般不会被用来做 服务器 吧...),卸载之:

    systemctl stop apache2
    systemctl disable apache2
    apt-get remove --purge apache2
    rm /etc/init.d/apache*

    然后重启。

无头情况下的配置

注意:在无头环境下进行错误的网络设置可能会使 DHCP 失效,网络无法连接,进而不得不使用键鼠 + 显示器的配置方案。

与有显示器的环境相比,无头情况下 DE1-SoC 获取到的 IP 并不能很快地看到,也就不能直接通过 SSH 连接。所以我们的第一步就是获取开发板的 IP 地址。

无头情况下获取 IP

  1. 要获取 IP 地址,首先应该通过 DHCP 的方式给板子分配一个地址。

    这里的做法和上面有显示器环境的网络配置相同,即网线连接 -> 设置电脑 IP -> 网络共享。

  2. 设置好网络共享之后,打开 Wireshark 软件,选择 “以太网” 网卡进行抓包。原理是,开发板连接到互联网后会尝试和 Ubuntu 的服务器通信,也会使用 NTP 协议对时,种种操作会经过我们的电脑,此时打开抓包软件自然而然地就可以发现 DE1-SoC 的流量,也就拿到了其 IP 地址。
  3. 拿到 IP 之后直接打开 SSH 软件,使用 ubuntu 用户登录,然后修改 SSH 配置文件,允许 Root 用户使用 SSH 登录(参照上文链接),就可以随意进行操作了。
  4. 美中不足的是,这样每次开发板关机后再打开时 IP 会发生变化(因为每次 DHCP 发放的地址并不相同),如果每次使用抓包的方式获取 IP,效率太低。因此设置静态 IP,让开发板用固定的 IP 上网。

设置静态 IP 上网

  1. 打开终端,输入:

    ip a

    查看设备 eth0(默认有线网卡)上的获取到的 IP 地址。

  2. 打开网络配置文件,将 eth0 设置为静态 IP 模式。

    nano /etc/network/interfaces # 打开网络配置文件

    此时应该能看到 eth0 的默认配置如下:

    auto eth0
    iface eth0 inet dhcp

    将其更改为:

    auto eth0
    iface eth0 inet static
    address 192.168.137.2
    netmask 255.255.255.0
    gateway 192.168.137.1
    dns-nameservers 192.168.137.1

    解释如下:

    • auto eth0,开机自动启动 eth0 网卡;
    • static 表示静态 IP 上网,默认值为 dhcp 即通过 DHCP 服务获取 IP 地址。
    • address,静态 IP 地址,可以根据自己需求更改,也可以直接写成第 1 步中 DHCP 分配的地址;
    • netmask,子网掩码,和电脑保持一致;
    • gateway,网关。这里我们的情况是使用电脑共享网络给开发板使用,所以网关地址就是电脑的 IP 地址;
    • dns-nameservers,DNS 服务器地址,可以设置成 114.114.114.114 之类的,也可以设置成电脑,由电脑来做 DNS。
  3. 设置完毕后重启,仍然不会生效

    原因是带有桌面环境的 Ubuntu 发行版都集成了 Network Manager(因为 NM 有带 GUI 的网络配置程序),默认由它负责网络的管理,而我们刚刚编辑的是另一个内置网络管理工具 Networking 的配置文件,默认情况下它并不生效。

    既然我们是无头环境,NM 的 GUI 就没有什么用了,所以我们要让 Networking 开始使能,全面接管系统的网络配置工作:

    systemctl disable network-manager
    systemctl enable networking

    然后重启,如果 Networking 配置正确的话,应该可以用 SSH 直接连接之前设置的 IP 地址了。

    如果仍然不能正常工作,可以再启动 Wireshark 抓包进行分析和调试。

  4. 关于 Ubuntu 无头环境下使用 Networking 配置静态 IP,请参考:Ubuntu 16.04 Server 设置静态IP - 简玄冰 - 博客园 (cnblogs.com)