编写一个基于其他系的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,一经查实,立即删除!

相关文章

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

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

开源 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。 案例说明: 有…

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

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

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

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

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

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

kafka consumer客户端消费逻辑解析

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

苏东坡传-读书笔记三

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

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

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

uni-app (通过HBuilderX 和 VS Code 开发)详细连接过程教学。

使用 HBuilderX 创建 uni-app 项目 并编译到微信开发者工具。 uni-app 支持两种方式创建项目: 通过 HBuilderX 创建 通过命令行创建 首先我们需要先下载HBuilderX 下载链接地址:DCloud - HBuilder、HBuilderX、uni-app、uniapp、5、5plus、mui、wap2…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] LYA的登山之旅01(100分)- 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 &#x1f…

《梦醒蝶飞:释放Excel函数与公式的力量》6.4 TODAY函数

第四节:6.4 TODAY函数 1)TODAY函数概述 TODAY函数是Excel中一个非常有用的内置函数,它返回当前的日期。与NOW函数不同,TODAY函数仅返回日期部分,时间部分默认为午夜(0:00)。 2)函…

[数据质量]手动实现 阿里云DataWorks 的数据质量监控告警功能

目录 手动实现 DataWorks 的数据质量监控告警功能1. 简介:2. 数据表准备2.1 tmp_monitor_tbl_info (数据监控信息表)2.2 tmp_monitor_rule_info (数据质量监控规则表)2.3 tmp_monitor_tbl_info_log_di (数据监控信息记录表) 3. 程序开发3.1 数据检查程序3.2 告警信息推送程序3.…

Jenkins教程-10-发送飞书测试报告通知

上一小节我们学习了发送企业微信测试报告通知的方法,本小节我们讲解一下发送飞书测试报告通知的方法。 1、自动化用例执行完后,使用pytest_terminal_summary钩子函数收集测试结果,存入本地status.txt文件中,供Jenkins调用 conft…

优化 C# 和 .NET Core Web API 中的 LINQ 查询

LINQ(语言集成查询)是 C# 中的一项强大功能,允许开发人员以可读且简洁的方式查询和操作数据。但是,LINQ 的使用效率低下可能会导致性能瓶颈,尤其是在处理 .NET Core Web API 中的大型数据集时。优化 LINQ 查询对于维护…

嵌入式 Linux 设备刷系统具体组成

嵌入式 Linux 设备刷系统具体组成 1 介绍1.1 概述1.2 嵌入式 Linux 的组成1.3 U-Boot1.4 Linux 内核1.5 设备树1.6 根文件系统 参考 1 介绍 1.1 概述 一个完整的 linux 系统,通常包含了 U-Boot、kernel、设备树以及根文件系统。 1.2 嵌入式 Linux 的组成 1.3 U-…

Java热门技术点总结:Lambda表达式与Stream API

第一部分:Lambda表达式 1. 简介 Lambda表达式是Java 8引入的一个非常重要的特性,它提供了一种简洁、灵活的函数式编程方式。Lambda表达式允许我们将函数作为参数传递,极大的简化了代码的编写。 2. 基本语法 Lambda表达式的基本语法如下&a…

Java基于jjwt操作jwt

之前讲解了jwt的相关知识&#xff0c;有不了解的&#xff0c;可以查看相关的文章JWT简介-CSDN博客&#xff0c;本节不再介绍&#xff0c;主要讲解有关java中如何通过jjwt库产生jwt以及解析jwt的相关操作。 添加maven依赖 <dependency><groupId>io.jsonwebtoken&l…

目标检测之YoloV1

一、预测阶段&#xff08;前向推断&#xff09; 在预测阶段Yolo就相当于一个黑箱子&#xff0c;输入的是448*448*3的图像&#xff0c;输出是7*7*30的张量&#xff0c;包含了所有预测框的坐标、置信度和类别 为什么是7*7*30呢&#xff1f; --将输入图像划分成s*s个grid cell&a…