制作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 进入根文件系统进行操作,开始修改

  1. 更改根目录
#PC
sudo chroot ubuntu-rootfs
  1. 问题
    /usr/bin/apt-key: 95: cannot create /dev/null: Permission denied
sudo cp -af /dev/null dev/
  1. 更新
# QEMU
#更新
apt update
apt upgrade

#安装常用工具包
apt install net-tools iproute2 ethtool ifupdown iputils-ping vim sudo

apt 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/hostname

exit

# 查询系统中属于nano的文件:
$ dpkg-query -L vim
  1. 桌面系统
  • 关于 xubuntu-desktop
    • 大小在3.5G左右, 安装需要很长时间
    • 安装过程需要配置键盘之类的,需要手动选择输入
    • 显示管理选择 LightDM, 选 GDM 没有图像画面.

PS: LightDM 和 GDM 都是 Linux 系统的显示管理器,负责显示登录界面,并允许用户登录系统。

特性LightDMGDM
大小小巧较大
速度较快较慢
功能简单丰富
可定制一般较好

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桌面版镜像

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringMVC详解

文章目录 1 什么是MVC 1.1 MVC设计思想1.2 Spring MVC 2 SpringMVC快速入门3 SpringMVC处理请求 3.1 请求分类及处理方式 3.1.1 静态请求3.1.2 动态请求 3.2 处理静态请求 3.2.1 处理html文件请求3.2.2 处理图片等请求 3.3 处理动态请求 3.3.1 注解说明3.3.2 示例 3.4 常见问题…

一个让Stable Diffusion更稳定、更易用的Github开源项目

2023除了ChatGPT大火,Stable Diffusion同样也是非常火热,Stable Diffusion是一个Github开源项目,很多爱好者都会本地安装,但面对一些初学者来说,在安装、配置和使用过程中还是会经常出现很多问题,特别不了解…

Deepseek R1模型本地化部署+API接口调用详细教程:释放AI生产力

文章目录 前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装ollama2部署DeepSeek R1模型删除已存在模型,以7b模型为例 三、DeepSeek API接口调用Cline配置 前言 随着最近人工智能 DeepSeek 的爆火,越来越多的技术大佬们开始关注如…

[java] 常见的七大查找算法

目录 基本查找-重要 二分查找-重要 插值查找-重要 斐波那契查找 分块查找-重要 哈希查找 树表查找 基本查找-重要 也叫做顺序查找(顺序查找适合于存储结构为数组或者链表) 基本思想:顺序查找也称为线形查找,属于无序查找算…

开源、免费项目管理工具比较:2025最新整理30款

好用的开源、免费版项目管理系统有:1.Redmine;2. Taiga;3. OpenProject; 4.ProjectLibre; 5.GanttProject; 6.Tuleap; 7.Trac;8. Phabricator; 9.Notion; 10.…

Linux-C/C++《七、字符串处理》(字符串输入/输出、C 库中提供的字符串处理函数、正则表达式等)

字符串处理在几乎所有的编程语言中都是一个绕不开的话题,在一些高级语言当中,对字符串的处理支 持度更是完善,譬如 C、 C# 、 Python 等。若在 C 语言中想要对字符串进行相关的处理,譬如将两个字符串进行拼接、字符串查找、两个…

鸿蒙中,UIAbility组件启动模式(3种分别是Singleton(单实例模式)Multiton(多实例模式)Specified(指定实例模式))

UIAbility的启动模式是指UIAbility实例在启动时的不同呈现状态。针对不同的业务场景,系统提供了三种启动模式: Singleton(单实例模式) Multiton(多实例模式) Specified(指定实例模式&#xf…

Linux第107步_Linux之PCF8563实验

使用PCF8563代替内核的RTC,可以降低功耗,提高时间的精度。同时有助于进一步熟悉I2C驱动的编写。 1、了解rtc_time64_to_tm()和rtc_tm_to_time64() 打开“drivers/rtc/lib.c” /* * rtc_time64_to_tm - Converts time64_t to rtc_time. * Convert seco…

上海正控ZK880 变频器基本操作

1,变频器参数设置: F0-02设置成2;(通过modbus指令进行开机和关机的动作;) Fd-00设置成5005; Fd-01设置成0; Fd-02设置成1; Fd-03设置成2ms; 2.硬件连接&a…

测试环境管理的最佳实践:从搭建到维护的实战指南

引言 在电商公司的一次“双十一”大促前,测试团队发现预发布环境的订单支付接口频繁超时。经过排查,发现测试环境的Redis版本与生产环境不一致,导致缓存策略失效。这一事件直接导致上线延迟48小时,损失数百万营收。测试环境的稳定性直接决定了软件交付的质量与效率。本文将…

利用亚马逊云科技RDS for SQL Server配置向量数据存储

生成式人工智能(AI)正迎来又一个快速发展期,引起了开发者们的广泛关注。将生成式能力集成到商业服务和解决方案中变得非常重要。当前的生成式AI解决方案是机器学习和深度学习模型逐步进化迭代的结果。从深度学习到生成式AI的质变飞跃主要是由…

YOLOV8的学习记录(一) 环境配置和安装

YOLO8的官网地址:YOLOv8 - Ultralytics YOLO Docs • YOLOV8的环境要求: YOLO集成在ultralytics库中,ultralytics库的环境要求: Python>3.7 PyTorch>1.10.0 在按照所需python版本新建好的conda环境中安装好torch&#x…

如何在 IntelliJ IDEA 中使用 Bito AI 插件

如何在 IntelliJ IDEA 中使用 Bito AI 插件 Bito: On-Demand AI Code Reviews Bito AI 插件是一个智能开发工具,能够帮助开发者提升编码效率,自动化生成代码、注释、单元测试等。本文将详细介绍 Bito AI 插件在 IntelliJ IDEA 中的使用方法&#xff0c…

如何升级Python版本。以下是详细的步骤和注意事项:检查当前Python版本:在命令行或终端中输入以下命令来查看当前安装的Python版本: bash复制代

升级Python版本。以下是详细的步骤和注意事项: 检查当前Python版本:在命令行或终端中输入以下命令来查看当前安装的Python版本: bash复制代码 python --version 这将显示你当前使用的Python版本。 下载最新版本的Python:访问Py…

SpringBoot(7)-Swagger

目录 一、是什么 二、SpringBoot集成Swagger 三、配置Swagger 3.1 配置文档信息 3.2 配置扫描接口 3.3 配置Swagger开关 3.4 配置API分组 3.5 实体配置 四、常用注解 五、总结 一、是什么 是一款API框架,API文档和API定义同步更新,可以在线测…

C++效率掌握之STL库:string底层剖析

文章目录 1.学习string底层的必要性2.string类对象基本函数实现3.string类对象的遍历4.string类对象的扩容追加5.string类对象的插入、删除6.string类对象的查找、提取、大小调整7.string类对象的流输出、流提取希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力…

SCI学术论文图片怎么免费绘制:drawio,gitmind

SCI学术论文图片怎么免费绘制 目录 SCI学术论文图片怎么免费绘制overleaf怎么图片不清晰怎么办SCI学术论文图片怎么导出pdfdrawiogitmind**1. 使用在线工具****Lucidchart****2. Draw.io****3. ProcessOn****4. 使用桌面工具****Dia****5. 使用Markdown工具(如Typora)**如果你…

对于RocksDB和LSM Tree的一些理解,以及TiDB架构初识

LSM Tree的读写过程 HBase、LevelDB,rocksDB(是一个引擎)底层的数据结构是LSM Tree适合写多读少的场景,都是追加写入内存中的MemTable,写入一条删除(或修改)标记,而不用去访问实际的…

Java 设计模式之迭代器模式

文章目录 Java 设计模式之迭代器模式概述UML代码实现Java的迭代器 Java 设计模式之迭代器模式 概述 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。 UML Iterator:迭代器接口&#xff…

【原创】解决vue-element-plus-admin无法实现下拉框动态控制表单功能,动态显隐输入框

前言 目前使用vue-element-plus-admin想要做一个系统定时任务功能,可以选择不同的定时任务类型,比如使用cron表达式、周期执行、指定时间执行等。每种类型对应不同的输入框,需要动态显隐输入框才行,但是这个vue-element-plus-adm…