1. 瑞米派与Ubuntu系统移植概述
瑞米派(Remi Pi)是米尔电子推出的一款高性能嵌入式开发板,基于瑞芯微RK3568处理器设计,具备4核Cortex-A55架构和1.8GHz主频。这款开发板在工业控制、边缘计算和物联网网关等领域有着广泛应用。将Ubuntu系统移植到瑞米派上,可以充分利用Ubuntu丰富的软件生态和开发工具链,为嵌入式应用开发提供更灵活的环境。
Ubuntu 22.04 LTS(Jammy Jellyfish)作为长期支持版本,提供了5年的安全更新支持,特别适合需要稳定运行的嵌入式场景。与传统的嵌入式Linux发行版相比,Ubuntu提供了更完善的包管理系统和更丰富的软件仓库,开发者可以轻松安装各种开发工具和运行时环境。
系统移植的核心在于让Ubuntu能够正确识别瑞米派的硬件架构,并加载相应的驱动程序。RK3568处理器采用ARMv8-A架构,因此我们需要使用ARM64版本的Ubuntu作为基础。移植过程主要包括uboot适配、内核定制、根文件系统构建和设备树配置等关键环节。
2. 开发环境准备与工具链配置
2.1 主机开发环境搭建
推荐使用Ubuntu 20.04或22.04作为开发主机系统,这样可以获得最佳的兼容性。以下是需要安装的基础工具包:
sudo apt update sudo apt install -y git build-essential bc bison flex libssl-dev \ libncurses5-dev device-tree-compiler lzop u-boot-tools \ gcc-aarch64-linux-gnu g++-aarch64-linux-gnu对于交叉编译工具链,建议使用Linaro官方提供的gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu版本。安装完成后,需要将工具链路径添加到环境变量中:
echo 'export PATH=$PATH:/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin' >> ~/.bashrc source ~/.bashrc2.2 源代码获取
需要准备以下关键组件的源代码:
- U-Boot:瑞芯微提供的定制版本
- Linux内核:建议使用linux-5.10.y分支
- Ubuntu Base:从Ubuntu官方获取arm64架构的base镜像
使用以下命令获取内核源代码:
git clone -b linux-5.10.y https://github.com/rockchip-linux/kernel.git2.3 构建环境验证
在开始移植前,建议先验证交叉编译环境是否正常工作:
aarch64-linux-gnu-gcc --version如果输出显示交叉编译器版本信息,说明环境配置正确。接下来可以尝试编译一个简单的Hello World程序进行测试:
// hello.c #include <stdio.h> int main() { printf("Hello, Remi Pi!\n"); return 0; }使用交叉编译器编译:
aarch64-linux-gnu-gcc -o hello hello.c使用file命令检查生成的二进制文件架构:
file hello正确的输出应该显示"ARM aarch64"架构。
3. U-Boot适配与编译
3.1 U-Boot源代码准备
瑞米派使用的U-Boot是瑞芯微提供的定制版本,需要从官方仓库获取:
git clone https://github.com/rockchip-linux/u-boot.git -b master进入u-boot目录后,首先需要配置瑞米派对应的defconfig:
make CROSS_COMPILE=aarch64-linux-gnu- rockchip_rk3568_defconfig3.2 U-Boot配置调整
瑞米派的存储设备通常为eMMC或SD卡,需要在配置中正确设置:
- 打开.config文件,确保以下配置项已启用:
CONFIG_ROCKCHIP_RK3568=y CONFIG_TARGET_EVB_RK3568=y CONFIG_CMD_MMC=y CONFIG_CMD_USB=y CONFIG_CMD_FS_GENERIC=y- 修改环境变量存储位置:
CONFIG_ENV_IS_IN_MMC=y CONFIG_SYS_MMC_ENV_DEV=0 CONFIG_SYS_MMC_ENV_PART=03.3 U-Boot编译与烧写
执行编译命令:
make CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc)编译完成后会生成以下关键文件:
- u-boot.bin:原始的U-Boot二进制文件
- idbloader.img:Rockchip专用的第一阶段加载器
- u-boot.itb:包含U-Boot和设备树的镜像文件
使用瑞芯微提供的工具将U-Boot烧写到SD卡:
sudo rkdeveloptool db rk356x_spl_loader_v1.08.111.bin sudo rkdeveloptool wl 0x40 idbloader.img sudo rkdeveloptool wl 0x4000 u-boot.itb注意:烧写前请确保SD卡已正确连接到开发主机,并且所有重要数据已备份,烧写过程会擦除SD卡上的数据。
4. Linux内核定制与编译
4.1 内核配置
进入之前下载的内核源代码目录,首先导入瑞米派的默认配置:
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- rockchip_linux_defconfig然后根据需要进行定制化配置:
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig关键的配置选项包括:
- 处理器类型:
- CPU类型选择Cortex-A55
- 启用ARMv8.2-A ISA扩展
- 设备驱动:
- 启用RK3568相关的GPIO、PWM、I2C、SPI等外设驱动
- 配置正确的显示输出接口(如HDMI或MIPI-DSI)
- 文件系统支持:
- 确保EXT4、SQUASHFS等常用文件系统已启用
- 启用OVERLAYFS支持,用于Ubuntu Core的snap系统
4.2 内核编译
执行编译命令:
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc)编译完成后,关键生成文件位于:
- arch/arm64/boot/Image:内核镜像
- arch/arm64/boot/dts/rockchip/rk3568-remi-pi.dtb:设备树二进制文件
4.3 内核模块安装
首先创建模块安装目录:
mkdir -p kernel_modules然后安装内核模块:
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=$(pwd)/kernel_modules modules_install这将把所有内核模块安装到kernel_modules目录下,后续构建根文件系统时需要将这些模块复制到/lib/modules目录中。
5. Ubuntu根文件系统构建
5.1 获取Ubuntu Base镜像
从Ubuntu官方下载arm64架构的base镜像:
wget http://cdimage.ubuntu.com/ubuntu-base/releases/22.04/release/ubuntu-base-22.04.1-base-arm64.tar.gz创建根文件系统目录并解压:
mkdir rootfs sudo tar -xzf ubuntu-base-22.04.1-base-arm64.tar.gz -C rootfs5.2 基础系统配置
首先需要配置qemu-user-static来在主机上运行arm64程序:
sudo apt install qemu-user-static sudo cp /usr/bin/qemu-aarch64-static rootfs/usr/bin/然后chroot到目标文件系统进行配置:
sudo chroot rootfs /bin/bash在chroot环境中执行以下基本配置:
apt update apt install -y systemd-sysv ubuntu-minimal apt install -y net-tools iputils-ping openssh-server设置root密码和创建普通用户:
passwd root adduser ubuntu usermod -aG sudo ubuntu配置网络:
echo "remi-pi" > /etc/hostname echo "127.0.0.1 localhost" >> /etc/hosts echo "127.0.1.1 remi-pi" >> /etc/hosts退出chroot环境:
exit5.3 安装内核模块
将之前编译的内核模块复制到根文件系统中:
sudo cp -r kernel_modules/lib rootfs/5.4 配置串口控制台
为了让系统可以通过瑞米派的调试串口登录,需要修改/etc/systemd/system/getty.target.wants目录下的串口服务配置:
sudo sed -i 's/^ExecStart=.*/ExecStart=-\/sbin\/agetty -a root -L 115200 ttyS2 vt100/' rootfs/lib/systemd/system/serial-getty@.service sudo ln -s /lib/systemd/system/serial-getty@.service rootfs/etc/systemd/system/getty.target.wants/serial-getty@ttyS2.service6. 系统镜像打包与烧写
6.1 创建磁盘镜像
首先创建一个4GB大小的磁盘镜像文件:
dd if=/dev/zero of=remi-pi-ubuntu.img bs=1M count=4096然后对镜像进行分区:
fdisk remi-pi-ubuntu.img按照以下步骤创建分区表:
- 输入g创建GPT分区表
- 输入n创建新分区,选择默认值创建16MB大小的启动分区
- 输入t,选择分区类型为"U-Boot SPL"
- 输入n创建第二个分区,使用剩余空间作为根文件系统分区
- 输入w保存分区表
6.2 格式化分区
将镜像文件映射为loop设备:
sudo losetup -Pf remi-pi-ubuntu.img假设loop设备为/dev/loop0,格式化分区:
sudo mkfs.vfat -F 32 /dev/loop0p1 -n boot sudo mkfs.ext4 /dev/loop0p2 -L rootfs6.3 写入U-Boot和内核
挂载boot分区并写入U-Boot:
sudo mount /dev/loop0p1 /mnt sudo cp idbloader.img /mnt/ sudo cp u-boot.itb /mnt/ sudo umount /mnt挂载根文件系统分区并复制根文件系统:
sudo mount /dev/loop0p2 /mnt sudo cp -a rootfs/* /mnt/ sudo cp arch/arm64/boot/Image /mnt/boot/ sudo cp arch/arm64/boot/dts/rockchip/rk3568-remi-pi.dtb /mnt/boot/ sudo umount /mnt6.4 烧写到瑞米派
将SD卡插入开发主机,确认设备名称(如/dev/sdb),然后使用dd命令烧写镜像:
sudo dd if=remi-pi-ubuntu.img of=/dev/sdb bs=4M status=progress sync7. 系统启动与调试
7.1 首次启动配置
将SD卡插入瑞米派,连接串口调试工具(如USB转TTL模块),波特率设置为115200。上电后应该能看到U-Boot的启动信息。
在U-Boot命令行中设置启动参数:
setenv bootargs "console=ttyS2,115200 earlycon=uart8250,mmio32,0xfe660000 root=/dev/mmcblk0p2 rw rootwait" setenv bootcmd "load mmc 0:1 0x02080000 Image; load mmc 0:1 0x06000000 rk3568-remi-pi.dtb; booti 0x02080000 - 0x06000000" saveenv boot7.2 系统优化与配置
成功启动后,可以进行以下优化配置:
- 更新软件源并升级系统:
apt update apt upgrade -y- 安装常用工具:
apt install -y vim git curl wget net-tools- 配置SSH服务:
systemctl enable ssh systemctl start ssh- 调整文件系统大小(如果使用了比镜像更大的存储设备):
resize2fs /dev/mmcblk0p27.3 常见问题排查
启动卡在U-Boot阶段:
- 检查U-Boot版本是否匹配RK3568
- 验证SD卡烧写是否正确
- 确认启动参数中的设备节点名称是否正确
内核panic或无法挂载根文件系统:
- 检查内核配置是否包含必要的文件系统驱动
- 确认bootargs中的root参数指向正确的分区
- 验证根文件系统是否完整
网络无法正常工作:
- 检查内核是否包含正确的以太网驱动
- 验证设备树中的网络配置
- 确认/etc/network/interfaces配置正确
8. 进阶配置与优化
8.1 图形界面安装
如果需要图形界面,可以安装Ubuntu Desktop:
apt install -y ubuntu-desktop对于嵌入式应用,更推荐安装轻量级的LXDE桌面:
apt install -y lxde-core lightdm8.2 硬件加速配置
RK3568内置Mali-G52 GPU,需要安装对应的驱动:
apt install -y mali-bifrost-g52-g2p0-wayland-gbm配置X11使用硬件加速:
mkdir -p /etc/X11/xorg.conf.d cat > /etc/X11/xorg.conf.d/20-mali.conf <<EOF Section "Device" Identifier "Mali Graphics" Driver "modesetting" Option "AccelMethod" "glamor" EndSection EOF8.3 性能优化建议
- 调整CPU调度策略:
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor- 优化内存使用:
echo vm.swappiness=10 >> /etc/sysctl.conf- 启用zram交换空间:
apt install -y zram-config- 禁用不必要的服务:
systemctl disable bluetooth.service systemctl disable ModemManager.service8.4 应用程序打包与部署
对于生产环境,建议使用snap或docker打包应用程序:
- 安装snapd:
apt install -y snapd- 安装docker:
apt install -y docker.io- 创建自定义snap:
snapcraft init在项目目录中编辑snapcraft.yaml文件,定义应用程序的构建和运行方式,然后打包:
snapcraft生成的.snap文件可以直接安装到瑞米派上:
snap install --dangerous your-app_1.0_arm64.snap