news 2026/5/17 6:07:39

告别黑盒:手把手教你为Pico PC RK3588S定制自己的Ubuntu 20.04根文件系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
告别黑盒:手把手教你为Pico PC RK3588S定制自己的Ubuntu 20.04根文件系统

告别黑盒:手把手教你为Pico PC RK3588S定制自己的Ubuntu 20.04根文件系统

当拿到一块Pico PC RK3588S开发板时,很多开发者都会面临一个选择:是直接使用厂商预置的固件,还是从零开始构建一个完全可控的根文件系统?前者虽然方便,但却像使用一个"黑盒",你无法确切知道里面装了什么,也无法进行深度定制。而后者,虽然需要投入更多时间和精力,却能让你对系统的每一个细节了如指掌,真正做到"我的系统我做主"。

本文将带你一步步从Ubuntu Base开始,构建一个精简、高效且完全符合你项目需求的根文件系统。不同于简单的搭建流程,我们将重点关注如何根据实际需求选择软件包、优化系统服务配置、解决依赖和兼容性问题,最终打造一个真正属于你的嵌入式Linux系统。

1. 准备工作与环境搭建

在开始构建根文件系统之前,我们需要做好充分的准备工作。这包括获取必要的工具链、准备开发环境,以及理解RK3588S平台的特殊需求。

1.1 硬件与软件需求

为了顺利完成根文件系统的构建,你需要准备以下硬件和软件:

  • 开发板:Pico PC RK3588S开发板
  • 主机环境:运行Ubuntu 20.04或更高版本的x86_64主机(物理机或虚拟机)
  • 必要工具
    • qemu-user-static:用于在x86主机上模拟arm64环境
    • RKDevTool:Rockchip官方烧录工具
    • 远程连接工具(如MobaXterm或Minicom)

安装基础工具链的命令如下:

sudo apt update sudo apt install qemu-user-static binfmt-support

1.2 获取Ubuntu Base镜像

Ubuntu官方提供了最小化的基础镜像,这是我们构建根文件系统的起点。访问Ubuntu官方镜像站点下载适用于arm64架构的Ubuntu Base 20.04.6镜像:

wget http://cdimage.ubuntu.com/ubuntu-base/releases/20.04.6/release/ubuntu-base-20.04.6-base-arm64.tar.gz

下载完成后,创建一个工作目录并解压镜像:

mkdir -p ~/rk3588s/ubuntu_rootfs sudo tar -xpf ubuntu-base-20.04.6-base-arm64.tar.gz -C ~/rk3588s/ubuntu_rootfs

注意:解压时必须使用root权限,以确保文件权限和属性正确保留。

2. 基础系统配置

有了基础镜像后,我们需要对其进行初步配置,使其能够在RK3588S平台上正常运行。

2.1 配置QEMU模拟器

为了让x86主机能够运行arm64环境的命令,我们需要配置QEMU用户态模拟:

sudo cp /usr/bin/qemu-aarch64-static ~/rk3588s/ubuntu_rootfs/usr/bin/

2.2 网络与软件源配置

为了能够在chroot环境中安装软件,我们需要配置网络和软件源:

  1. 拷贝主机的DNS配置:

    sudo cp -b /etc/resolv.conf ~/rk3588s/ubuntu_rootfs/etc/
  2. 配置国内镜像源以提高下载速度。编辑~/rk3588s/ubuntu_rootfs/etc/apt/sources.list,替换为阿里云镜像源:

    deb http://mirrors.aliyun.com/ubuntu-ports/ focal main restricted deb http://mirrors.aliyun.com/ubuntu-ports/ focal-updates main restricted deb http://mirrors.aliyun.com/ubuntu-ports/ focal universe deb http://mirrors.aliyun.com/ubuntu-ports/ focal-updates universe deb http://mirrors.aliyun.com/ubuntu-ports/ focal multiverse deb http://mirrors.aliyun.com/ubuntu-ports/ focal-updates multiverse deb http://mirrors.aliyun.com/ubuntu-ports/ focal-backports main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu-ports/ focal-security main restricted deb http://mirrors.aliyun.com/ubuntu-ports/ focal-security universe deb http://mirrors.aliyun.com/ubuntu-ports/ focal-security multiverse

2.3 挂载与进入chroot环境

为了方便操作,我们创建一个挂载脚本mount.sh

#!/bin/bash function mnt() { echo "MOUNTING" sudo mount -t proc /proc ${2}proc sudo mount -t sysfs /sys ${2}sys sudo mount -o bind /dev ${2}dev sudo mount -o bind /dev/pts ${2}dev/pts sudo chroot ${2} } function umnt() { echo "UNMOUNTING" sudo umount ${2}proc sudo umount ${2}sys sudo umount ${2}dev/pts sudo umount ${2}dev } if [ "$1" == "-m" ] && [ -n "$2" ]; then mnt $1 $2 elif [ "$1" == "-u" ] && [ -n "$2" ]; then umnt $1 $2 else echo "" echo "Usage: $0 -m /path/to/rootfs/ (mount)" echo " $0 -u /path/to/rootfs/ (umount)" echo "" fi

赋予执行权限后,可以这样使用:

chmod +x mount.sh ./mount.sh -m ~/rk3588s/ubuntu_rootfs/

3. 系统定制与优化

进入chroot环境后,我们就可以开始对系统进行深度定制了。这一部分是整个过程中最具挑战性也最有价值的部分。

3.1 基础软件包安装

首先更新软件包列表并安装基础工具:

apt update apt upgrade -y apt install -y apt-utils dialog vim sudo bash-completion

接下来安装网络相关工具:

apt install -y net-tools iputils-ping ifupdown ethtool \ wireless-tools network-manager ssh rsync

3.2 系统本地化配置

配置时区和语言环境:

apt install -y locales tzdata dpkg-reconfigure tzdata # 选择Asia/Shanghai dpkg-reconfigure locales # 选择en_US.UTF-8和zh_CN.UTF-8

3.3 用户与权限管理

创建一个普通用户并设置密码:

useradd -s '/bin/bash' -m -G adm,sudo ubuntu passwd ubuntu passwd root

配置主机名:

echo "RK3588S" > /etc/hostname echo "127.0.0.1 localhost RK3588S" >> /etc/hosts

3.4 系统服务优化

RK3588S作为嵌入式平台,我们需要对系统服务进行优化以减少资源占用和启动时间。

  1. 禁用不必要的服务:

    systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
  2. 缩短网络等待时间:

    sed -i 's/TimeoutStartSec=5min/TimeoutStartSec=5sec/' /lib/systemd/system/networking.service
  3. 减少系统默认等待时间:

    echo "DefaultTimeoutStopSec=2s" >> /etc/systemd/system.conf

3.5 第一次启动扩展分区

创建首次启动扩展分区的服务:

cat > /etc/init.d/firstboot.sh << 'EOF' #!/bin/bash -e if [ ! -e "/usr/local/first_boot_flag" ]; then echo "Resizing /dev/mmcblk0p6..." resize2fs /dev/mmcblk0p6 touch /usr/local/first_boot_flag fi EOF chmod +x /etc/init.d/firstboot.sh cat > /lib/systemd/system/firstboot.service << 'EOF' [Unit] Description=Setup rockchip platform environment Before=lightdm.service After=resize-helper.service [Service] Type=simple ExecStart=/etc/init.d/firstboot.sh [Install] WantedBy=multi-user.target EOF systemctl enable firstboot.service

4. 构建与部署根文件系统

完成所有定制后,我们需要将根文件系统打包成镜像,以便烧录到开发板。

4.1 创建根文件系统镜像

创建一个脚本mkimage.sh来自动化这个过程:

#!/bin/bash ROOTFS_DIR=$1 IMAGE_FILE=$2 IMAGE_SIZE=6144 # MB if [ -z "$ROOTFS_DIR" ] || [ -z "$IMAGE_FILE" ]; then echo "Usage: $0 <rootfs_dir> <image_file>" exit 1 fi echo "[1/5] Creating empty image file..." dd if=/dev/zero of="$IMAGE_FILE" bs=1M count=$IMAGE_SIZE echo "[2/5] Formatting as ext4..." mkfs.ext4 -F -L linuxroot "$IMAGE_FILE" echo "[3/5] Mounting and copying files..." mkdir -p mnt mount "$IMAGE_FILE" mnt cp -rfp "$ROOTFS_DIR"/* mnt/ sync umount mnt rmdir mnt echo "[4/5] Checking and resizing filesystem..." e2fsck -p -f "$IMAGE_FILE" resize2fs -M "$IMAGE_FILE" echo "[5/5] Done. Image created: $IMAGE_FILE"

使用脚本创建镜像:

chmod +x mkimage.sh ./mkimage.sh ~/rk3588s/ubuntu_rootfs/ rootfs.img

4.2 烧录到开发板

使用RKDevTool将生成的rootfs.img烧录到开发板:

  1. 将开发板进入Loader模式(通常需要按住某个按键同时上电)
  2. 连接开发板到主机
  3. 打开RKDevTool,选择生成的rootfs.img文件
  4. 点击"执行"开始烧录

烧录完成后,开发板将启动你定制的Ubuntu系统。首次启动时会自动扩展根文件系统分区以充分利用存储空间。

5. 高级定制技巧

对于有特殊需求的开发者,这里提供一些高级定制技巧,让你的系统更加贴合项目需求。

5.1 精简系统大小

嵌入式系统往往对存储空间有严格要求,可以通过以下方式进一步精简系统:

  1. 删除不必要的文档和语言包:

    apt-get purge -y '^libreoffice.*' '^thunderbird.*' '^firefox.*' \ '^evolution.*' '^transmission.*' '^rhythmbox.*' \ '^shotwell.*' '^cheese.*' '^simple-scan.*'
  2. 清理缓存和下载的软件包:

    apt-get autoremove -y --purge apt-get clean
  3. 使用localepurge工具删除不需要的语言包:

    apt install -y localepurge localepurge

5.2 优化启动速度

通过分析系统启动过程,可以识别并优化耗时较长的服务:

  1. 安装分析工具:

    apt install -y bootchart2
  2. 生成启动分析报告后,禁用不必要的服务:

    systemctl disable <unnecessary-service>
  3. 并行启动服务:

    sed -i 's/^#Parallelize.*/Parallelize=yes/' /etc/systemd/system.conf

5.3 添加自定义内核模块

如果需要特定的硬件支持,可以添加自定义内核模块:

  1. 将编译好的内核模块(.ko文件)放入/lib/modules/$(uname -r)/kernel/相应目录

  2. 更新模块依赖:

    depmod -a
  3. 配置模块自动加载:

    echo "module_name" > /etc/modules-load.d/custom.conf

5.4 创建只读根文件系统

对于工业级应用,可能需要将根文件系统设为只读以提高可靠性:

  1. 修改fstab,将根分区挂载为只读:

    /dev/mmcblk0p6 / ext4 ro,noatime,errors=remount-ro 0 1
  2. 创建tmpfs挂载点用于存储临时文件:

    tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0 tmpfs /var/log tmpfs defaults,nosuid,nodev 0 0
  3. 配置系统服务适应只读根文件系统:

    systemctl enable overlayroot.service

6. 常见问题解决

在实际操作过程中,可能会遇到各种问题。这里列出一些常见问题及其解决方法。

6.1 软件包安装失败

问题:在chroot环境中安装软件包时出现GPG错误。

解决方案

chmod 1777 /tmp apt update

6.2 网络连接问题

问题:系统启动后网络不可用,NetworkManager报告"unmanaged"状态。

解决方案:编辑配置文件:

cat > /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf << 'EOF' [keyfile] unmanaged-devices=*,except:type:ethernet,except:type:wifi,except:type:gsm,except:type:cdma EOF

6.3 串口控制台配置

问题:需要通过串口自动登录root账户。

解决方案:修改串口服务配置:

sed -i 's/^ExecStart=.*/ExecStart=-\/sbin\/agetty --autologin root --noclear %I $TERM/' \ /lib/systemd/system/serial-getty@.service

6.4 图形界面配置

问题:需要启用root用户登录图形界面。

解决方案

  1. 编辑lightdm配置:

    echo "greeter-show-manual-login=true" >> /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf echo "all-guest=false" >> /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf
  2. 修改PAM配置:

    sed -i 's/^auth.*pam_succeed_if.so user != root.*$/#\0/' /etc/pam.d/gdm-*

6.5 镜像大小优化

问题:生成的根文件系统镜像过大。

解决方案

  1. 在制作镜像前清理系统:

    apt clean rm -rf /var/lib/apt/lists/*
  2. 使用更高效的文件系统压缩方法:

    /sbin/e2fsck -p -f rootfs.img /sbin/resize2fs -M rootfs.img
  3. 考虑使用squashfs等压缩文件系统格式。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/9 3:42:30

智能反射面辅助无人机安全通信matlab源代码

相关专栏: 无线通信算法仿真_zero123123asd的博客-CSDN博客https://blog.csdn.net/zero123123asd/category_13148183.html 代码介绍 基于连续凸近似和交替优化求解智能反射面辅助

作者头像 李华
网站建设 2026/5/13 19:45:54

GHelper:华硕笔记本硬件控制与性能优化的轻量级开源解决方案

GHelper&#xff1a;华硕笔记本硬件控制与性能优化的轻量级开源解决方案 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Str…

作者头像 李华
网站建设 2026/4/9 3:38:39

DDColor快速体验:无需复杂配置,上传图片秒变彩色老照片

DDColor快速体验&#xff1a;无需复杂配置&#xff0c;上传图片秒变彩色老照片 1. 为什么选择DDColor修复老照片 黑白老照片承载着珍贵的历史记忆&#xff0c;但缺乏色彩往往让画面显得单调。传统的手工上色方法不仅耗时耗力&#xff0c;而且对操作者的美术功底要求极高。DDC…

作者头像 李华
网站建设 2026/5/9 17:14:53

从零到一:在CentOS 8上构建LNMP环境并部署WordPress实战

1. 环境准备与基础配置 在开始搭建LNMP环境之前&#xff0c;我们需要确保CentOS 8系统处于最佳状态。我建议使用全新的系统环境&#xff0c;这样可以避免各种依赖冲突问题。首先通过SSH连接到服务器&#xff0c;使用dnf update命令更新所有系统软件包。这个步骤很重要&#xff…

作者头像 李华
网站建设 2026/4/10 4:40:26

OpenClaw网关高级配置:Qwen3-32B镜像的负载均衡与超时优化

OpenClaw网关高级配置&#xff1a;Qwen3-32B镜像的负载均衡与超时优化 1. 为什么需要关注网关配置&#xff1f; 去年冬天&#xff0c;当我第一次用OpenClaw对接本地部署的Qwen3-32B模型时&#xff0c;遇到了一个尴尬的问题&#xff1a;连续处理5个长文档分析任务后&#xff0…

作者头像 李华