侧边栏壁纸
  • 累计撰写 22 篇文章
  • 累计创建 11 个标签
  • 累计收到 3 条评论

目 录CONTENT

文章目录

瑞莎Cubie A7A 移植 Ubuntu 22.04 操作指南

王富贵
2026-05-05 / 0 评论 / 0 点赞 / 2 阅读 / 0 字

瑞莎Cubie A7A 移植 Ubuntu 22.04 操作指南

目标:在 Cubie A7A(全志 A733)上跑 Ubuntu 22.04(Jammy)arm64,使其能够直接 apt install ros-humble-*,与香橙派 5 Pro 开发环境对齐。

总体思路:用瑞莎官方构建系统编译 U-Boot 和 Kernel(底层),用 debootstrap 构建 Ubuntu 22.04 rootfs(上层),两者组装后烧录到 TF 卡。这样内核和设备树完全可控,用户态与香橙派 5 Pro 一致。

前置条件:一台 Windows 电脑(安装 VMware Workstation 或 VirtualBox),在虚拟机中运行 Ubuntu 22.04。虚拟机需分配 4 核以上 CPU、16GB 内存、至少 80GB 虚拟磁盘空间。一张至少 16GB 的 TF 卡 + 读卡器。


先理解整体思路:你在做什么?

如果你是第一次接触开发板的系统移植,下面的解释能帮你建立整体认知,不至于被后面密密麻麻的命令吓到。

为什么这件事这么复杂?

普通电脑重装系统很简单——下载 Ubuntu 的 ISO 镜像,用 U 盘启动,点几下鼠标就装好了。因为 Ubuntu 官方已经为 x86 架构的电脑做好了完整的安装包。

但 Cubie A7A 用的是 ARM 架构的芯片(全志 A733),Ubuntu 官方没有为这块板子做安装包。所以你需要自己组装一个系统

一个系统由哪几块积木组成?

积木通俗解释电脑类比本指南产出
U-Boot开机引导程序,板子通电后最先跑的东西电脑的 BIOS / UEFI第一步编译产出 u-boot-sunxi-with-spl.bin
Linux 内核(kernel)操作系统的核心,负责管理硬件(CPU、内存、USB、网卡等)汽车的发动机第一步编译产出 Image + 设备树 .dtb + 内核模块
Rootfs(根文件系统)你实际使用的系统——命令行、软件包、配置文件都在里面汽车的车身和内饰第二步构建产出 ubuntu-rootfs/ 目录

三步流程一句话概括

  1. 第一步:在虚拟机的 Ubuntu 22.04 里,用瑞莎提供的工具编译出 U-Boot 和内核
  2. 第二步:在同一台虚拟机里,从 Ubuntu 软件仓库下载一套纯净的 Ubuntu 22.04 系统文件
  3. 第三步:把这三块积木组装到一张 TF 卡上,插到 Cubie A7A 里通电启动

你不需要完全理解每一步的每个命令——就像你不需要理解发动机的每个零件也能开车。关键是理解整体在做什么:你在给一块没有官方 Ubuntu 支持的开发板,手动组装一个可用的 Ubuntu 系统。后面每一步的命令都附有注释,让你知道每行在干什么。


第零步:在 Windows 上搭建虚拟机环境

整个移植流程需要 Linux 环境——交叉编译内核、制作 rootfs 都依赖 Linux 工具链。如果你用的是 Windows,先花半小时搭好虚拟机,后面三步在里面完成。

0.1 选择虚拟机软件

软件费用推荐理由
VMware Workstation Pro(推荐)个人免费性能好、USB 透传稳定(TF 卡读写需要)、快照功能方便回滚
VirtualBox免费开源,但 USB 3.0 支持不如 VMware,TF 卡读写偶尔掉速

以下以 VMware Workstation Pro 为例。如果你选 VirtualBox,安装 Ubuntu 的流程类似,只是界面不同。

0.2 下载 Ubuntu 22.04 ISO

从 Ubuntu 官网下载桌面版 ISO(约 4.7 GB):

https://releases.ubuntu.com/jammy/ubuntu-22.04.5-desktop-amd64.iso

选桌面版而非 Server 版——因为后面要在虚拟机里跑 VS Code + Dev Containers,桌面环境更方便。

0.3 创建虚拟机

打开 VMware,点击「创建新的虚拟机」,按以下参数配置:

配置项建议值说明
操作系统Linux → Ubuntu 64-bit
虚拟磁盘大小至少 80 GB30 GB 编译产物 + 20 GB Ubuntu 系统 + 30 GB 余量
磁盘模式拆分为多个文件按需增长,不一次性占满物理硬盘
CPU 核心数至少 4 核内核编译是 CPU 密集型,核越多越快
内存至少 8 GB,建议 16 GB内核编译并行时内存消耗大,8 GB 勉强够,16 GB 从容

关于 80 GB 虚拟磁盘:30 GB 是之前预估的编译产物和 rootfs 空间需求。但虚拟机里还要装 Ubuntu 22.04 桌面系统本身(约 15-20 GB)、VS Code、Docker 镜像等,再加上操作余量,80 GB 比较稳妥。如果你物理硬盘充裕,直接给 120 GB 更省心。

0.4 安装 Ubuntu 22.04

将下载好的 ISO 挂载到虚拟机的虚拟光驱,启动虚拟机。安装过程选「最小安装」(不装 LibreOffice 等办公软件,省空间),其余默认即可。

安装完成后,在虚拟机里打开终端,先更新系统:

sudo apt update && sudo apt upgrade -y

0.5 配置共享文件夹(方便和 Windows 交换文件)

编译产物最终要复制到 TF 卡。你可以:

  • 方案 A(推荐):在虚拟机设置中启用「共享文件夹」,把 Windows 上的某个目录映射到虚拟机里。这样编译产物可以直接拖到共享文件夹,再在 Windows 上用 Rufus 烧录 TF 卡。
  • 方案 B:在虚拟机里直接操作 TF 卡(通过 USB 透传)。VMware 的 USB 透传很稳定,插上读卡器后虚拟机会自动识别。分区、格式化、写入全部在虚拟机里完成。

两种方案都可以,方案 B 少一步文件搬运,方案 A 的烧录工具(Rufus)在 Windows 上更顺手。建议先用方案 B 试试——如果虚拟机里 TF 卡读写正常,就一直用它;如果不稳定,切方案 A。

0.6 拍快照

虚拟机装好后,在 VMware 里拍一个快照。后面如果编译环境搞坏了、rootfs 配置错了,一键回滚到干净状态,不用重装系统。


开始前必读:磁盘空间和编译时间预估

移植过程中有两个环节特别吃资源——磁盘空间和 CPU 时间。提前了解,避免做到一半发现硬盘满了或者以为卡死了。

磁盘空间消耗分布

环节占用空间说明
Docker 镜像拉取~5-10 GB首次启动 Dev Container 时拉取,含交叉编译工具链和依赖
内核源码 + 编译中间产物~3-5 GB.o 文件、中间产物,编译完可以清理
U-Boot 源码 + 编译中间产物~500 MB相对较小
rootfs 构建(ubuntu-base + 安装软件)~2-4 GB取决于装了哪些包,基础系统约 1.5 GB
TF 卡镜像打包(可选)与 rootfs 大小相当如果打包成 .img 文件再烧录
总计(建议预留)至少 30 GB 空闲空间含编译产物、rootfs、TF 卡操作缓冲区

磁盘空间大头在 Docker 镜像和内核编译中间产物。 如果你硬盘紧张,编译完成后可以删除内核源码目录中的 .o 文件(make clean),能回收 3-5 GB。

编译时间消耗分布

以下估算基于一台中等配置的虚拟机(8 核 16GB 内存,SSD):

环节预计耗时说明
Docker 镜像首次拉取10-30 分钟取决于网速,只拉一次
编译 U-Boot2-5 分钟代码量小,很快
编译内核(全量)20-60 分钟占大头,取决于 CPU 核数和内核配置
debootstrap 下载 rootfs5-15 分钟取决于网速,约 300-500 MB 下载量
rootfs 内安装软件包10-30 分钟如果装桌面环境(ubuntu-desktop)会更久
TF 卡写入5-15 分钟取决于 TF 卡写入速度和 rootfs 大小
总计(首次完整走通)1-3 小时不含踩坑调试时间

编译时间的大头是内核编译。 后续如果只改内核配置重新编译,增量编译只需 5-15 分钟。如果只改 rootfs(比如加装软件包),内核和 U-Boot 不需要重新编译,几分钟就能搞定。

为什么内核编译最吃资源?

内核源码有几千万行代码,编译时要处理上万个 .c 文件,每个文件生成一个 .o 中间产物。这些 .o 文件加起来有 3-5 GB,编译过程中 CPU 几乎全程满载。你在泰山派那篇教程里看到作者说"首次编译约 3 小时"——那就是内核编译加上 SDK 其他组件的时间。

和泰山派教程的对比

你之前看的那篇泰山派教程,时间花在什么地方?

泰山派教程的耗时环节对应本指南
下载泰山派 SDK(百度网盘,数 GB)瑞莎构建仓库 git clone(~1 GB)
替换内核源码(Joshua Riek 的 linux-rockchip)瑞莎构建系统自带内核源码,无需替换
交叉编译内核 + 模块完全一样
chroot 装 ubuntu-desktop(极耗时)本指南只装基础系统,如果不需要桌面可跳过
打包 rootfs.img + 烧录本指南直接写入 TF 卡,更简单

本指南比泰山派教程更精简的地方:不需要从百度网盘下载 SDK、不需要手动替换内核源码、不需要打包 .img 文件(直接写 TF 卡)、默认不装桌面环境。整体耗时比泰山派教程少 30-50%。


第一步:搭建瑞莎构建系统,编译 U-Boot 和 Kernel

这一步的目标是产出两块积木——U-Boot 和内核。瑞莎为 Cubie A7A 提供了完整的 Dev Container 构建环境,封装了交叉编译工具链,你不需要手动安装 ARM 编译器。参考文档:环境搭建

1.1 安装 Docker

Docker 是一个容器工具,瑞莎的构建环境就运行在 Docker 容器里。下面的命令安装 Docker 并把你的用户加入 docker 组(这样执行 docker 命令不需要每次加 sudo):

# 更新软件包列表并安装 curl(下载工具)
sudo apt update && sudo apt install curl -y
# 下载 Docker 官方安装脚本并执行
sudo curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# 把你的用户加入 docker 组,避免每次都要 sudo
sudo usermod -aG docker $USER

重启系统使 Docker 组权限生效。验证:

docker --version
docker ps          # 不需要 sudo 即为正常

1.2 安装 VS Code + Dev Containers 插件

VS Code 是代码编辑器,Dev Containers 插件让它能连接到 Docker 容器里工作。瑞莎的构建环境就是通过这个插件自动启动的:

VS Code 下载页面 下载 deb 包并安装:

# 安装下载好的 VS Code deb 包
sudo apt install ./code_*_amd64.deb

打开 VS Code,在左侧 Extensions(扩展)中搜索并安装 Dev Containers 插件。

1.3 克隆瑞莎 Cubie A7A 构建仓库

# 把瑞莎的构建代码下载到本地
git clone https://github.com/radxa-build/radxa-cubie-a7a.git
cd radxa-cubie-a7a

1.4 启动 Dev Container

在 VS Code 中打开 radxa-cubie-a7a 目录。VS Code 检测到 .devcontainer 配置后,会弹出提示 "Reopen in Container",点击确认。

首次启动时,Docker 会自动拉取容器镜像并安装交叉编译工具链,需要下载数 GB 数据,请预留充足时间和磁盘空间。如果拉取失败,检查网络是否能访问 Docker Hub,必要时配置镜像加速。

1.5 编译 U-Boot

U-Boot 是板子通电后第一个运行的程序,它负责初始化硬件、找到内核、把控制权交给内核。下面的命令在容器里编译它:

容器启动后,在 VS Code 终端中执行:

# 进入 U-Boot 源码目录
cd u-boot

# 加载 Cubie A7A 的默认配置
make radxa-cubie-a7a_defconfig
# 编译(-j$(nproc) 表示用所有 CPU 核心并行编译,加快速度)
make -j$(nproc)

编译产物中需要关注的文件:

文件用途
u-boot-sunxi-with-spl.bin完整的 U-Boot + SPL 镜像,需烧录到 TF 卡前部(8KB 偏移处)

1.6 编译 Kernel

内核是操作系统的核心引擎,负责管理 CPU、内存、USB、网卡等所有硬件。编译时你可以根据需要调整配置——比如开启 PREEMPT 抢占模式,对 ROS2 实时性有帮助:

# 进入内核源码目录
cd ../linux

# 加载 Cubie A7A 的默认内核配置
make radxa-cubie-a7a_defconfig

# (可选)如果你需要调整内核配置,取消下面这行的注释
# make menuconfig
# 建议关注:
#   General setup → Preemption Model → Preemptible Kernel (Low-Latency Desktop)
#   这个选项让内核更频繁地切换任务,降低延迟,对 ROS2 实时控制有帮助
#   同时确认 USB、网卡、ext4/vfat 文件系统等驱动已启用

# 编译内核
make -j$(nproc)

编译产物中需要关注的文件:

文件用途
arch/arm64/boot/Image内核镜像
arch/arm64/boot/dts/allwinner/sun55i-t527-radxa-cubie-a7a.dtb设备树文件(具体文件名以实际编译产出为准)
内核模块目录(/lib/modules/<version>/安装内核模块时需要

1.7 保存编译产物

编译完后,需要把产出文件收集起来,后面组装 TF 卡时用:

# 在容器内创建一个临时目录,存放所有编译产物
mkdir -p /tmp/kernel-artifacts
# 复制内核镜像(这是系统启动时加载的核心文件)
cp arch/arm64/boot/Image /tmp/kernel-artifacts/
# 复制设备树文件(描述板子的硬件配置——有哪些外设、引脚怎么连)
cp arch/arm64/boot/dts/allwinner/*.dtb /tmp/kernel-artifacts/
# 安装内核模块(驱动程序集合,比如网卡驱动、USB 驱动)
make modules_install INSTALL_MOD_PATH=/tmp/kernel-artifacts

然后从宿主机将编译产物复制出来(Dev Container 的工作目录默认映射到宿主机,具体路径以实际挂载为准)。


第二步:在虚拟机里构建 Ubuntu 22.04 的"车身"

这一步的目标是产出第三块积木——rootfs,也就是你实际使用的 Ubuntu 系统文件。我们用 debootstrap 这个工具,从 Ubuntu 的软件仓库直接下载一套纯净的 arm64 版 Ubuntu 22.04。

因为你的虚拟机是 x86 架构,而目标系统是 arm64,所以中间需要借助 qemu-aarch64-static 来"模拟"arm64 环境完成系统配置。

2.1 安装依赖

# 更新软件包列表
sudo apt update
# debootstrap:从软件仓库下载完整系统
# qemu-user-static:让 x86 虚拟机模拟运行 arm64 程序
sudo apt install debootstrap qemu-user-static

2.2 用 debootstrap 下载 Ubuntu 22.04 基础系统

# 创建工作目录(所有和移植相关的文件都放这里)
mkdir -p ~/cubie_a7a_ubuntu && cd ~/cubie_a7a_ubuntu

# 第一阶段:从 Ubuntu 软件仓库下载 arm64 版的基础系统文件
# --arch=arm64:目标架构是 arm64
# --foreign:先只下载不解包配置(因为当前 x86 机器无法直接运行 arm64 程序)
# jammy:Ubuntu 22.04 的代号
# ubuntu-rootfs:存放系统文件的目录名
sudo debootstrap --arch=arm64 --foreign jammy ubuntu-rootfs http://ports.ubuntu.com/ubuntu-ports/

2.3 借助 qemu 完成第二阶段配置

# 把 qemu 的 arm64 模拟器复制到 rootfs 里
# 这样 chroot 进去后,arm64 程序就能在 x86 虚拟机上"假装"运行了
sudo cp /usr/bin/qemu-aarch64-static ubuntu-rootfs/usr/bin/

# chroot 进入 rootfs(相当于"假装"自己已经在 arm64 板子上了)
# 执行 debootstrap 的第二阶段——解包、配置所有软件包
sudo chroot ubuntu-rootfs /bin/bash -c "
/debootstrap/debootstrap --second-stage
"

2.4 基础系统配置

给这个"裸系统"装上必要的东西——用户名、密码、网络、SSH 等,让它变成一个真正可用的系统:

sudo chroot ubuntu-rootfs /bin/bash -c "
# 设置主机名(板子在网络上的名字)
echo 'cubie-a7a' > /etc/hostname

# 配置 apt 软件源(告诉系统从哪里下载软件包)
cat > /etc/apt/sources.list << 'EOF'
deb http://ports.ubuntu.com/ubuntu-ports/ jammy main restricted universe multiverse
deb http://ports.ubuntu.com/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb http://ports.ubuntu.com/ubuntu-ports/ jammy-security main restricted universe multiverse
EOF

# 更新软件包列表,安装基础工具
apt update
# vim:文本编辑器  net-tools:网络工具  network-manager:网络管理
# systemd-resolved:DNS 解析  openssh-server:远程登录  avahi-daemon:设备发现
apt install -y sudo vim net-tools network-manager systemd-resolved \
  openssh-server avahi-daemon locales

# 设置系统语言为英文(避免中文乱码问题)
locale-gen en_US.UTF-8
update-locale LANG=en_US.UTF-8

# 创建用户 ubuntu(和香橙派 5 Pro 保持一致,方便脚本复用)
useradd -m -s /bin/bash ubuntu
echo 'ubuntu:ubuntu' | chpasswd
usermod -aG sudo ubuntu

# 设置 root 密码(调试阶段用)
echo 'root:root' | chpasswd
"

2.5 配置网络

让板子启动后能自动联网、能被 SSH 远程登录:

sudo chroot ubuntu-rootfs /bin/bash -c "
# 启用网络管理服务(开机自动启动)
systemctl enable systemd-networkd
systemctl enable systemd-resolved

# 配置以太网自动获取 IP(DHCP)
cat > /etc/systemd/network/20-eth0.network << 'EOF'
[Match]
Name=eth0

[Network]
DHCP=yes
EOF

# 允许 root 通过 SSH 登录(调试阶段用,正式使用记得关掉)
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
"

2.6 安装内核模块

把第一步编译出来的内核模块(驱动程序)复制到 rootfs 里。内核和模块必须版本一致,否则启动后很多硬件无法工作:

# 假设第一步的编译产物已复制到 ~/cubie_a7a_ubuntu/kernel-artifacts/
# 把内核模块复制到 rootfs 的 /lib/modules/ 目录
sudo cp -r ~/cubie_a7a_ubuntu/kernel-artifacts/lib/modules/* \
  ~/cubie_a7a_ubuntu/ubuntu-rootfs/lib/modules/

2.7 清理并退出

# 移除 qemu 模拟器——rootfs 最终要在真实的 arm64 硬件上运行,不需要它了
sudo rm -f ~/cubie_a7a_ubuntu/ubuntu-rootfs/usr/bin/qemu-aarch64-static

echo "rootfs 构建完成,位于: ~/cubie_a7a_ubuntu/ubuntu-rootfs/"

第三步:组装三块积木,烧录到 TF 卡

前两步产出了三样东西——U-Boot、内核、rootfs。这一步把它们拼到一起,写入 TF 卡。插到 Cubie A7A 上通电就能启动。

3.1 给 TF 卡分区

TF 卡需要分成两个区域:一个放内核(boot 分区),一个放系统文件(root 分区)。先把 TF 卡通过读卡器插入电脑,在虚拟机里用 lsblk 确认设备名。务必确认正确,选错会覆盖系统盘

# 列出所有磁盘设备,找到 TF 卡(根据容量判断)
lsblk
# 假设 TF 卡是 /dev/sdb
# 用 fdisk 给 TF 卡分区
sudo fdisk /dev/sdX

# 在 fdisk 中依次输入以下命令:
# g          → 创建 GPT 分区表(现代分区格式)
# n → 1 → <回车> → +256M → 第一个分区,256MB,放内核
# n → 2 → <回车> → <回车> → 第二个分区,剩余全部空间,放系统文件
# w          → 写入分区表并退出
# 格式化两个分区
# boot 分区用 FAT32 格式(U-Boot 能识别的格式)
sudo mkfs.vfat -F 32 /dev/sdX1
# root 分区用 ext4 格式(Linux 原生文件系统)
sudo mkfs.ext4 -L rootfs /dev/sdX2

3.2 烧录 U-Boot(第一块积木)

U-Boot 比较特殊——它不是普通文件,必须写入 TF 卡最前部、分区表之前的"裸区域"。板子通电后,芯片会直接从这里读取并执行:

# 把 U-Boot 写入 TF 卡前部
# seek=8:跳过前 8KB(留给分区表),从第 8KB 处开始写入
sudo dd if=~/cubie_a7a_ubuntu/u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1024 seek=8 conv=sync

注意:of=/dev/sdX 是整张卡(不是 /dev/sdX1),因为 U-Boot 不放在任何分区里。

3.3 复制内核和系统文件到 TF 卡(第二、三块积木)

# 创建临时目录用于挂载 TF 卡的两个分区
mkdir -p ~/cubie_a7a_ubuntu/tf_boot
mkdir -p ~/cubie_a7a_ubuntu/tf_root

# 挂载分区——让 TF 卡的分区变成你电脑上的文件夹
sudo mount /dev/sdX2 ~/cubie_a7a_ubuntu/tf_root   # root 分区
sudo mount /dev/sdX1 ~/cubie_a7a_ubuntu/tf_boot   # boot 分区

# 把整个 Ubuntu 系统复制到 root 分区
sudo cp -a ~/cubie_a7a_ubuntu/ubuntu-rootfs/* ~/cubie_a7a_ubuntu/tf_root/

# 把内核镜像和设备树复制到 boot 分区
sudo cp ~/cubie_a7a_ubuntu/kernel-artifacts/Image ~/cubie_a7a_ubuntu/tf_boot/
sudo cp ~/cubie_a7a_ubuntu/kernel-artifacts/*.dtb ~/cubie_a7a_ubuntu/tf_boot/

3.4 配置启动参数(告诉 U-Boot 怎么启动内核)

U-Boot 启动后需要知道:内核文件在哪、设备树文件在哪、系统分区在哪。这些信息写在 extlinux.conf 里:

# 创建 extlinux 配置目录
sudo mkdir -p ~/cubie_a7a_ubuntu/tf_boot/extlinux

# 写入启动配置文件
sudo tee ~/cubie_a7a_ubuntu/tf_boot/extlinux/extlinux.conf > /dev/null << 'EOF'
TIMEOUT 30
DEFAULT ubuntu

LABEL ubuntu
    LINUX /Image
    FDT /sun55i-t527-radxa-cubie-a7a.dtb
    APPEND root=/dev/mmcblk0p2 rootwait rw console=ttyS0,115200 earlycon
EOF

各行的含义

  • LINUX /Image:告诉 U-Boot 内核文件叫 Image,在 boot 分区根目录
  • FDT /sun55i-t527-radxa-cubie-a7a.dtb:设备树文件名(以第一步实际编译产出的 .dtb 为准)。设备树描述了板子的硬件配置——有哪些外设、引脚怎么连、驱动怎么匹配
  • APPEND root=/dev/mmcblk0p2:系统文件在 TF 卡的第二个分区。mmcblk0 是 TF 卡在 Cubie A7A 上的设备名,p2 是第二个分区
  • console=ttyS0,115200:开启串口输出,方便调试(波特率 115200)
  • earlycon:让内核从启动的最早阶段就开始往串口打印信息,出问题时能看到卡在哪一步

如果第一步编译时在内核配置中看到了全志平台特定的启动参数(如 clk_ignore_unusedpd_ignore_unused),也一并加入 APPEND 行。

3.5 配置 fstab(告诉系统开机后自动挂载分区)

# fstab 是"文件系统挂载表",告诉 Linux 启动后自动把 TF 卡的两个分区挂载到对应目录
sudo tee ~/cubie_a7a_ubuntu/tf_root/etc/fstab > /dev/null << 'EOF'
# root 分区 → 挂载到 /(根目录)
/dev/mmcblk0p2  /       ext4    defaults,noatime    0 1
# boot 分区 → 挂载到 /boot(方便以后更新内核)
/dev/mmcblk0p1  /boot   vfat    defaults,noatime    0 2
EOF

3.6 卸载 TF 卡,完成

# 卸载两个分区(确保所有数据已写入)
sudo umount ~/cubie_a7a_ubuntu/tf_boot
sudo umount ~/cubie_a7a_ubuntu/tf_root

echo "烧录完成!把 TF 卡插入 Cubie A7A,上电启动。"

启动调试

将 TF 卡插入 Cubie A7A,连接调试串口(波特率 115200),上电启动。

首次启动可能遇到的问题及排查方向

现象可能原因排查方向
上电后串口完全无输出U-Boot 未正确烧录检查 dd 命令的 seek=8 偏移是否正确;确认 u-boot-sunxi-with-spl.bin 文件完整
U-Boot 启动但找不到内核extlinux.conf 路径不对确认 boot 分区中 Image 和 dtb 文件路径与 extlinux.conf 中配置一致
内核 panic,root 挂载失败root 分区路径不对检查 extlinux.conf 中 root= 参数,可能需要改为 root=PARTUUID=...
内核启动但 systemd 服务大量失败内核模块版本与内核不匹配确认内核模块是从同一次编译产出的,uname -r/lib/modules/ 目录名一致
网络不通网卡设备名不匹配ip link 查看实际网卡名,修改 /etc/systemd/network/20-eth0.network 中的 Name= 字段
SSH 连不上SSH 服务未启动或网络不通串口登录后执行 systemctl status ssh,检查网卡是否获取到 IP

后续步骤

完成前三步并成功启动后:

  1. 第四步(验证基础功能):网络连通性、SSH 登录、CPU 频率调节、存储读写性能
  2. 第五步(安装 ROS2 Humble):添加 ROS2 apt 仓库,apt install ros-humble-ros-base,跑通 talker/listener
  3. 第六步(GPU 和 NPU 驱动适配):GPU 驱动需确认 Ubuntu 22.04 的 mesa 版本是否支持 IMG BXE-2-32;NPU 用户态库需验证与 glibc 2.35 的兼容性
0

评论区