正点原子RK3588按需制作ubuntu rootfs

目前ubuntu主机是20.04,尝试基于24.04的base镜像制作rootfs出错,就又基于20.04的base做了。
安装正点原子的《ubuntu移植参考手册》

host安装qemu

配置rootfs的apt source.list

注意要用http,不能用https

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse
#deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal main restricted universe multiverse
#deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse
#deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse
#deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu-ports/ jammy main restricted universe multiverse

#准备 mount.sh

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
fi

挂载rootfs到主机

./mount.sh -m xx/ xx为镜像目录

apt update遇到问题

root@zxwl-OptiPlex-7070:/# apt update
Get:1 http://mirrors.aliyun.com/ubuntu-ports focal InRelease [265 kB]
Get:2 http://mirrors.aliyun.com/ubuntu-ports focal-security InRelease [128 kB]
Err:1 http://mirrors.aliyun.com/ubuntu-ports focal InRelease
  Couldn't create temporary file /tmp/apt.conf.kSonVN for passing config to apt-key
Err:2 http://mirrors.aliyun.com/ubuntu-ports focal-security InRelease
  Couldn't create temporary file /tmp/apt.conf.ObYn9U for passing config to apt-key
Get:3 http://mirrors.aliyun.com/ubuntu-ports focal-updates InRelease [128 kB]
Err:3 http://mirrors.aliyun.com/ubuntu-ports focal-updates InRelease
  Couldn't create temporary file /tmp/apt.conf.z5b3L5 for passing config to apt-key
Get:4 http://mirrors.aliyun.com/ubuntu-ports focal-backports InRelease [128 kB]
Err:4 http://mirrors.aliyun.com/ubuntu-ports focal-backports InRelease
  Couldn't create temporary file /tmp/apt.conf.iueape for passing config to apt-key
Reading package lists... Done
W: GPG error: http://mirrors.aliyun.com/ubuntu-ports focal InRelease: Couldn't create temporary file /tmp/apt.conf.kSonVN for passing config to apt-key
E: The repository 'http://mirrors.aliyun.com/ubuntu-ports focal InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
W: GPG error: http://mirrors.aliyun.com/ubuntu-ports focal-security InRelease: Couldn't create temporary file /tmp/apt.conf.ObYn9U for passing config to apt-key

chmod 777 /tmp 就解决了

安装需要的软件

apt update
apt upgrade
apt install sudo 
sudo apt install openssh-server
sudo apt install libc6

apt install vim 
apt install net-tools 
apt install ethtool 
apt install ifupdown 
apt install iputils-ping
apt install openssh-server # ssh可以访问
apt install binutils #包含strings命令,可以查看glibc版本

umount

./mount.sh -u xx/ xx为镜像目录

make image

shell代码

#!/bin/bash
rootfs_dir=$1
rootfs_file=$2
rootfs_mnt="mnt"
if [ ! $rootfs_dir ] || [ ! $rootfs_file ]; 
  then 
    echo "Folder or target is empty."
    exit 0 
fi  
if [ -f "$rootfs_file" ]; then
  echo "-- Delete exist $rootfs_file ..."
  rm -f "$rootfs_file"
fi

echo "-- Create $rootfs_file ..."
dd if=/dev/zero of="$rootfs_file" bs=4M count=6144
sudo mkfs.ext4 -F -L linuxroot "$rootfs_file"
if [ ! -d "$rootfs_mnt" ]; then
  mkdir $rootfs_mnt
fi
echo "-- Copy data to $rootfs_file ..."
sudo mount $rootfs_file $rootfs_mnt
sudo cp -rfp $rootfs_dir/* $rootfs_mnt
sudo sync
sudo umount $rootfs_mnt
rm -r $rootfs_mnt
echo "-- Resize $rootfs_file ..."
/sbin/e2fsck -p -f "$rootfs_file"
/sbin/resize2fs -M "$rootfs_file"
echo "-- Done."

RK3588 开发板上挂载或安装 Ubuntu 系统要经过多个步骤,包括准备开发环境、编译 SDK、生成根文件系统镜像以及烧录到开发板中。以下是详细的实现流程和关键步骤: ### 3.1 准备工作 在开始之前,确保开发环境已经搭建完成,包括安装必要的编译工具链、依赖库以及获取 RK3588 SDK 和 Ubuntu 根文件系统构建脚本。SDK 通常由 Rockchip 提供,包含了编译内核、设备树、根文件系统等所的资源。 ### 3.2 构建 Ubuntu 根文件系统 根据提供的 SDK 脚本路径 `rk3588_sdk/device/rockchip/common/scripts/mk-rootfs.sh`,可以使用对应的构建脚本生成 Ubuntu 根文件系统。具体命令如下: ```bash # 以 Ubuntu 20.04 为例 VERSION=debug ARCH=$ARCH RC_RELEASE=ubuntu ./mk-rootfs-ubuntu-20.sh ``` 此脚本会下载 Ubuntu 的基础包并构建一个适用于 RK3588 的最小根文件系统。如果要调试版本,可以添加 `VERSION=debug` 参数。构建完成后,会生成一个 `.img` 文件,用于后续的烧录。 ### 3.3 生成可启动镜像 构建完根文件系统后,要使用 `mk-image.sh` 脚本将内核、设备树和根文件系统打包为一个完整的可启动镜像: ```bash ./mk-image.sh ``` 该脚本会将 `kernel/extlinux/extlinux.conf` 配置文件包含在镜像中,用于定义启动参数。如果使用 Ubuntu 系统,注意该配置文件中应包含 `initrd` 相关信息,以确保系统能够正确加载初始 RAM 磁盘并挂载根文件系统[^2]。 ### 3.4 烧录镜像到开发板 将生成的镜像文件通过烧录工具(如 `dd` 或 Rockchip 提供的 `upgrade_tool`)写入 SD 卡或 eMMC 存储设备中。例如,使用 `dd` 命令将镜像写入 SD 卡: ```bash sudo dd if=output/rk3588-ubuntu.img of=/dev/sdX bs=1M ``` 确保 `/dev/sdX` 是 SD 卡的设备路径,避免误操作导致系统数据丢失。 ### 3.5 启动与验证 将 SD 卡插入 RK3588 开发板并上电,系统将从 SD 卡启动。通过串口终端或 HDMI 显示器可以查看启动日志。如果一切正常,Ubuntu 系统将成功挂载并进入命令行或图形界面。 ### 3.6 常见问题排查 - **启动失败**:检查 `extlinux.conf` 是否正确配置了 `initrd` 和 `root=` 参数,确保根文件系统路径与镜像一致。 - **根文件系统损坏**:使用 `fsck` 工具检查镜像文件系统完整性。 - **内核不兼容**:确认 SDK 中的内核版本是否支持所使用的 Ubuntu 发行版。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值