上一篇已经介绍了我在为自己的 homelab 环境,选择合适的 ARM 服务器节点时,各种考虑到的问题。在最终确定入手 HoneyComb LX2 以后,本篇再来介绍下,我对于这块板子的初始化以及基础配置。
引导启动
控制台连接
在所有的工作开始之前,需要先了解如何连接 HoneyComb LX2 主板的控制台。不过 LX2160A 这块 CPU 也不是为了桌面场景设计,并未提供 GPU 图形渲染能力,也没有板载 VGA 或者 HDMI 接口,并不能直接接显示器。主板上提供了一个 microUSB 接口,作为 console 调试的端口,可以将主板作为串口设备,以 usb 协议接入其他电脑连接控制台,更像是一台网络设备的设计。
所需要做的操作,和其他设备的串口 console 连接过程一样,将调试 usb 口连接到电脑以后,查看对应的串口设备位置,然后使用熟悉的终端连接工具连接即可。比如 Linux 下,可以使用 minicom,Windows 下使用 putty 或者其他类似工具均可,几个主要参数按照下面给出的配置即可在主板上电后成功建立连接。
-
Serial (COM#)
-
Speed: 115200
-
Data Bits: 8
-
Stop Bits: 1
当然,如果有 GPU 的话,确实也可以考虑安装到主板上来作为显示界面的图形渲染设备,不过考虑到驱动兼容性问题的坑,如果不是想用来做 arm 图形工作站的话,串口连接相对更简单。
写入引导程序
HoneyComb LX2 支持从三种不同的介质引导启动系统,分别可以通过主板上的 DIP 跳线开关进行组合选择引导策略。
-
通过 microSD 卡引导
-
通过板载 emmc
-
通过板载 SPI 存储
主板默认没有提供任何预制的引导程序,相当于没有提供默认的 BIOS,需要自己制作用于引导的 microSD 卡。官方提供了两种引导镜像,一个是基于 u-boot 实现的简易引导,另一个是 UEFI 引导。两种镜像都可以从官方的 https://images.solid-run.com/ 站点获取。
需要根据自己的实际情况选择镜像,比如我希望通过板载 SPI 加载 UEFI 的方式引导并安装系统,体验更接近于常规主板的启动方式。所以就会选择 lx2160acex7_2000_700_2600_8_5_2_flexspi_nor_ee5c233.img.xz
这个镜像,文件名中间的 2600 代表内存频率,可以根据实际配置的内存规格选择,flexspi 表示是用于 SPI 的镜像。
不过,直接使用 UEFI 镜像,并不具备将引导程序本身写入到主板存储颗粒上的能力,需要借助于 u-boot 镜像中提供的工具来完成。
可以随便找了一个兼容的镜像,比如 lx2160acex7_2000_700_2600_8_5_2-4f357bc.img.xz
,通过 dd
命令 (Windows 下可以用 balenaEtcher),将其写入到提前准备好的 microSD 上。这个镜像里已经预置了一个数据分区,并在分区内预置了一个官方提供的 ubuntu 系统,方便直接写入到存储介质中,不过这里用不上。然后挂载存储卡上的 ext4 数据分区,将其中的镜像删除,并更换为前面的 SPI UEFI 引导镜像。
存储卡准备工作完成后,将其插入到 HoneyComb LX2 主板,上电启动就可以通过 microSD 卡引导启动。启动后注意在控制台提示时,按任意键终端引导过程,接下来就能按照下面的步骤,将 UEFI 写入到 SPI 存储中。
|
|
参考:https://community.solid-run.com/t/anyone-tried-flashing-uefi-f-w-to-spi/185/4
完成写入镜像之后,关机断电,并将 DIP 开关位置全都拨动到 off 的一侧,切换到 SPI 引导模式。再次启动,就可以进入到这个基于 TianoCore 实现的 UFEI 引导服务中了。能够进行简单的底层设备配置,以及检索存储介质上的引导文件。后续步骤就和普通 PC 上的操作过程一样了。
Linux 系统安装与配置
官方默认其实提供了预置的 Ubuntu 镜像,不过由于我希望安装 ProxmoxVE 作为虚拟机 Hypervisor,并加入家里的虚拟机集群。
在开始实际安装系统之前,需要先准备一个 Linux 下可以原生驱动的 USB 外置网卡。HoneyComb LX2 的板载网卡,在内核版本 5.14 以后,才能被原生支持。由于我安装 Debian 11 的内核版本还在 5.10,显然不具备原生驱动的能力。所以系统初始安装过程中,还是需要借由 USB 网卡来进行先期的基础软件包下载和安装。当然,如果是 Arch Linux 等内核版本比较新的发行版,就不存在这个问题。
接下来,通过随便什么熟悉的方式,制作好 arm64 版本的安装 U 盘。然后直接插上主板后的 USB 接口,就可以像正常安装操作系统一样,通过 UEFI 菜单,选择并安装系统。不过因为是通过串口 console 接入的显示终端,不具备图形渲染能力,所以无法使用图形化安装方式,不过只要有过 Linux 系统的安装经验,这个问题也不大,这里就不再具体展开细节了。
不过需要注意的是,我发现安装过程中,可以选择的目标存储介质,只能是 m.2 接口上的 nvme,而没有板载 emmc。不过有了 ssd 以后,我也不想用 emmc,所以也没深入看下情况。理论上 sata 设备应该也能被支持,不过我也没打算用,毕竟外接电源还要多连线。
启用板载网卡
Debian 默认的 Linux 内核并没有支持主板上的千兆 RJ45 网口,这个板子如果后续正常用的话,总拖着一个 usb 网卡的小辫子,也不是个事儿。不过既然官方已经提到新版本内核已经可以原生支持,那就索性简单粗暴一点,升级内核就完事了。直接配置 unstable 的 apt 源升级内核镜像即可。
|
|
升级完成内核,还需要注意配置两个启动参数。按照官方文档示例,需要配置 arm-smmu.disable_bypass=0 iommu.passthrough=1
这两个参数。修改 /etc/default/grub
文件,在 GRUB_CMDLINE_LINUX_DEFAULT
中添加内核参数命令即可。
不添加内核参数,可能会遇到系统启动后,部分设备出现周期性 IO 识别错误的提示,干扰控制台操作。
当然,直接升级内核版本的做法不推荐用于有稳定性要求的生产场景,我因为是自己家里,所以使劲折腾新版本也没问题,本身这个 ARM 服务器就是作为实验性节点来加入我的服务集群的。
安装 ProxmoxVE
正式开始安装之前,与 x86 上 Debian 安装 ProxmoxVE 的过程一样。需要先对静态 IP,主机名进行基础配置。
|
|
pve 官方虽然没有发布 arm64 的安装包,但是在社区中,其实已经有了相关的讨论。官方人员表示其实实现上已经能够支持 ARM 设备,只不过目前由于不同厂商没有统一形成一致的标准,所以暂未考虑对不同设备的适配。社区中已经可以发现使用源码自行编译 arm64 的版本的尝试,比如针对树莓派的 pimox 项目就提供了一个相对较新的预编译版本。
不过我还发现了国内还有 foxi 大佬自己编译的版本,相比于 pimox 的版本更新,而且也提供了现成的二进制包镜像。
|
|
由于我还有把节点加入到 ceph 存储集群的需求,所以还需要装下对应版本的 ceph。不过需要注意的是,pveceph 存在一部分额外的工具包也没有提供 arm 版的预编译镜像,不过加入集群存储也用不到相关的包,而 ceph 本身的基础包都又可以直接安装成功,所以中间遇到找不到对应 arm 架构下软件包的警告可以忽略。
|
|
基础包的安装工作完成以后,
启用 SFP+ 端口
HoneyComb LX2 在主板后面,原生提供了四个 2x2 的 SFP+ 端口,可以支持各类 SFP+ 模块或直连线,这也是这块板子的亮点之一。不过由于这几个端口并非由独立网卡控制,无法被 Linux 系统原生识别,而是和一些网络设备类似,直接由 CPU 当作串行通信设备来控制的,因此需要额外的方式来驱动启用这些端口。
SFP+ 端口说明
按照官方提供的文档说明,默认的设备 SERDES 配置下,会暴露 dpmac.3
到 dpmac.10
这 8 个 10G 的端口,其中的 dpmac.7
到 dpmac.10
四个对应板载的四个原生 SFP+ 端口,具体的位置分布可以参考下图示意。
另外说明下,dpmac.3
到 dpmac.6
四个 10G 端口,需要由 QSFP+ 端口的一分四连线暴露,不过 HoneyComb LX2 不具备这个端口,另一块板子才有这个功能,所以也就不用考虑了。
在 SFP+ 模块和线缆选择方面,官方也给了他们的推荐。我自己尝试了 DAC 直连线,以及 mikrotik 和国产 10G 电口模块,没有遇到特殊的兼容问题。不过考虑到散热因素,建议短距离使用 DAC 铜缆直连线,毕竟端口上没有额外的散热鳍片设计,尽可能避免在多个端口同时使用电口模块这样功耗较高的组合。
驱动工具安装
首先确认下内核参数状态,尤其是 CONFIG_FSL_MC_BUS
要确定为启用状态。之前已经升级了内核版本,无需再做额外参数配置。
|
|
内核状态确认无误后,接下来可以直接安装 NXP 在 LSDK 中提供的 restool。因为我并不需要做相关的硬件开发以及底层配置编译,仅需要安装最基础的脚本工具包,即可满足启用 SFP 端口的需求,而不是必须安装完整的 LSDK。
经过实际测试比对,并不是所有发布的版本都可以完美适配,最终我选择了 Github 上 release 里面能正常兼容的 restool 版本 (restool-lf-5.10.35-2.0.0
)。
|
|
安装完成后,就可以通过 restool 提供的命令行工具,来查看并启用 DPNI 设备。设备添加完成后,可以在系统中看到已经有了新的 eth 设备。
|
|
配置端口自动启用
前面已经实现了在 Linux 系统下,将 HoneyComb LX2 板载 SFP+ 端口作为以太网设备暴露给操作系统的能力。但是通过 restool 脚本添加的端口,每次系统重启后,相关设备都需要重新进行配置。考虑实用性,就要解决这个问题。
目前主要有两种方式,一种是自己根据需要,编译生成设备树描述文件(dtb),然后在系统启动阶段,由内核加载。这种方法的好处是,设备加载的时机更早,甚至可以在 UEFI 启动阶段,就将设备挂载启用,用于网络引导,使用 iSCSI 存储设备等场景。相对而言,缺点也比较明显,维护相对复杂,不利于灵活调整配置。
第二种方案则是在系统启动阶段,使用 udev rules 规则,让操作系统设备管理器来加载相关设备。在设备加载阶段,由操作系统调用执行 restool 工具,即可完成。这种做法维护简单,但是相对无法在更底层的阶段实现设备挂载。不过由于我自身没有跟复杂的需要,使用 udev 规则已经可以解决问题。本着多一事不如少一事的原则,最终选择使用此方案。
例如,我需要使用最上面的两个 SFP 端口,就在 /etc/udev/rules.d/
目录下,建立 10-mc-sfp.rules
文件,并配置了它们的加载方法。
|
|
其他参考资料:
最后修改于 2023-01-28