ARM平台执行程序报错”Illegal instruction”解析

我在 微型k3s部署 时遇到运行 k3s 二进制ARM程序报错:

Illegal instruction

虽然k3s官方提供的二进制代码是 armhf 架构,看上去和我 树莓派一代 所使用的 Alpine Linux armhf 版本匹配,但是实际上还可能有潜在问题:

  • Alpine Linux 使用 musl 库,非标准glibc库,可能在执行二进制上存在差异。毕竟很多第三方应用程序都是在比较通用的ubuntu/fedora上编译的

  • ARM架构有很多细微差异,早期的树莓派,如 树莓派一代zero wARMv6 架构( ARM11 处理器)

  • 参考 Debian Wiki: ArmHardFloatPort hard-float ABI Arm port (armhf) for Debian 文档中说明:

    • Debian的 armhf 最低符合CPU硬件是 ARMv7-A ,也就是编译时建议采用参数 --march=armv7-a

    • 对于600MHz+ ARMv6 VFPv2处理器不能得到 armhf 默认的特性支持 - 可以看到针对debian的 armhf 特性编译的程序可能不支持 ARMv6

    • summary: Using armv7 as a base

看来,不能直接使用 k3s 官方二进制程序在 树莓派一代 上部署 K3s - 轻量级Kubernetes ,需要自己编译 32位 k3s for ARMv6 来实现部署,待实践…