制作Ubuntu根文件

系列文章目录
Linux内核学习
Linux 知识(1)
Linux 知识(2)
WSL Ubuntu
QEMU 虚拟机
Linux 调试视频
PCIe 与 USB 的补充知识
vscode 使用说明
树莓派 4B 指南
设备驱动畅想
Linux内核子系统
Linux 文件系统挂载
QEMU 通过网络实现共享文件
OrangePi 学习摘录 —— 制作桌面版镜像
Radxa 学习摘录
Rockchip RK3399 - 引导流程和准备工作
制作Ubuntu根文件
文章目录
- 系列文章目录
- 1. 安装开发环境和工具
- 2. 下载UBUNTU基础镜像包
- 3. 修改镜像包
- 3.1 解压基础包, 需注意解压的参数中 p 参数保留权限:
- 3.2 修改网络配置和 qemu-aarch64-static 【PC版无需】
- 3.3 替换软件源
- 3.4 进入根文件系统进行操作,开始修改
- 4. 打包镜像
- 5. 启动
- 基本流程
- 1. 准备内核和根文件系统镜像:
- 2. 启动 QEMU 命令:
- 参考
1. 安装开发环境和工具
qemu-user-static 是一个用于在 x86 主机上运行 ARM 或其他非 x86 操作系统的工具。它是一个静态版本的 QEMU,因此它可以直接从磁盘运行,而无需安装 QEMU 或任何其他软件.
安装它用于在PC主机上运行下载下来的UBUNTU镜像, 方便修改镜像的内容
# PC
sudo apt-get install qemu-user-static
2. 下载UBUNTU基础镜像包
Index of /ubuntu-base/releases
3. 修改镜像包
3.1 解压基础包, 需注意解压的参数中 p 参数保留权限:
# PC
sudo tar -xvpf ubuntu-base-24.10-base-amd64.tar.gz -C ubuntu-rootfs/
3.2 修改网络配置和 qemu-aarch64-static 【PC版无需】
# PC
#为了可以联网更新软件,拷贝本机的dns配置文件到根文件系统
sudo cp -b /etc/resolv.conf ubuntu-rootfs/etc/
#下载的ubuntu-base是aarch64架构的,因此需要拷贝qemu-aarch64-static到ubuntu/usr/bin/
sudo cp /usr/bin/qemu-aarch64-static ubuntu-rootfs/usr/bin/
3.3 替换软件源
ubuntu-rootfs/etc/apt/sources.list
PC 上替换源好像有些问题,也许源不对
3.4 进入根文件系统进行操作,开始修改
- 更改根目录
#PC
sudo chroot ubuntu-rootfs
- 问题
/usr/bin/apt-key: 95: cannot create /dev/null: Permission denied
sudo cp -af /dev/null dev/
- 更新
# QEMU
#更新
apt update
apt upgrade#安装常用工具包
apt install net-tools iproute2 ethtool ifupdown iputils-ping vim sudoapt install psmisc nfs-common htop rsyslog language-pack-en-base apt install openssh-server
apt install network-manager systemd
# apt install network-manager systemd openssh-sftp-server kmod wireless-tools
# 不安装桌面也是可行的,没有桌面而已
apt install xubuntu-desktop# 修改ROOT 密码
passwd root# 创建 rk3568 账户
useradd -s '/bin/bash' -m -G adm,sudo rk3568
passwd rk3568# 修改主机名
echo "rk3568" > /etc/hostnameexit# 查询系统中属于nano的文件:
$ dpkg-query -L vim
- 桌面系统
- 关于 xubuntu-desktop
- 大小在3.5G左右, 安装需要很长时间
- 安装过程需要配置键盘之类的,需要手动选择输入
- 显示管理选择 LightDM, 选 GDM 没有图像画面.
PS: LightDM 和 GDM 都是 Linux 系统的显示管理器,负责显示登录界面,并允许用户登录系统。
| 特性 | LightDM | GDM |
|---|---|---|
| 大小 | 小巧 | 较大 |
| 速度 | 较快 | 较慢 |
| 功能 | 简单 | 丰富 |
| 可定制 | 一般 | 较好 |
4. 打包镜像
#PC
# 创建空白的镜像文件
dd if=/dev/zero of=linuxroot.img bs=1M count=6000
mkfs.ext4 linuxroot.img# 挂在镜像文件, 以便写入数据
mkdir rootfs
sudo mount linuxroot.img rootfs/
# 注意 p 参数
sudo cp -rfp ubuntu-rootfs/* rootfs/
sudo umount rootfs/# 检查和修复 rootfs.img 文件系统
e2fsck -p -f linuxroot.img#resize2fs 命令是调整 ext2、ext3 和 ext4 文件系统大小的有效工具
# *如果碰到启动不进桌面, 可以尝试不要resize2fs*
resize2fs -M linuxroot.img
最终生成的镜像文件: linuxroot.img
5. 启动
要使用 QEMU 启动一个基于 Ubuntu 的 x64 Linux 系统,你需要确保以下几个关键组件准备就绪:编译好的内核、根文件系统镜像(你的 ext4 镜像),以及一个适当配置的 QEMU 启动命令。
基本流程
1. 准备内核和根文件系统镜像:
- 确保你的内核(如 vmlinuz 或类似的 ELF 文件)和根文件系统(如 rootfs.img,ext4 格式)已经准备好。
- 镜像文件应该是一个可以直接被 QEMU 加载的块设备镜像(比如使用 dd 创建的 .img 文件)。
2. 启动 QEMU 命令:
使用以下命令启动系统:
run2:qemu-system-x86_64 \-enable-kvm \-kernel ${bzImagePath}/bzImage \-m 1G -nographic \-device qemu-xhci \-virtfs local,path=/mnt/shared,mount_tag=host_share,security_model=none \-net user,id=net0,ipv6=off,hostfwd=tcp::8022-:22 \-net nic,model=virtio \-drive file=linuxroot.img,format=raw \-append "earlyprintk=serial,ttyS0 console=ttyS0 nokaslr root=/dev/sda rw"debug2:qemu-system-x86_64 \-kernel ${bzImagePath}/bzImage \-m 1G -nographic \-device qemu-xhci \-virtfs local,path=/mnt/shared,mount_tag=host_share,security_model=none \-net user,id=net0,ipv6=off,hostfwd=tcp::8022-:22 \-net nic,model=virtio \-drive file=linuxroot.img,format=raw \-S -s \-append "earlyprintk=serial,ttyS0 console=ttyS0 nokaslr root=/dev/sda rw"
命令说明
qemu-system-x86_64: 指定模拟 x86_64 架构。-enable-kvm: 启用硬件虚拟化加速(KVM),可以显著提升性能。-m 1024: 为虚拟机分配 1GB 内存。-kernel: 指定内核镜像路径。-append: 传递内核命令行参数:root=/dev/sda1: 指定根文件系统挂载点(假设根文件系统在第一个磁盘的第一个分区)。rw: 以读写模式启动。console=ttyS0: 将内核输出重定向到第一个串口(方便在终端查看输出)。
-drive: 指定根文件系统镜像:file=rootfs.img: 镜像文件路径。format=raw: 指定镜像格式为 raw(dd 创建的通常是 raw 格式)。
-net user: 使用用户模式网络,支持基本的网络功能。hostfwd=tcp::2222-:22: 将宿主机的 2222 端口转发到虚拟机的 22 端口(用于 SSH 访问)。-nographic: 不启动图形界面,直接输出到终端。
其他注意事项
- KVM 的启用:
- 确保你的宿主机支持 KVM(Intel VT-x 或 AMD-V)。可以通过以下命令检查:
grep -E 'vmx|svm' /proc/cpuinfo
-
- 如果没有输出,可能需要在 BIOS 中启用硬件虚拟化。
- 如果无法启用 KVM,可以去掉 -enable-kvm 选项,但性能会下降。
-
文件系统镜像路径:
- 确保 rootfs.img 文件和启动命令在同一目录下,或者指定绝对路径。
-
内核和文件系统的兼容性:
- 确保内核版本和根文件系统是兼容的。如果系统无法启动,可能需要检查内核配置或文件系统是否完整。
参考
Linux RK3399 基于 Firefly RK3399 Board 制作 Ubuntu Desktop 版本
Rockchip RK3399 - 移植ubuntu 20.04.4根文件系统
Create Ubuntu root file system
制作RK3568 ubuntu20.04桌面版镜像
相关文章:
制作Ubuntu根文件
系列文章目录 Linux内核学习 Linux 知识(1) Linux 知识(2) WSL Ubuntu QEMU 虚拟机 Linux 调试视频 PCIe 与 USB 的补充知识 vscode 使用说明 树莓派 4B 指南 设备驱动畅想 Linux内核子系统 Linux 文件系统挂载 QEMU 通过网络实现…...
SpringBoot快速接入OpenAI大模型(JDK8)
使用AI4J快速接入OpenAI大模型 本博文给大家介绍一下如何使用AI4J快速接入OpenAI大模型,并且如何实现流式与非流式的输出,以及对函数调用的使用。 介绍 由于SpringAI需要使用JDK17和Spring Boot3,但是目前很多应用依旧使用的JDK8版本&…...
UniApp 中制作一个横向滚动工具栏
前言 最近在用 UniApp 开发项目时,需要一个横向滑动的工具栏。常见的工具栏一般都是竖着的,但横向滑动的工具栏不仅能展示更多内容,还能让界面看起来更加丰富。不过很多朋友可能会发现,如何让内容“横着”展示又不变形、能流畅滚…...
react中如何获取真实的dom
在 React 中,获取真实的 DOM 元素通常通过 ref 来实现。ref 是一个特殊的属性,用于引用组件或 DOM 元素的实例。你可以通过 ref 获取到组件的真实 DOM 元素或组件实例。 1. 函数组件中的 useRef 在函数组件中,获取 DOM 元素的引用需要使用 …...
5G与物联网的协同发展:打造智能城市的未来
引言 随着科技的不断进步,智能城市的概念已经不再是科幻小说中的幻想,它正在逐步走进我们的生活。而这背后的两大驱动力无疑是 5G和 物联网(IoT)。5G网络以其高速率、低延迟、大容量的优势,与物联网的强大连接能力相结…...
【Qt】实现定期清理程序日志
在现有Qt程序中实现可配置日志保存天数的代码示例,分为界面修改、配置存储和核心逻辑三部分: // 1. 在配置文件(如settings.h)中添加保存天数的配置项 class Settings { public:int logRetentionDays() const {return m_settings…...
git bisect 使用二分法查找引入错误的提交
git bisect 使用二分法查找引入错误的提交 Git bisect 命令官方文档 git bisect 这个命令使用二分搜索算法来查找项目历史中哪个提交引入了一个错误 使用该命令时,首先告诉它一个已知包含错误的 “坏” 提交 以及一个已知在错误出现之前的 “好” 提交 然后 git b…...
一种面向车载时间敏感网络的联合路由与时隙调度负载均衡算法
论文标题 中文标题:一种面向车载时间敏感网络的联合路由与时隙调度负载均衡算法 英文标题:A Joint Routing and Time-Slot Scheduling Load Balancing Algorithm for In-Vehicle TSN 作者信息 Bo Xu, Xinrui Chang, Dongyang Xu, Shuo Wang, Uzair As…...
【弹性计算】容器、裸金属
容器、裸金属 1.容器和云原生1.1 容器服务1.2 弹性容器实例1.3 函数计算 2.裸金属2.1 弹性裸金属服务器2.2 超级计算集群 1.容器和云原生 容器技术 起源于虚拟化技术,Docker 和虚拟机和谐共存,用户也找到了适合两者的应用场景,二者对比如下图…...
Golang关于结构体组合赋值的问题
现在有一个结构体,其中一个属性组合了另外一个结构体,如下所示: type User struct {Id int64Name stringAge int64UserInfo }type UserInfo struct {Phone stringAddress string }如果要给 User 结构体的 Phone 和 Address 赋值的话&am…...
DeepSeek vs ChatGPT:AI对决中的赢家是……人类吗?
DeepSeek vs ChatGPT:AI对决中的赢家是……人类吗? 文章目录 DeepSeek vs ChatGPT:AI对决中的赢家是……人类吗?一、引言1. 背景2. 问题 二、DeepSeek vs ChatGPT:谁更胜一筹?2.1 语言生成能力评测对比场景…...
新建github操作
1.在github.com的主页根据提示新建一个depository。 2.配置用户名和邮箱 git config --global user.name "name" git config --global user.email "email" 3.生成ssh秘钥 ssh-keygen -t rsa 找到public key 对应的文件路径 cat /root/.ssh/id_rsa 复制显…...
Spring Boot 携手 DeepSeek:开启智能交互新时代
前言 在当今数字化浪潮汹涌澎湃的时代,人工智能技术正以前所未有的速度改变着我们的生活和工作方式。大语言模型作为人工智能领域的一颗璀璨明星,凭借其强大的自然语言处理能力,为各个行业带来了新的发展机遇。DeepSeek 作为一款性能卓越的大语言模型,以其高效、准确的文本…...
基于SSM+uniapp的数学辅导小程序+LW示例参考
1.项目介绍 系统角色:管理员、普通用户功能模块:用户管理、学习中心、知识分类管理、学习周报管理、口算练习管理、试题管理、考试管理、错题本等技术选型:SSM,Vue(后端管理web),uniapp等测试环…...
HTML的入门
一、HTML HTML(HyperText Markup Language,超文本标记语言)是一种用来告知浏览器如何组织页面的标记语言。 超文本:就是超越了文本;HTML不仅仅可以用来显示文本(字符串、数字之类),还可以显示视频、音频等…...
Windows 安装 GDAL 并配置 Rust-GDAL 开发环境-1
Rust-GDAL 是 Rust 语言的 GDAL(Geospatial Data Abstraction Library) 绑定库,用于处理地理数据。由于 GDAL 依赖较多,在 Windows 上的安装相对复杂,本文档将介绍如何安装 GDAL 并配置 Rust-GDAL 的开发环境。 1. 检…...
IntelliJ IDEA 接入 AI 编程助手(Copilot、DeepSeek、GPT-4o Mini)
IntelliJ IDEA 接入 AI 编程助手(Copilot、DeepSeek、GPT-4o Mini) 📊 引言 近年来,AI 编程助手已成为开发者的高效工具,它们可以加速代码编写、优化代码结构,并提供智能提示。本文介绍如何在 IntelliJ I…...
【金三银四】分享数据库笔试题及答案~~
你是否在面试中遇到过关于数据库的笔试题?如何高效地准备这些题目,提升自己的竞争力?本文将为你整理一些经典的数据库笔试题及其答案,助你备战面试。 金三银四马上来了,测试年限较短难免会碰到笔试题,最近…...
3.1 AI Agent产品管理革命:从愿景定义到用户价值交付的全链路方法论
AI Agent产品管理革命:从愿景定义到用户价值交付的全链路方法论 引言:AI时代产品经理的范式跃迁 Gartner预测,到2026年75%的AI项目失败将归因于产品管理缺失。本文揭示AI Agent产品经理的六大核心能力模型,通过GitHub Sentinel等案例,展示如何将大模型技术转化为可持续商…...
MySQL常见错误码及解决方法(1130、1461、2003、1040、2000、1049、1062、1129、2002、1690等)
目录 【问题1】、FATAL: error 1130: Unknown error 1130 【问题2】、FATAL: error: 1461 【问题3】、ERROR 2003 (HY000): Cant connect to MySQL server on "" (113) 【问题4】、FATAL: error 2003: Cant connect to MySQL server on 172.19.111.151 (111) 【问…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
