当前位置:首页 > 系统教程 > 正文

RK3506开发板构建Ubuntu 22.04系统:从零开始的保姆级教程(基于Ubuntu 22.04的RK3506根文件系统构建与烧录指南)

欢迎来到嵌入式开发的世界!如果你手上有一块RK3506开发板,并且希望为其运行功能强大的Ubuntu 22.04系统,那么这篇教程正是为你准备的。本文将手把手地带你完成整个流程,从环境准备、SDK编译到根文件系统制作,全程详细解读,即使你是刚入门的小白也能轻松跟上。

RK3506开发板构建Ubuntu 22.04系统:从零开始的保姆级教程(基于Ubuntu 22.04的RK3506根文件系统构建与烧录指南) RK3506  Ubuntu 22.04 根文件系统 嵌入式开发 第1张

一、准备工作:搭建坚固的地基

在开始激动人心的构建之旅前,我们需要准备好所有“建筑材料”和“工具”。这一步至关重要,可以避免后续遇到各种奇怪的问题。

1.1 强大的编译主机

推荐使用一台运行 Ubuntu 22.04 操作系统的电脑(物理机或性能强劲的虚拟机均可)。几乎所有RK3506的官方SDK和文档都是基于此版本开发的,可以确保最佳的兼容性 -1-3。

1.2 获取必要的软件包

打开终端,首先更新你的软件包列表,然后安装一系列编译所需的工具和依赖库。复制以下命令并执行:

sudo apt updatesudo apt-get install repo git ssh make gcc libssl-dev liblz4-tool expect g++ patchelf chrpath gawk texinfo diffstat binfmt-support qemu-user-static live-build bison flex fakeroot cmake unzip device-tree-compiler ncurses-dev -y

这些工具是编译U-Boot、Kernel和文件系统的基础 -3-6。

1.3 获取RK3506 Linux SDK

RK3506的Linux SDK通常由开发板厂商提供。你需要从官方获取SDK压缩包。假设我们将其解压到用户目录下的 proj/rk3506_sdk 文件夹:

mkdir -p ~/proj/rk3506_sdkcd ~/proj/rk3506_sdk# 将下载好的SDK压缩包放在此处,并解压7z x /path/to/your/rk3506_sdk.7z.001

注意:整个编译过程请始终使用普通用户操作,避免使用root权限,以防止不必要的权限问题 -3-6。

二、编译SDK基础组件:打造系统的骨架

Ubuntu系统需要引导加载程序(U-Boot)和Linux内核才能启动。这些部分我们可以直接使用SDK编译生成。

2.1 配置编译环境

进入SDK根目录,首先为你的开发板选择正确的默认配置。以Firefly的ROC-RK3506J-CC为例(请根据你的实际板型修改):

cd ~/proj/rk3506_sdk./build.sh firefly_rk3506_roc-rk3506b-cc-emmc_buildroot_defconfig

2.2 编译U-Boot和Kernel

执行以下命令分别编译U-Boot和内核。编译生成的镜像文件(如 uboot.imgboot.img)可以在相应的目录中找到 -1。

./build.sh uboot./build.sh kernel

三、构建Ubuntu 22.04根文件系统:注入系统的灵魂

这是将Ubuntu引入RK3506的核心步骤。我们将使用 debootstrap 工具,从零构建一个纯净的Ubuntu 22.04根文件系统。

3.1 使用debootstrap创建基础文件系统

debootstrap 是一个神奇的工具,它能直接下载Ubuntu的基础包并安装到一个目录中。

sudo apt install debootstrap -y# 创建一个目录来存放根文件系统mkdir -p ~/ubuntu22-rootfs# 开始构建基础系统,这里选择的是Ubuntu 22.04 (Jammy Jellyfish)sudo debootstrap --arch=armhf jammy ~/ubuntu22-rootfs http://ports.ubuntu.com/

注意RK3506的Cortex-A7核心是32位的,因此我们指定 --arch=armhf。这个过程需要一些时间,取决于你的网络速度 -2。

3.2 配置核心系统(Chroot环境)

基础文件系统构建完成后,我们需要通过 chroot “进入”这个新系统,对其进行一些基本配置 -2。

# 挂载必要的文件系统sudo mount --bind /dev ~/ubuntu22-rootfs/devsudo mount --bind /proc ~/ubuntu22-rootfs/procsudo mount --bind /sys ~/ubuntu22-rootfs/sys# 使用chroot进入新系统sudo chroot ~/ubuntu22-rootfs

进入chroot环境后,你的终端提示符会发生变化。接下来进行如下配置:

# 1. 设置时区为上海echo "Asia/Shanghai" > /etc/timezoneln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime# 2. 更新软件源并安装常用软件apt updateapt install -y language-pack-en base-files sudo ssh net-tools ethtool htop vim bash-completion# 3. 设置主机名echo "rk3506-ubuntu" > /etc/hostname# 4. 设置root密码(强烈建议设置)passwd root# 5. 创建普通用户(可选)# useradd -m -s /bin/bash 你的用户名# passwd 你的用户名# 6. 配置fstab文件,让系统启动时自动挂载分区cat << EOF > /etc/fstab# 根据你的实际分区情况调整,例如dev/mmcblk0p3  /  ext4  defaults  0  1EOF# 7. 退出chrootexit

退出chroot后,记得取消挂载:

sudo umount ~/ubuntu22-rootfs/devsudo umount ~/ubuntu22-rootfs/procsudo umount ~/ubuntu22-rootfs/sys

3.3 打包根文件系统

配置完成后,我们将整个文件系统目录打包成一个镜像文件,以便烧录到开发板的存储介质中 -2。

# 创建一个空的镜像文件,例如大小为3GBdd if=/dev/zero of=ubuntu22-rootfs.img bs=1M count=3072# 格式化ext4mkfs.ext4 ubuntu22-rootfs.img# 挂载镜像mkdir -p /mnt/rootfssudo mount ubuntu22-rootfs.img /mnt/rootfs# 将制作好的根文件系统内容全部复制进去sudo cp -rf ~/ubuntu22-rootfs/* /mnt/rootfs/# 卸载镜像sudo umount /mnt/rootfs# 检查并修复文件系统e2fsck -p -f ubuntu22-rootfs.img# 精简镜像大小resize2fs -M ubuntu22-rootfs.img

至此,我们已经成功构建了一个可以用于RK3506的Ubuntu 22.04根文件系统镜像 (ubuntu22-rootfs.img)。

四、烧录与启动:见证奇迹的时刻

将我们编译好的U-Boot、Kernel和刚制作的Ubuntu根文件系统烧录到开发板上。

4.1 准备烧录工具和镜像

瑞芯微开发板通常使用官方工具 RKDevTool (Windows) 进行烧录。在Windows电脑上安装驱动并打开工具 -7。你需要准备以下镜像文件:

  • uboot.img: 从SDK的 u-boot/ 目录获取。
  • boot.img: 从SDK的 kernel/ 目录获取。
  • ubuntu22-rootfs.img: 我们刚刚制作的文件系统镜像。

4.2 进入Loader模式并烧录

1. 使用USB线连接开发板的OTG口到Windows电脑。2. 按住开发板上的 RECOVERY (或类似功能的) 键,然后上电或按复位键,使开发板进入Loader模式。RKDevTool会提示“发现一个LOADER设备”。3. 在工具的“下载镜像”或“分区表”页面,将 uboot.img 分配给 uboot 分区,boot.img 分配给 boot 分区,ubuntu22-rootfs.img 分配给 rootfs 分区。4. 点击“执行”开始烧录 -7。

4.3 启动新系统

烧录完成后,断开开发板与电脑的连接,通过串口连接到调试串口,然后重新上电。如果一切顺利,你将看到U-Boot启动,加载内核,最后进入Ubuntu 22.04的登录提示符!使用你之前设置的root密码即可登录,一个属于你自己的、功能完备的嵌入式Ubuntu系统就此诞生!

在整个构建过程中,涉及了 RK3506 的底层驱动适配、Ubuntu 22.04 的软件包管理以及嵌入式Linux系统构建的关键环节,这是一个非常有价值的实践项目,能帮助你深入理解现代嵌入式开发的完整流程。祝你玩得开心!