HCL:EspressoBin
Globalscale Technologies ESPRESSObin 是一款单板计算机。
技术细节
- Marvell Armada 3720 SoC
- 2x Arm Cortex-A53 CPU
- Topaz Networking Switch
- micro SD 卡槽
- 2x 千兆以太网 LAN
- 1x 以太网 WAN
- SATA 接口用于 HDD 存储
- USB 3.0 和 USB 2.0
- MiniPCIe
引导加载程序位置
有三种不同的方式来启动板子
- 板子配备了 SPI Flash 芯片,其中包含供应商预加载的 U-Boot 镜像;
- SATA 硬盘包含 MS-DOS 分区类型的 U-Boot 镜像,类型为 0x4d;
- 串行控制台。
后者也用作回退过程。目前无法从 SD 卡启动(至少对于板子的 v5 电路图而言),因此不需要特殊的 openSUSE 镜像。
openSUSE 还提供 ESPRESSObin 板的最新上游 U-Boot 引导加载程序版本。因此,基本上有两种方式可以使用 openSUSE 与板子配合使用
- 使用供应商 U-Boot;
- 刷新(更新)SPI Flash 中的 U-Boot 镜像。
每种方式都有优点和缺点。使用上游 U-Boot 提供与 openSUSE 更好的集成,并可能修复更多问题并提供更多功能,但是使用供应商 U-Boot 不需要您更新引导加载程序,如果您不认为自己有足够的技能或借用了板子进行评估并且不想进行破坏性更改,这可能是一个优势。
从 SPI Flash 启动
| J10 | J3 | J11 |
|---|---|---|
| 1-2 | 2-3 | 2-3 |
引导加载程序源由位于板子角落的跳线 J10、J3 和 J11 控制。如果需要,请使用镊子更改跳线设置。确保板子已关闭且电源已断开。有关详细信息,请参阅 EspressoBin Wiki。
如果 SPI Flash 芯片中存储了正确的引导加载程序镜像,则在通电时会读取并执行它。
从 SATA 启动
| J10 | J3 | J11 |
|---|---|---|
| 2-3 | 2-3 | 1-2 |
引导加载程序可以从连接到板子的 SATA 设备加载。这种情况不应与引导加载程序存储在 SPI Flash 中,而操作系统(内核和 initrd)从 SATA 设备加载的情况混淆,后者由先前从 SPI Flash 加载的引导加载程序加载。将引导加载程序存储在 SATA 设备上可以用作恢复过程(当 SPI Flash 内容损坏时),也可以在正常操作中使用。
要准备可引导介质,您需要获取引导加载程序镜像。最简单的方法是获取 arm-trusted-firmware-a3700 包并将其解压缩到当前工作目录
rpm2cpio arm-trusted-firmware-a3700-2.6-9.1.noarch.rpm | cpio -id
然后,您将在当前工作目录中找到新创建的 ./usr/share/arm-trusted-firmware-a3700。由于引导加载程序也负责内存初始化,因此您需要为您的硬件变体选择所需的版本。例如,./usr/share/arm-trusted-firmware-a3700/ebin_v3_1G_sata/flash-image.bin 将适用于最常见的 1GB RAM 版本。
准备带有 MS-DOS(也称为 MBR)分区表的 SATA 设备和类型为 0x4d(fdisk 将此类型称为 QNX4.x,但这无关紧要)的分区。假设所需的分区是 /dev/sdc1,则应将镜像放置在此处。请记住根据您的设备名称调整此命令。
dd_rescure ./usr/share/arm-trusted-firmware-a3700/ebin_v3_1G_sata/flash-image.bin /dev/sdc1
如果在 SATA 设备上找到正确的镜像,则会读取并执行它,否则板子将回退到 UART 启动过程。
从 UART 启动
| J10 | J3 | J11 |
|---|---|---|
| 2-3 | 1-2 | 1-2 |
首先,为了通过串行控制台启动,您需要在系统上安装 arm-trusted-firmware-tools 包。检查您是否可以运行 WtpDownload 命令,该命令是通过串行控制台上传引导加载程序镜像的工具。
其次,您需要获取 UART 引导加载程序文件。最简单的方法是使用 openSUSE 预构建的镜像。获取 arm-trusted-firmware-a3700 包并将其解压缩到当前工作目录
rpm2cpio arm-trusted-firmware-a3700-2.6-9.1.noarch.rpm | cpio -id
然后,您将在当前工作目录中找到新创建的 ./usr/share/arm-trusted-firmware-a3700。由于引导加载程序也负责内存初始化,因此您需要为您的硬件变体选择所需的版本。例如,./usr/share/arm-trusted-firmware-a3700//ebin_v3_1G_spinor/uart 将适用于最常见的 1GB RAM 版本。
第三,检查板子是否处于 UART 启动模式。当您使用 USB 电缆连接并通电时,您会看到某些内容尝试通过串行控制台与您通信。使用您选择的串行终端,例如
screen /dev/ttyUSB0 115200
当您按下 Enter 时,它会显示
>E
然后终止您的串行控制台终端,并使用以下命令将镜像上传到板子。引导加载程序将在完全加载到板子内存后立即执行,因此请在 WtpDownload 之后运行串行控制台终端。
WtpDownload -P UART -C 0 -R 115200 \ -B ./usr/share/arm-trusted-firmware-a3700/ebin_v3_1G_spinor/uart/TIM_ATF.bin \ -I ./usr/share/arm-trusted-firmware-a3700/ebin_v3_1G_spinor/uart/wtmi_h.bin \ -I ./usr/share/arm-trusted-firmware-a3700/ebin_v3_1G_spinor/uart/boot-image_h.bin -E; screen /dev/ttyUSB0 115200
更新 SPI Flash 引导加载程序
如果您决定更新 SPI Flash 内存芯片中包含的 U-Boot,则需要新的引导加载程序镜像。假设您想使用 openSUSE 镜像,请获取 arm-trusted-firmware-a3700 包并将其解压缩到当前工作目录
rpm2cpio arm-trusted-firmware-a3700-2.6-9.1.noarch.rpm | cpio -id
然后,您将在当前工作目录中找到新创建的 ./usr/share/arm-trusted-firmware-a3700。由于引导加载程序也负责内存初始化,因此您需要为您的硬件变体选择所需的版本。例如,./usr/share/arm-trusted-firmware-a3700//ebin_v3_1G_spinor/flash-image.bin 将适用于最常见的 1GB RAM 版本。
强烈建议您在继续更新 flash 之前学习如何使用 SATA 或 UART 启动。总体过程如下:
- 使用替代方式(非 SPI Flash)启动板子并获取 U-boot 命令行;
- 使用 bubt 命令将 U-Boot 镜像刻录到 SPI Flash;
- 恢复环境设置。
有关详细信息,请参阅 EspressoBin wiki。
如果您已成功使用 SATA 或 UART 启动引导加载程序并能够与 U-Boot 命令行交互,则您需要以某种方式将 flash-image.bin 传递给正在运行的引导加载程序实例并将其刻录到板子上。例如,您可以使用 USB 闪存盘(带有 FAT 文件系统)。只需将 flash-image.bin 复制到 USB 闪存盘的根目录,然后将其连接到板子即可。
=> bubt flash-image.bin spi usb Burning U-Boot image "flash-image.bin" from "usb" to "spi" Bus usb@58000: Register 2000104 NbrPorts 2 Starting the controller USB XHCI 1.00 Bus usb@5e000: USB EHCI 1.00 scanning bus usb@58000 for devices... cannot reset port 2!? 2 USB Device(s) found scanning bus usb@5e000 for devices... 1 USB Device(s) found Image checksum...OK! Erasing 1163264 bytes (284 blocks) at offset 0 ...Done! Writing 1160348 bytes from 0x6000000 to offset 0 ...Done!
强烈建议恢复也存储在 SPI Flash 中的环境设置
=> env default -a => env save
但是,请记住备份您的板子 MAC 地址,因为它与 U-Boot 设置一起存储并且可能会丢失。如果需要,在从您的主要引导加载程序源启动后,稍后可以轻松设置它。
关闭板子电源,将跳线设置为 SPI Flash 启动位置,然后再次打开板子电源。如果 flash 更新成功并且选择了正确的镜像,您将看到您全新的引导加载程序的输出。在 U-Boot 命令行中,我们可以检查其版本
=> version U-Boot 2022.04 (May 16 2022 - 00:00:00 +0000) gcc (SUSE Linux) 12.1.0 GNU ld (GNU Binutils; openSUSE Tumbleweed) 2.38.20220411-5
手动安装
对于基本安装,请准备一个带有原始镜像的 micro SD 卡,如 AArch64_EFI 中所述。将 SD 卡插入您的板子并执行以下步骤
- 连接 USB 电缆以访问 CPU 的串行控制台。这以 115200 波特率运行。
- 通电
如果您的板子包含最新的 openSUSE U-Boot 镜像,则让板子不连接并启动系统。如果您决定使用供应商提供的 U-Boot,则首次需要进行以下额外的配置步骤
- 停止 u-boot 以获得提示符
- 运行以下命令
env default -a; load mmc 0:1 $kernel_addr_r /efi/boot/bootaa64.efi; load mmc 0:2 $fdt_addr_r /dtb/armada-3720-espressobin.dtb; bootefi $kernel_addr_r $fdt_addr_r
- 板子应启动到 grub 提示符
- 设置 grub 环境变量以运行默认启动菜单
set root=hd0,gpt1 set prefix=($root)/efi/boot normal
- linux 现在应启动到登录提示符
- 以 root 用户身份登录(密码:linux)
- 找到 EFI 分区的 UUID(这是磁盘的第一个分区,mmcblk0p1),例如:
localhost:~ # ls -l /dev/disk/by-uuid/ total 0 lrwxrwxrwx 1 root root 15 Jul 22 15:59 9691cdb9-ffad-4764-bf89-e958d79ef0fd -> ../../mmcblk0p4 lrwxrwxrwx 1 root root 15 Jul 22 15:59 992D-C26D -> ../../mmcblk0p1 lrwxrwxrwx 1 root root 15 Jul 22 15:59 af77f2f7-8017-4a25-8c50-38491762fbfc -> ../../mmcblk0p3 lrwxrwxrwx 1 root root 15 Jul 22 15:59 c42e9c58-b0d4-4e18-b8ac-df0a2e1a5eb4 -> ../../mmcblk0p2
- 安装 opensuse 引导加载程序
grub2-install --skip-fs-probe --no-nvram
- 准备一个临时 grub 配置文件 /tmp/grub.cfg(例如,使用 vi),确保使用 EFI 分区的 UID 进行搜索命令
search --fs-uuid --set=root 992D-C26D set prefix=($root)/efi/opensuse
- 准备一个包含 teporary 配置的 grub2 EFI 加载程序
MODULES=$(for i in $(ls /usr/share/grub2/arm64-efi/*.mod); do echo $i | cut -d/ -f6; done | cut -d. -f1 | tr '\n' ' ') grub2-mkimage -v -c /tmp/grub.cfg -O arm64-efi -p "" -o /boot/efi/EFI/opensuse/grubaa64.efi $MODULES
- 重新启动板子并停止 u-boot 以获得提示符并使默认启动参数永久化
env default -a setenv bootcmd 'load mmc 0:1 $kernel_addr_r /efi/opensuse/grubaa64.efi; load mmc 0:2 $fdt_addr_r /dtb/armada-3720-espressobin.dtb; bootefi $kernel_addr_r $fdt_addr_r' saveenv
- 重置板子,现在应该默认启动到 linux。
从 SATA 磁盘启动
与从 SD 卡启动不同,板子也可以从 SATA 磁盘启动。为此,请执行“手动安装”中描述的相同步骤,但修改 u-boot 命令为
env default -a; scsi reset; load scsi 0:1 $kernel_addr_r /efi/boot/bootaa64.efi; load scsi 0:2 $fdt_addr_r /dtb/armada-3720-espressobin.dtb; bootefi $kernel_addr_r $fdt_addr_r
env default -a setenv bootcmd 'scsi reset; load scsi 0:1 $kernel_addr_r /efi/opensuse/grubaa64.efi; load scsi 0:2 $fdt_addr_r /dtb/armada-3720-espressobin.dtb; bootefi $kernel_addr_r $fdt_addr_r' saveenv
已知问题
- 由于交换机 VLAN 配置,默认网络配置无法工作,请使用 yast 手动配置它。
5.1 及更高内核的 SATA 和 USB3 无法工作
无法初始化 SATA PHY
[ 11.748728] phy phy-d0018300.phy.2: phy poweron failed --> -1 [ 11.748775] ahci-mvebu: probe of d00e0000.sata failed with error -1
可以通过刷新到板载 flash 的较新的 Arm Trusted Firmware 来修复此问题。预构建的镜像可以从 此处 下载。

