编写一个基于其他系的linux系统并且把它打包为一个iso镜像思想

news2024/11/26 9:28:03

目录

前面写的一篇文章

前言

isolinux引导模式启动流程

为什么要initramdisk操作而不直接加载文件系统

编写系统的思想

可能问题

一般的iso镜像目前只支持最大4G的大小,需要怎么解决?

如何去找驱动

木木em哈哈想说的话(与本博文无光)


前面写的一篇文章

编译一个基于debian/ubuntu,centos,arhlinux第三方系统-CSDN博客文章浏览阅读988次,点赞19次,收藏14次。这边由于操作比较多,整合了许多大佬的教程以及自行的摸索,流程会长一些,可能对于一些程序的错误以及bug可能会忘记提及,不过我印象比较深亦或者是网上几乎找不到答案的bug和错误都会提及。https://blog.csdn.net/mumuemhaha/article/details/137979943?spm=1001.2014.3001.5501

前言

我们可能做不到从零开始写一个Linux,或者说我们可以做到写一个十分简单的Linux系统但是后续的驱动,以及软件编译会遇到诸多的问题,此时我们可以基于debian,redhat等等系的linux系统去编写另外一个系统。

诸如Ubuntu(乌班图),centos,pve,都是基于上面的debian或者是redhat系进行编写而来,他们也在市场上或多或少取得了很大的成功以及名气

当然我们没必要做的像他这么好我们只需要复制一个最简单的debian系统,之后在它的基础上装上我们所需要的软件。并且把它打包为iso镜像即可。

在上一篇的文章中我们已经可以编写一个debian的系统并且把它打包为一个ISO的镜像,但是问题是在那个镜像中我们里面的Linux系统是全部加载到内存中的。

isolinux引导模式启动流程

这里我要讲一讲在isolinux引导模式中linux的启动流程

  • 首先主机的主板启动,电脑会先加载系统主板的bios文件,读取硬盘或者是iso镜像文件
  • 主板bios从主板的硬盘或者是iso镜像中读取0磁道1扇区的 512 字节,把它加载到内存中的某一个位置,这就是硬盘或者是镜像的MBR
  • 那512字节所能存储和做到的事情很少,所以它一般不会去做什么事情,他的主要工作就是去磁盘(镜像)读取另一段代码,这里我们把这一段代码叫做bootloader,而真正加载系统的是bootloader
  • 在bootloader中会把内核中的代码加载到内存中,之后再加载根文件系统,因为再Linux中一切皆文件,文件系统都是要挂载到某个目录上的。
  • 注意,现在由于没有指定根目录文件,此时需要把iso镜像中的一个压缩包/镜像(这个需要自己创建)解压到内存中运行,也就是initramdisk(或 initramfs),这里的文件全部存储在你的内存中,本质是把你的内存当作硬盘来用,一但重启,内存中的改动不做保存。
  • 如果不需要安装系统——在initramdisk中系统根目录找到init文件,加载所需要的驱动:比如sata驱动,网卡驱动,显卡驱动......之后把根目录切换到硬盘目录中即可
  • 如果需要安装系统——在initramdisk中系统根目录找到init文件,加载所需要的驱动:比如sata驱动,网卡驱动,显卡驱动......以及后续的把另外一个iso镜像写入到硬盘之中。

为什么要initramdisk操作而不直接加载文件系统

因为在内核中所拥有的驱动十分少,甚至没有nvme,sata驱动,如果直接启动会找不到硬盘或者是网卡...

而如果把所有驱动编入内核的话内核会十分的臃肿而且有一些硬件或者使用场景(比如嵌入式系统)根本用不上一些启动,而这些更大的内核会占用更多宝贵的存储空间,并且把一些驱动(诸如显卡驱动)写入内核会不方便驱动更新

这时候我们给出的办法是只需要在内核加载少量可以保证linux开机的驱动,之后后续在initramfs中加载驱动,你也可以自定义在initramfs中的脚本。

编写系统的思想

我想的步骤首先是利用initramfs加载一些必要的驱动,比如硬盘驱动和其他驱动之类的,之后把需要备份的系统给打包为iso镜像,然后在initramfs执行写入到硬盘之中。

可能问题

一般的iso镜像目前只支持最大4G的大小,需要怎么解决?

只需要在initramfs中加载网络驱动,然后编写一个脚本运行,在网络上下载所需要的文件即可。

如何去找驱动

可以把最小化的debian,centos或者redhat系统作为initramfs,之后安装一些你想要的驱动然后打包为third.img作为initramfs

木木em哈哈想说的话(与本博文无光)

博主马上大四了,现在准备考研,csdn目前暂时随缘更新,偶尔回答一些问题。半年之后搞毕设看看能不能搞个好玩的东西(滑稽.jpg)

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

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

相关文章

详细分析SpringBootTest中的测试类(附Demo)

目录 前言1. 基本知识2. Demo3. 实战3.1 项目测试3.2 功能测试 前言 书写测试类,一般只需要加入Test即可,但是结合Springboot项目来整体测试对应需要怎么下手 详细的Java知识点推荐阅读:java框架 零基础从入门到精通的学习路线 附开源项目面…

[CAN] 通讯协议手动解析与手动打包 [手撕编码格式]

手动解析与手动打包 一、Intel格式编码1.1 报文解析。1.2 报文打包二、Motorola格式通讯协议2.1 报文解析。2.2 报文打包🙋 前言 CAN有两种编码格式:Intel编码格式 和 Motorola编码格式,本教程将分别对两种格式进行手动解析与手动打包。 一、Intel格式编码 假设已知雷达CAN…

【C++题解】1721. 输出个位为5或者个位为8数

问题:1721. 输出个位为5或者个位为8数 类型:简单循环 题目描述: 请从小到大输出 1∼n 中所有个位为 5 或者个位为8 的所有的整数,每行 1 个。 比如,假设 n20,那么满足条件的数输出如下: 5 8 1…

【多线程】如何解决线程安全问题?

🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. synchronized 关键字1.1 锁是什么1.2 如何加锁1.3 synchronized 修饰方法1) 修饰普通成员方法2) 修饰静态…

Rust 程序设计语言学习——泛型、Trait和生命周期

每一种编程语言都有高效处理重复概念的工具。在 Rust 中其工具之一就是泛型。泛型是具体类型或其他属性的抽象替代。 Trait 定义了某个特定类型拥有可能与其他类型共享的功能。可以通过 Trait 以一种抽象的方式定义共同行为。可以使用 trait bounds 指定泛型是任何拥有特定行为…

Java——IO流(一)-(8/8):释放资源-try-catch-finally、try-catch-resource

目录 try-catch-finally 介绍 实例演示1 实例演示2 try-catch-resource 介绍 实例演示 try-catch-finally 介绍 普通的释放流的方法可能会因中间的异常或是其他原因,导致程序执行不到释放流的代码就结束了,会有资源浪费的风险,所以建…

入门JavaWeb之 JavaBean 实体类

JavaBean 有特定写法: 1.必须有一个无参构造 2.属性必须私有 3.必须有对应的 get/set 方法 一般用来和数据库的字段做映射 ORM:对象关系映射 表->类 字段->属性 行记录->对象 连接数据库 没有的话去 Settings -> Plugins 搜索 Data…

JavaScript--js基础(详细 全面)

目录 前言: JavaScript 是什么?JavaScript 简介 1.JavaScript历史 2.JavaScript 具有以下特点 第一个JavaScript程序 1.在脚本文件中编写JavaScript代码 2.JavaScript代码执行顺序 基本语法 1.变量 2.数据类型 3.算术运算符 4.赋值运算 5.字符串运算符 6…

GoSync+华为智能穿戴使用指导

GoSync官方简介: GoSync 是一款免费应用程序,主要用于将您的可穿戴设备中的步行、跑步、骑自行车和游泳等活动数据同步到您的 Google Fit 和其他健身平台。在开始同步数据之前,您需要将您的可穿戴设备账户与您的健身平台账户连接起来。在创建…

Modbus为何要转成EtherCAT

1. Modbus是什么? Modbus是一种工业通信协议,广泛应用于工业自动化领域。它支持多种通信方式,包括RS-232、RS-485和TCP/IP等。Modbus协议简单易用,能够实现设备之间的数据交换和控制命令的传输。然而,它在数据传输速率…

微软推出最新视觉基础模型Florence-2 可在浏览器运行

据微软官方消息,微软推出视觉基础模型Florence-2,该模型现已能够在支持WebGPU的浏览器中100%本地运行。Florence-2-base-ft是一个拥有2.3亿参数的视觉基础模型,采用基于提示的方法来处理广泛的视觉和视觉语言任务。 该模型支持多种功能&…

FME实现批量合并shapefile文件数据,并提取原文件名,输出到属性表字段中的解决方法

目录 一、实现效果 二、实现过程 1.读取数据 2.暴露文件名属性 3.设置文件名字段 4.输出成果 5.模板的使用 三、总结 今天来介绍如何使用FME软件来实现对多个shapefile数据进行批量合并,同时提取原文件名并存储到合并后shapefile数据属性表字段中的方法&…

由监官要求下架docker hub镜像导致无法正常拉取镜像

问题:下载docker镜像超时 error pulling image configuration: download failed after attempts6: dial tcp 202.160.128.205:443: i/o timeout解决办法:配置daemon.json [rootbogon aihuidi]# cat /etc/docker/daemon.json {"registry-mirrors&qu…

<项目> 日志系统

目录 前言: 一、项目介绍 二、为什么需要日志系统 三、日志系统技术实现 (一)同步写⽇志 (二)异步写⽇志 四、前置技术学习 (一)不定参宏函数 (二)C语言不定参数…

mysql安装创建数据库防止踩坑

为了安装MySQL的家人们走弯路,稍微有些啰嗦,讲述我安装的时遇到的问题,如何解决。仔细看看离成功不远。 mysql下载链接 MySQL :: Download MySQL Community Server windows下安装mysql-8.0.29-winx64,下载安装包后解压到文件夹中…

摄影后期色彩管理流程(Lightroom篇)

在摄影后期处理中,色彩管理是确保图像从捕捉到输出的一致性和准确性的关键。Lightroom 和 Photoshop 其实已经将这套色彩管理流程作为默认选项,如果实质操作时仍存在色彩偏差的问题,可参考以下内容。 ProPhoto RGB > Adobe RGB > sRGB …

clickhouse count和uniqCombined

count(distinct ) 和 uniqCombined 获取去重后的总数。 去重:order by distinct argMax group by 哪个好?? clickhouse数据去重函数介绍(count distinct)_clickhouse distinct-CSDN博客

[论文阅读笔记33] Matching Anything by Segmenting Anything (CVPR2024 highlight)

这篇文章借助SAM模型强大的泛化性,在任意域上进行任意的多目标跟踪,而无需任何额外的标注。 其核心思想就是在训练的过程中,利用strong augmentation对一张图片进行变换,然后用SAM分割出其中的对象,因此可以找到一组图…

注意力机制在大语言模型中的应用

在大语言模型中,注意力机制(Attention Mechanism)用于捕获输入序列中不同标记(token)之间的关系和依赖性。这种机制可以动态地调整每个标记对当前处理任务的重要性,从而提高模型的性能。具体来说&#xff0…

Qt通过句柄获取其它进程控件实例

1.通过spy获取想要获取控件的句柄id 通过spy获取另一个软件的文本框的句柄 2.Qt写代码, 根据句柄获取文本框的内容 void getTextFromExternalWindow(HWND hwnd) {const int bufferSize 256;TCHAR buffer[bufferSize];// 获取窗口文本内容int length GetWindowT…