正点原子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."

### 使用 Buildroot 为 RK3568 平台构建根文件系统 #### 准备工作 为了确保能够顺利地为RK3568平台创建根文件系统,要先准备好必要的工具链和支持包。这包括安装依赖项、下载Buildroot源码并配置适用于RK3568的目标架构。 #### 配置目标平台 进入Buildroot目录后,执行`make menuconfig`来设置交叉编译器路径和其他必要选项。针对RK3568芯片特性,在内核配置部分应选择合适的驱动支持和硬件参数[^1]。 ```bash $ make menuconfig ``` #### 创建自定义配置 基于官方提供的defconfig模板或是其他已有的配置文件作为基础,调整以适应特定求。特别是要确认选择了正确的处理器类型(ARM Cortex-A55)、内存大小以及其他外设接口的支持情况。 #### 添加启动脚本 对于由Buildroot生成的根文件系统而言,默认会在`/etc/init.d/rcS`中处理初始化过程中的各项任务。因此可以在该位置加入任何期望于系统初次加载时运行的服务或程序[^2]: ```bash #!/bin/sh echo "Starting custom services..." # Add your startup commands here ``` #### 编译根文件系统映像 完成上述准备工作之后就可以开始实际编译流程了。“./build.sh rootfs”不仅限于仅能用来制作Buildroot格式的镜像;借助环境变量`RK_ROOTFS_SYSTEM`可以灵活切换到不同的发行版如Yocto或者Debian来进行相同的操作。不过这里主要关注的是标准意义上的Buildroot方式[^3]。 ```bash export RK_ROOTFS_SYSTEM=buildroot ./build.sh rootfs ``` 此命令将会产出几种类型的压缩包供后续刷机使用,其中就包含了适合rk35xx系列设备使用的ext4格式磁盘图像——即最终会被改名为`rootfs.img`的那个文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值