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

目录

前面写的一篇文章

前言

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.mzph.cn/web/35725.shtml

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

相关文章

尊重·理解·协同:论团队合作中的认知提升与信誉建设

零、背景 为什么写博客? 给自己灌输大道理—唠叨哲学 定期总结:反思这段时间内的生活、学习或工作中的得失,提炼出具有普适性的经验和教训。 紧跟热点新闻来有点流量 独特视角:尽量优先进行——人云亦云,先学某一…

ORC与Parquet列式存储的区别

ORC与Parquet列式存储 1、ORC与Parquet列式存储2、ORC与Parquet的区别 列式存储(Columnar Storage)是一种优化的数据存储方式,与传统的行式存储(Row Storage)相比,列式存储在数据压缩、查询性能、I/O效率等…

开源 150 T 数据(2023年之前所有数据)

开源 150 T 数据(2023年之前所有数据) 开源 150 T 数据生成大规模、高质量训练数据集 生成巨量数据 数据清洗和过滤 混合数据源 多级别训练和模型评估 探索新的训练策略多级别训练和模型评估探索新的训练策略 万卡 H100 集群训练 开源 150 T 数据 …

二进制方式部署k8s集群

前置知识点 1、生产环境部署K8s集群的两种方式 • kubeadm Kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。 • 二进制包 从github下载发行版的二进制包,手动部署每个组件,组成Kub…

【perl】脚本编程的一些坑案例

引言 记录自己跳进的【perl】编程小坑,以己为鉴。 1、eq $str1 "12345\n"; $str2 "12345"; if ($str1 eq $str2) { print "OK" } 上述代码不会打印 OK。特别在读文件 ,匹配字符串时容易出BUG。 案例说明: 有…

python3.12.4 常用四个数据类型的各个函数详解

在完成目标前,我们最好审视自己到底有什么,有多远。 零、介绍 我打算详细了解一下常用的几种数据类型的各个接口,主要的来源是python shell中的 help(…)命令。python中基本的数据类型有四个 list, tuple, dict, set, 宽泛的讲,肯…

C++编程逻辑讲解step by step:存折和信用卡类。

题目 存折和信用卡类&#xff0c;信用卡是一种存折&#xff0c;可以透支&#xff0c;可以存款。 代码 #include<iostream> #include<string> using namespace std; class passbook {public: passbook(string nam,int n,float m) {namenam; numn; balancem; } vo…

[数据集][目标检测]游泳者溺水检测数据集VOC+YOLO格式8275张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;8275 标注数量(xml文件个数)&#xff1a;8275 标注数量(txt文件个数)&#xff1a;8275 标注…

python每日学20:一个更加实用的类

背景&#xff1a;今天继续学习《python学习手册》第28章《一个更加实际的示例》&#xff0c;今天学习本章前言&#xff0c;页码是803-808 本章要创建二个更加实际的类&#xff1a; Person: 一个创建并处理人员相关的信息的类 Manager: 一个定制化的Person,修改了所继承的行为。…

中北大学算法课动态规划问题实验:题目1 数塔问题

目录 1.实验名称2.实验目的3.实验内容4.实验过程伪代码java代码 5.实验结论及心得代码运行截图心得 实验报告 1.实验名称 动态规划问题实验&#xff1a;题目1 数塔问题 2.实验目的 (1)掌握动态规划法的设计思想&#xff1b; (2)掌握数塔问题的具体实现过程&#xff1b; (3)熟…

webpack 打包配置

主要实现功能 处理html、css、js、vue、jsx、图片等文件压缩处理好的文件分割压缩好的文件路由懒加载开启缓存和热更新开启多线程打包… 新建【webpack.config.js】 新建【webpack.dev.js】开发打包配置新建【webpack.prod.js】生产打包配置新建【webpack.config.js】&#…

Spring Boot中的事务管理策略

Spring Boot中的事务管理策略 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨在Spring Boot应用中的事务管理策略&#xff0c;以及如何通过合…

评估大型语言模型生成文章的能力

1. AI解读 1.1. 总体概要 本文探讨了大型语言模型&#xff08;LLMs&#xff09;如GPT-4在生成特定领域&#xff08;如计算机科学中的自然语言处理NLP&#xff09;教育调查文章方面的能力和局限性。研究发现&#xff0c;尽管GPT-4能够根据特定指导生成高质量的调查文章&#x…

Pytorch中torch.cat()函数的使用及说明

如果你有两个形状为 (3, 4) 的tensor A 和 B&#xff0c;并且你想要在第一个维度上连接它们&#xff0c;你可以这样做&#xff1a; import torchA torch.randn(3, 4) B torch.randn(3, 4) C torch.cat([A, B], dim0) # dim0 表示在第一个维度上连接 此时 C 的形状将会是 …

kafka consumer客户端消费逻辑解析

kafka consumer客户端消费逻辑解析 一、主要消费步骤二、提交策略【步骤2代码解析】【提交策略总结】 三、拉取策略&#xff08;待补充&#xff09;四、消费策略【代码解析】【消费策略总结】 一、主要消费步骤 这是kafka客户端拉取消息的入口&#xff0c;有4个主要部分 1、启…

【Rust】function和methed的区别

文章目录 functionmethedAssociated Functions 参考资料 一句话总结&#xff1a; function和methed很多都是相同的。 不同点在于&#xff1a; methed定义在结构体里面&#xff0c;并且它的第一个参数肯定是self&#xff0c;代表结构体实例。方法需要用实例名.方法名调用当然结…

苏东坡传-读书笔记三

苏东坡去世之后&#xff0c;一黄某获得苏东坡一珍贵的手稿&#xff0c;其中有苏东坡下列的名句&#xff1a; “处贫贱易&#xff0c;处富贵难。安劳苦易&#xff0c;安闲散难。忍痛易&#xff0c;忍痒难。人能安闲散&#xff0c;耐富贵&#xff0c;忍痒&#xff0c;真有道之士也…

三生随记——暗夜诊所

在偏远的小镇边缘&#xff0c;矗立着一座看似普通的诊所。这座诊所历史悠久&#xff0c;据传已经存在了几十年&#xff0c;但关于它的具体来历和背后的故事&#xff0c;却鲜有人知。它的外表看似破旧不堪&#xff0c;但内部却异常整洁&#xff0c;散发着一种神秘而诡异的气息。…

vCenter-vAPI-Endpoint service health shows as Yellow

- 问题摘要&#xff1a;vAPI-Endpoint service health shows as Yellow - 解决方案/工作方法&#xff1a; 使用命令重启vAPI Endpoint service后该服务运行正常。 service-control --stop vmware-vapi-endpoint service-control --start vmware-vapi-endpoint VMware KB&…

详细分析Oracle修改默认的时间格式(四种方式)

目录 前言1. 会话级别2. 系统级别3. 环境配置4. 函数格式化5. 总结 前言 默认的日期和时间格式由参数NLS_DATE_FORMAT控制 如果需要修改默认的时间格式&#xff0c;可以通过修改会话级别或系统级别的参数来实现 1. 会话级别 在当前会话中设置日期格式&#xff0c;这只会影响…