RK3588构建ubuntu22.04根文件系统

news2025/1/16 13:52:27

前言

RK系列的平台提供了buildroot和debian的系统,使用脚本可以直接构建出来,但是没有提供ubuntu的系统,很多厂商只提供一个rootfs.img的固件包,没有将方法开源出来。本文实现了从ubuntu官网开始构建一个ubuntu22.04根文件系统。

ubuntu-base

什么是ubuntu base?, ubuntu针对不同的CPU架构提供相应的ubuntu base 根文件系统,目前提供的架构有amd64, arm64m armhf, i386, s390x, ppc64.
ubuntu base 是用于为特定需求创建自定义映像的最小rootfs, 是ubuntu可以运行的最小环境。

Ubuntu Base 22.04.4 LTS (Jammy Jellyfish)下载地址:
https://cdimage.ubuntu.com/ubuntu-base/releases/22.04/release/
在这里插入图片描述
本文最终运行的环境是RK3588,所以下载的是ubuntu-base-22.04-base-arm64.tar.gz的压缩包。
解压:

mkdir rootfs
tar -zxvf ubuntu-base-22.04-base-arm64.tar.gz -C rootfs/

挂载构建文件系统

配置网络

sudo cp /etc/resolv.conf rootfs/etc/

安装qemu,
qemu是用来仿真arm64平台的,使得arm64的系统可以再x86平台运行起来。

$sudo apt install qemu-user-static
sudo cp /usr/bin/qemu-aarch64-static rootfs/usr/bin/

修改源改为阿里源:

ubuntu 阿里 arm源地址:
https://developer.aliyun.com/mirror/ubuntu-ports?spm=a2c6h.13651104.d-1008.9.742b4763eLldW3

sudo vim rootfs/etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu-ports/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu-ports/ jammy main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu-ports/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu-ports/ jammy-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu-ports/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu-ports/ jammy-updates main restricted universe multiverse

# deb http://mirrors.aliyun.com/ubuntu-ports/ jammy-proposed main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu-ports/ jammy-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu-ports/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu-ports/ jammy-backports main restricted universe multiverse

设置权限

cd rootfs
sudo chmod 777 -R tmp/
cd ..

编写挂载脚本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 "Either 1'st, 2'nd or both parameters were missing"
	echo ""
	echo "1'st parameter can ben one of these: -m(mount) OR -u(umount)"
	echo "2'nd parameter is the full path of rootfs directory(with tralling '/')"
	echo ""
	echo "For example: ch-mount -m /meadia/sdcard"
	echo ""
	echo 1st parameter : ${1}
	echo 2nd parameter : ${2}
fi

挂载

 ./mount.sh -m rootfs/

挂载完后,就会切换到ubuntu22.04的根文件系统,因为使用了qemu,后面就可以再arm64平台操作执行了。
进入后先执行,apt update,更新最新的源

apt update

如果执行中出现如下错误

W: https://mirrors.aliyun.com/ubuntu-ports/dists/jammy/InRelease: No system certificates available. Try installing ca-certificates.
W: https://mirrors.aliyun.com/ubuntu-ports/dists/jammy-security/InRelease: No system certificates available. Try installing ca-certificates.
W: https://mirrors.aliyun.com/ubuntu-ports/dists/jammy-updates/InRelease: No system certificates available. Try installing ca-certificates.
W: https://mirrors.aliyun.com/ubuntu-ports/dists/jammy-backports/InRelease: No system certificates available. Try installing ca-certificates.
W: https://mirrors.aliyun.com/ubuntu-ports/dists/jammy/InRelease: No system certificates available. Try installing ca-certificates.

这是因为https是加密协议,需要直接使用阿里源会要求安装证书。而我们刚开展做新的系统apt又用不了,所以此处将source.list中的https都替换为http即可。

如果出现下列错误,说明是文件没有权限,在挂载前就需要将rootfs/tmp目录设置可读写权限。

W: GPG error: http://mirrors.aliyun.com/ubuntu-ports jammy InRelease: Couldn't create temporary file /tmp/apt.conf.nNgmYa for passing config to apt-key
E: The repository 'http://mirrors.aliyun.com/ubuntu-ports jammy 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 jammy-security InRelease: Couldn't create temporary file /tmp/apt.conf.cnD2Tw for passing config to apt-key
E: The repository 'http://mirrors.aliyun.com/ubuntu-ports jammy-security 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.

安装需要的包

apt install sudo vim udev net-tools ethtool udhcpc netplan.io language-pack-en-base language-pack-zh-han* iputils-ping openssh-sftp-server  ntp usbutils alsa-utils libmtp9  ssh  htop network-manager

apt install gcc g++

桌面安装

如果需要使用桌面,建议直接安装轻量级的桌面lxde,

apt install lxde

添加用户

adduser ubuntu
adduser ubuntu sudo

退出挂载的文件系统

exit
./mount.sh -u rootfs/

制作rootfs

创建一个空镜像文件

dd if=/dev/zero of=ubuntu2204_rootfs.img bs=1M count=5120

将该文件格式化为ext4文件系统

mkfs.ext4 ubuntu2204_rootfs.img

创建一个空的文件,挂载镜像

mkdir temp
sudo mount ubuntu2204_rootfs.img temp/
cp -rfp rootfs/* temp/
# -r:递归文件夹
# -f:强制
# -p:不拷贝符号链接的目标文件,仅拷贝该符号链接

卸载镜像

umount temp/

e2fsck 检查镜像的文件系统。resize2fs 减小镜像文件的大小

$ e2fsck -p -f ubuntu2204_rootfs.img
$ resize2fs -M ubuntu2204_rootfs.img

至此,最小的ubuntn22.04文件系统做完,可以直接烧录到RK板子上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1623078.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python数字验证码自动识别

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在网络上,许多网站和应用程序使用验证码(Completely Automated Publ…

Vue2 —— 学习(十一)

目录 一、路由 vue-router (一)路由与路由器 (二)vue-router 理解 (三)SPA 理解 (四)路由 理解 (五)小案例 1.About.vue 2.Home.vue 3.index.js 4…

移动端应用(APP)如何设计测试用例?

为 APP 设计测试用例需要考虑移动设备的特殊性,如不同的操作系统、设备尺寸、硬件特性以及应用程序自身的特定功能。 以下是为APP设计测试用例时要考虑的内容: 1. 理解需求 熟悉APP的功能需求、用户故事和设计文档。 确定APP的目标用户群体、使用场景…

12.Blender 界面介绍(上)及物体基础编辑操作

设置语言 首先在菜单栏打开编辑-Preferences-界面-翻译,可以修改语言 这里使用的是Steam上下载的4.1版本 工具栏 左边的工具栏,按T就会出现,再按T就会隐藏 右边的工具栏是按N,按N显示,再按N隐藏 旋转画面 长按鼠…

MySQL基础之单表操作(定义DDL,增删改DML,查DQL)

目录 一、概述1.1 什么是数据库1.2 连接MySQL1.3 数据模型1.4 SQL语句的分类1.5 数据类型 二、数据库设计-DDL2.1 数据库层面2.2 数据表层面创建表约束查询修改add,modify,change,drop,rename(表)删除 三、数据库操作-DML3.1 添加数据insert3.2 修改数据update3.3 删除数据dele…

做外贸与其质疑,不如脚踏实地做事

小莉说最近好多自媒体添加WhatsApp的客户都是非洲的,有些打电话过来都不想接,因为他们都是没钱的主,接着还截图了一个客户头像给我,很不耐烦地说:像这种抽烟的客户头像,一看就不是正经人,无论他…

土压力计:监测地下压力变化的必备工具

在土木工程、地质勘探和地下建筑等领域,地下土壤的力学特性对工程的稳定性和安全性起着至关重要的作用。而土压力计作为一种重要的监测设备,能够准确地测量地下土壤的压力变化,为工程设计和施工提供关键数据。本文将探讨土压力计的原理、应用…

CRAFT文字检测算法解析和基于C++和TensorRT的推理实现

本文讲解了CVPR 2019的一篇文字检测算法《Character Region Awareness for Text Detection》的原理,并给出我使用C和TensorRT重新实现的推理,速度比原版代码快12倍。 论文:https://arxiv.org/pdf/1904.01941.pdf 官方代码:https:…

echarts地图记录

小记录: 如果调整地图大小不管用的时候,看一下map的值是否为china 当值为china的时候,地图会加上“南海诸岛”部分,尝试修改map的值

Netfilter漏洞提权利用(CVE-2023-35001)

前言 Netfilter是一个用于Linux操作系统的网络数据包过滤框架,它提供了一种灵活的方式来管理网络数据包的流动。Netfilter允许系统管理员和开发人员控制数据包在Linux内核中的处理方式,以实现网络安全、网络地址转换(Network Address Transl…

centos7搭建maven私服nexus

1.nexus Nexus Repository Manager(通常简称 Nexus 或 Nexus RM)是由Sonatype公司开发的一款开源的、强大的软件仓库管理工具,主要用于企业级的二进制组件(如Java库、Node.js模块、Python包等)存储、管理和分发。 官方…

定序器导出fbx到max里对位k动作

可以把场景移动到原点去k动作,然后可以恢复到ue4的位置 -- 定义全局变量 global CenterPoint undefined global averageCenter [0,0,0]-- 定义对话框 rollout restoreRollout "定序器>FBX>MAX" (button CreateButton "建立中心点" wid…

使用JS代理 实现大对象的功能拆解

序言 在Android开发中,可以通过webView的addJavascriptInterface方法注入一个对象到网页中。但是随着开发的需求越来越多。这个对象身上的方法也越来越多。这个对象对应的java类,体积越来越大,不利于维护。为了在不影响之前代码的基础上。把…

操作系统安全:Windows与Linux的安全标识符,身份鉴别和访问控制

「作者简介」:2022年北京冬奥会中国代表队,CSDN Top100,学习更多干货,请关注专栏《网络安全自学教程》 操作系统有4个安全目标,也就是说想要保证操作系统的安全,就必须实现这4个需求: 标识系统…

网络协议安全:OSI七层模型分层及作用,数据封装与解封过程,数据传输过程。

「作者简介」:2022年北京冬奥会中国代表队,CSDN Top100,学习更多干货,请关注专栏《网络安全自学教程》 这一章节我们需要知道OSI分哪七层,每层的作用,知道数据在七层模型中是怎样传输的,封包和解…

数据结构练习:链表扩容

大致步骤: 一:创建一个新链表,遍历原链表的同时,将原链表的值复制给新链表 二:将新链表插入到原链表中(大致如下) 注: 1.头结点是不存有数据的 2.记得malloc后要free 3.*&是…

男士休闲裤比较好的品牌有哪些?高品质休闲男装推荐

穿衣服最重要的并不是要求多好看多时尚,相信绝大部分年纪在23岁以上的男同胞们更希望穿一些简约好搭配的款式,更重要的其实就是要求质量耐穿,以及有足够好的舒适性。 但是现在市面上的品牌实在是太多了,而且质量也参差不齐&#x…

SpringBoot 3.x + Swagger3 踩坑实录

问题描述 维护的SpringBoot版本是3.0版本,翻教程的时候发现很多SpringBoot2.x版本用的都是springfox,但问题是在SpringBoot3.x版本后,逐渐不支持springfox,强行启动会导致异常,现阶段使用的Springdoc进行替换。 参考…

设计模式-六大原则

设计模式的六大原则是软件工程中的基本概念,使得构建可维护、可扩展和可重用的代码。 1.单一职责原则(Single Responsibility Principle):一个类或方法应该只有一个引起变化的原因,确保类或模块的功能高度内聚。 案例&…

力扣数据库题库学习(4.22日)

577. 员工奖金 问题链接 思路分析 Employee表与Bonus表通过empId字段可以连接,需求是查出奖金少于1000的员工名和奖金值。 这里奖金少于1000的情况就是没有奖金有奖金但少于1000 这里我给出的解决方案就是使用左连接,将Employee表作为左表&#xff…