RK3588移植Ubuntu 24.04(讯为开发板为例)

发布于:2025-09-11 ⋅ 阅读:(17) ⋅ 点赞:(0)

RK3588(讯为开发板为例子)移植Ubuntu 24.04

前言

​ 这个事情好像没啥技术含量,但是我发现好像基本上没啥人干,这里呢,笔者基于自己的讯为RK3588的SDK开发板的源码上,添加了ubuntu24.04。当然这个是笔者的尝试。具体的步骤兄弟们可以结合自己的Linux系统裁剪经验自己试试客制化

下载SDK,或者在自己的基础上改

​ 讯为组织了一套SDK源码编译流程,一般而言,我们的最终镜像文件集合是由这样的步骤得到的:

  • 编译uboot作为启动
  • 编译内核作为操作系统核新
  • 编译recovery作为修复+更新恢复模式逻辑,用于 OTA 或故障修复
  • 编译rootfs作为根文件系统(⭐咱们就是搞这一步就好)
  • 集合我们的各个镜像文件

​ 所以我们重点需要做的是替换rootfs.img,也就是整合的Ubuntu24.04源码,这个是我们的关键。

​ 如果你还没有跑通一个SDK编译,先把这个编译跑通了,然后我们再说后面的事情。(注意,要求是要有开启对应屏幕的驱动的)

下载Ubuntu24.04根文件系统

​ 我们下一步就是安装Ubuntu官方提供的跟文件系统。实际上很简单,咱们使用官方提供的debootstrap就好了

debootstrap 是一个用于引导安装基础 Debian 或 Ubuntu 系统的工具。它可以将一个最小的系统安装到当前已安装系统的子目录中,无需使用安装光盘。它会自动下载基础包并解压安装,构建一个干净的 rootfs 环境 。也就是说,它会自动帮助你配置好一个可以使用的根文件系统。

sudo apt install debootstrap qemu-user-static
sudo debootstrap --arch=arm64 noble ./ubuntu-rootfs http://ports.ubuntu.com/

​ 上面的命令会在执行处文件夹目录下创建ubuntu-rootfs作为我们的根文件系统,名称随意。

复用主机的文件夹且进入文件系统进行自动配置

sudo mount -t proc /proc ubuntu-rootfs/proc
sudo mount -t sysfs /sys ubuntu-rootfs/sys
sudo mount -o bind /dev ubuntu-rootfs/dev
sudo chroot ubuntu-rootfs /bin/bash

​ 我们挂载好了必须要的目录之后。就可以进入进行配置了。我们这里先需要将

清单一:需要的驱动文件

​ 一些模块的驱动文件需要被拷贝进来,这一点,笔者建议你lsmod一下运行旧的ubuntu的开发板上挂载了什么模块,自己去复制;或者如果更熟悉SDK流程的朋友可以试着用下module install,笔者没搞清楚SDK包是如何指定下载参数的,也没有看到他是如何进行打包的。所以这里不赘述。(笔者lsmod后发现我就需要拷贝一下蓝牙和WiFi驱动就完事,这一步我直接cv了内核的东西就走了,这个没啥好说的)

清单二:配置DNS解析文件

​ 首先你需要确认自己是可以使用Apt的,不行的朋友下面任何涉及到下载包的动作都需要自己手动从外面获取后安装

​ 如果是从网络上下载,我们需要添加DNS配置解析项(这一步很重要,笔者放到下位机无线驱动都准备好了,结果一看发现www.baidu.com ping不通,一看DNS挂了),这里我们在/etc/resolve.conf上追加

nameserver 8.8.8.8
清单三:基本的依赖库
apt install sudo vim udev net-tools ethtool udhcpc netplan.io iputils-ping iw ifconfig  wireless_tools
locale-gen en_US.UTF-8
dpkg-reconfigure locales
dpkg-reconfigure tzdata

​ 这两部分是笔者当时参考了Reference中的安装依赖部分,笔者建议到这里就OK,不用安装太多东西,移植通了网络就行了。我们到下位机的开发板上处理我们的桌面问题,这样可以加速我们的烧录。

​ 下两部分是为了重新裁定我们的系统语言环境,这里笔者使用的是英文的。

清单四:创建基本的登录用户(必须要,否则你进不去开发板)

​ 创建用户很简单。但是你最好先给root上密码

passwd

​ 更新密码后,创建一个咱们自己的用户

adduser charliechen
usermod -aG sudo charliechen

​ charliechen这个名称随意,看你自己的喜好,都是裁剪系统的人了,无需提示这个(笑

清单五:做一下其他自己在上位机上方便做的事情

​ 这个自己定制,你想让系统啥样是自己所需要的,上面的步骤只是必须要做的动作。

制作rootfs

​ 我们首先需要查看一下我们的rootfs多大,笔者的最后是500MB左右,方便期间,我这里制作1GB大小的rootfs。

dd if=/dev/zero of=rootfs.img bs=1M count=1024
mkfs.ext4 rootfs.img
sudo mount rootfs.img /mnt
sudo cp -a ubuntu-rootfs/* /mnt
sudo umount /mnt

​ 我们依次创建了空白的img文件,在这个文件上创建了文件系统,以及挂载到mnt目录下进行复制和读写,然后卸载。

​ 这样我们的rootfs.img就做好了,下一步就是放置到我们的SDK目录源码下即可。记得./build.sh updateimg刷新一下updateimg

烧录系统

​ 烧录系统,当然,我们没有变动内核,正常应该没有问题,可以安全进入。

配置基本的环境

​ 笔者当时是没有挂载网络的驱动环境的。这里当时笔者登录后。就写了一个小脚本

  1. 挂载WiFi.ko文件(这个看自己再用什么WiFi驱动)
  2. 拉起我们的Wlan网卡,这个需要自己先看看ifconfig -a,看一下WIFI网卡的名称
  3. ip link set 网卡名称 up拉起网卡
  4. ip link show 网卡名称

​ 看看是不是可用的,如果可用。下一步就是配置一下了WiFi了(有线网玩家自行参考别的教程)

扫描 WiFi 热点
iwlist 网络名称 scan | grep ESSID

能看到附近的 WiFi 名字,就说明驱动工作正常。


生成 WiFi 配置

wpa_passphrase 生成配置:

wpa_passphrase "你的WiFi名称" "你的WiFi密码" > /etc/wpa_supplicant.conf

生成的文件会长这样:

network={
    ssid="你的WiFi名称"
    psk=你的加密后的密码
}

启动 wpa_supplicant
wpa_supplicant -B -i 网卡名称 -c /etc/wpa_supplicant.conf -D nl80211
  • -B:后台运行
  • -i:接口名
  • -c:配置文件路径
  • -D nl80211:使用 nl80211 驱动(大多数新内核都支持)

可以用 ps -ef | grep wpa_supplicant 看是否正常运行。


获取 IP 地址
udhcpc -i 网卡名称

或者如果系统有 dhclient

dhclient 网卡名称

📌验证网络
ping -c 4 8.8.8.8
ping -c 4 www.baidu.com

​ 如果能 ping 8.8.8.8 但不能 ping 域名,说明是 DNS 配置问题,你需要再看看DNS解析文件。

nameserver 8.8.8.8
nameserver 114.114.114.114

安装桌面

sudo apt install ubuntu-desktop-minimal -y

​ 选择ubuntu-desktop-minimal是因为snap太烂了,CDN只有国外服务器,挂代理下好几个小时还,所以如果不是对snap有情怀的朋友,强烈建议绕开snap!

如果懒得配置代码,可以手机代理+全局模式+export:<手机IP>::端口的方式

​ 完事之后,可以自己配置一下桌面,重启之后开发板就能用桌面了!

Reference

RK3588 移植 Ubuntu 24.04 | ARM Linux Construction | 悦翎轩

一些补充

什么是 update.img
  • 在 RK3588 的开发流程中,一般会生成一个名为 update.img 的固件文件。这是一个“统一固件(unified firmware)”,将多个关键组件打包合并到了一个镜像中,之前我们可能要按照好几步复杂的调试进行烧写,现在不用了
  • 该镜像包含了:分区表(partition table)、bootloader、uboot、kernel、system(文件系统) 等多个镜像或系统组件
  • update.img 用于通过 USB(如 RKDevTool 等工具)整体烧写设备;这会清掉板上所有分区数据,因此适用于首次烧录或完整刷新

常见组件镜像与用途

1. uboot.img
  • 用途:这是 U-Boot 启动引导程序,用于初始化硬件、加载后续引导阶段(如 Bootloader stage 2)、并最终引导内核启动。
  • 应用:用于修复或更新启动链中的核心部分,在设备启动失败或 U-Boot 出错时特别有用。可以单独使用 upgrade_tool di -uboot uboot.img 来烧写
2. kernel.img
  • 用途:Linux 内核镜像。包含内核本身及其驱动程序。
  • 应用:在需要更新驱动或内核版本时,通过 upgrade_tool di -boot boot.img(有时是 -kernel)单独刷写 Kernel 分区即可
3. boot.img
  • 用途:通常包含了内核加上一些初始文件系统(比如 ramdisk),在 Android 平台特别常见。
  • 应用:用于同时更新内核与系统启动时所需文件。刷写命令同样适用 -boot 或按工具界面中选择 boot 分区
4. recovery.img
  • 用途:Recovery 模式下使用的镜像,包含恢复环境及逻辑,可用于执行 OTA、格式化、系统修复等。
  • 应用:在设备启动到 recovery 模式时生效,可通过恢复镜像单独更新。
5. misc.img
  • 用途:Misc 分区通常存储一些系统标志、启动控制协议(boot control flags),例如 recovery 模式触发标志等。
  • 应用:不建议在刷机包中频繁包含 misc 分区,因为更新过程中可能清除这些重要标志,导致系统行为异常
6. rootfs.img
  • 用途:根文件系统镜像,包含实际的操作系统环境(Linux 或 Android 的用户空间文件、应用和配置等)。
  • 应用:当系统层发生变化(如软件更新、应用安装、文件结构调整)时,更新此分区即可。SDK 打包中常作为一个 partition 被整合进 update.img
7. resource.img / parameter.img / dtbo.img / oem.img / userdata.img
  • 用途
    • resource.img:包含设备资源信息,如屏幕分辨率、按键映射、布局配置等。
    • parameter.img:可能存储启动参数、设备配置等。
    • dtbo.img:设备拓展版的设备树 overlay(Device Tree Blob Overlay)。
    • oem.img:厂商定制内容。
    • userdata.img:用户数据分区,包含用户生成内容。
  • 应用:这些镜像通常用于高度定制化更新或调试。常在 package-file 中通过注释启用/禁用某个分区的升级,以控制更新范围

总结说明表

镜像文件 功能说明
uboot.img 更新启动引导器 U-Boot
kernel.img 更新 Linux 内核镜像
boot.img 包含内核和启动时的初始文件系统(特别在 Android 中)
recovery.img 更新恢复模式逻辑,用于 OTA 或故障修复
misc.img 存储启动标志,不建议频繁更新
rootfs.img 全系统根文件系统;更新用户空间内容
resource.img 存储设备资源、参数、overlay、厂商定制、用户数据等特定内容

网站公告

今日签到

点亮在社区的每一天
去签到