RK3588构建ubuntu22.04根文件系统

前言

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 multiversedeb 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 multiversedeb 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 multiversedeb 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/bashfunction mnt() {echo "MOUNTING"sudo mount -t proc /proc ${2}procsudo mount -t sysfs /sys ${2}syssudo mount -o bind /dev ${2}devsudo mount -o bind /dev/pts ${2}dev/ptssudo chroot ${2}
}function umnt(){echo "unmounting"sudo umount ${2}procsudo umount ${2}syssudo umount ${2}dev/ptssudo umount ${2}dev}if [ "$1" == "-m" ] && [ -n "$2" ];
thenmnt $1 $2
elif [ "$1" == "-u" ] && [ -n "$2" ];
thenumnt $1 $2
elseecho ""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-managerapt 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.mzph.cn/news/828487.shtml

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

相关文章

【信息收集】端口扫描masscan负载均衡识别lbd

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 1、什么是masscan masscan在kali系统上是自带的端口扫描…

用Redis实现获取验证码,外加安全策略

安全策略 一小时内只能获取三次,一天内只能获取五次 Redis存储结构 代码展示 import cn.hutool.core.util.RandomUtil; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.junit.jupiter.api.Test; import org.spri…

学习笔记:Vue3(图片明天处理)

文章目录 1.概述1.1定义1.2特性1.3组合式API 2.基本用例-项目搭建3.项目目录介绍3.1概述3.2查看文件 4.组合式API4.1概述4.2新的API风格4.2.1概述4.2.2写法4.2.3基本用例-Setup选项使用4.2.4基本用例-语法糖写法(重点)4.2.5执行时机4.2.6代码特点 4.3响应…

我的读书摘记《点燃孩子的学习动力:关于儿童学习兴趣的真相》

德韦克认为乔丹的经历揭示了那些最卓越的学习者身上的一个秘密:人的天赋,是可以不断发展的!不管早期的天赋如何,人终将不断超越自己,发展自己的天赋。 思维方式决定了学习的成功与否!这也意味着&#xff0…

【数据结构】三、栈和队列:5.顺序队列(循环队列)(初始化,判空判满,入队,出队,实例)

文章目录 队列Queue逻辑结构物理(存储)结构基本操作1.顺序队列(循环队列)1.1初始化1.2判空&判满1.2.1判空1.2.2判满方案一方案二方案三 1.3入队循环队列 1.4出队1.5获取队头元素1.6获取队列元素个数❗1.7循环队列c实例 队列Qu…

安卓Activity的setContentView()流程分析

目录 前言一、Activity的视图加载过程1.1 视图结构1.2 流程分析1.2.1 Activity.java -->setContentView()1.2.2 Activity.java -->getWindow()1.2.3 PhoneWindow.java -->setContentView()1.2.4 PhoneWindow.java --->installDecor()1.2.4.1 PhoneWindow.java ---&…

SD-WAN怎样保障网络稳定

随着企业网络的日益复杂,如何确保线路的稳定性和高效性成为了网络管理的一大挑战。尤其是在线路出现故障、质量下降或拥塞时,如何快速响应并切换到最佳线路,就显得尤为重要。SD-WAN,作为一种新型的网络架构,为用户提供…

周报不止是汇报进度,如何用周报轻松提升团队协作效率?

周报是工作中常见的沟通工具,对于项目经理来说尤其重要。写周报不仅仅是为了完成一项任务,它更是项目管理中不可或缺的环节,它不仅有助于项目经理跟踪项目进度,还加强了团队成员间的沟通与协作。以下是几个关键的原因:…

北京车展打响新汽车“第一枪”,长安造车40年,开启“汽车机器人”时代

4月25日,睽违四年的2024(第十八届)北京国际汽车展览会正式启幕,此次车展以“新时代 新汽车”为主题,吸引全球1500余家主流车企及零部件制造商同台“打擂”。其中,长安汽车以“数智启源随你而变”为主题,携各子品牌及合…

掌握未来通信技术:5G核心网基础入门

🔥个人主页:Quitecoder 🔥专栏:5GC笔记仓 朋友们大家好,本篇文章是我们新内容的开始,我们本篇进入5GC的学习,希望大家多多支持! 目录 一.核心网的演进2G核心网2.5G核心网3G核心网4G…

六个月滴滴实习:轻松、舒心又高薪!

不久前,一位在滴滴后端研发部门实习了六个月的小伙伴在牛客网上分享了他的实习体验, 作者详细描述了他在滴滴的实习生活。 从他的叙述中,我们可以感受到与其他互联网公司相比,滴滴的工作环境显得相对轻松和舒适。 他提到&#x…

ROS摄像机标定

文章目录 一、环境准备二、摄像头标定2.1 为什么要标定2.2 标定前准备2.2.1 标定板2.2.2 摄像头调焦 2.3 开始标定2.4 测试标定结果 总结参考资料 一、环境准备 安装usb_cam相机驱动 sudo apt-get install ros-noetic-usb-cam 安装标定功能包 sudo apt-get install ros-noet…

深度学习——常用激活函数解析与对比

1、 简介 在神经网络中,激活函数扮演着至关重要的角色。它们的主要目的是引入非线性因素,使得网络能够学习和表示更加复杂的函数映射。以下是激活函数应具备的特点,以及这些特点为何重要的详细解释: 引入非线性有助于优化网络&am…

【Ant-Desgin-React 步骤条】步骤条配合组件使用

步骤条配合组件使用 基础使用多分组进度 基础使用 /* eslint-disable no-unused-vars */ import React, { useState } from react import { Button, message, Steps, theme } from antd import After from ./components/after import Now from ./components/now const steps …

Docker 安装 Mongo

创建宿主机目录 在你的宿主机上创建必要的目录来存储 MongoDB 的数据和配置文件。这样做可以保证即使容器被删除,数据也能得到保留。 mkdir -p /develop/mongo/data mkdir -p /develop/mongo/config创建 MongoDB 配置文件 创建一个名为 mongod.conf 的 MongoDB 配…

RestfulApi RestTemplate代码规范介绍

1.介绍 1.1 RestfulApi Restful API 是一种设计风格,代表了使用 HTTP 协议构建 web 服务的一种架构原则。REST(Representational State Transfer)的核心思想是,通过 URL 定位资源,使用 HTTP 方法(GET, POS…

MySQL多版本并发控制mvcc原理浅析

文章目录 1.mvcc简介1.1mvcc定义1.2mvcc解决的问题1.3当前读与快照读 2.mvcc原理2.1隐藏字段2.2版本链2.3ReadView2.4读视图生成原则 3.rc和rr隔离级别下mvcc的不同 1.mvcc简介 1.1mvcc定义 mvcc(Multi Version Concurrency Control),多版本并发控制,是…

golang学习笔记(defer基础知识)

什么是defer defer语句用于golang程序中延迟函数的调用, 每次defer都会把一个函数压入栈中, 函数返回前再把延迟的函数取出并执行。 为了方便描述, 我们把创建defer的函数称为主函数, defer语句后面的函数称为延迟函数。延迟函数…

npm常用的命令大全(2024-04-21)

nodejs中npm常见的命令 npm主要是node包管理和发布的工具。 npm官网网址:npm | Homehttps://www.npmjs.com/官网英文文档: npm DocsDocumentation for the npm registry, website, and command-line interfacehttps://docs.npmjs.com/about-npm官网中文文…

同城便民信息小程序源码系统:相亲交友+拼车顺风车功能 带完整的安装代码包以及搭建教程

在信息化、数字化的时代,人们的生活越来越离不开各种智能应用。其中,小程序作为一种轻量级、便捷的应用形式,正逐渐渗透到我们日常生活的方方面面。今天,我们要介绍的这款“智慧同城便民信息小程序源码系统”,不仅集成…