一、前言

    对于一个极简化的linux系统而言,只需要三个部分就能组成,它们分别是一个linux内核、一个根文件系统和引导。以下是本文制作linux iso镜像所用到的系统和软件:

    OS: ubuntu 20

    软件: xorriso


二、制作linux内核

    1、首先需要去官网选择一个需要的版本下载下来,官网下载地址:https://mirrors.edge.kernel.org/pub/linux/kernel/

    2、利用tar将其解压,然后进入其目录中,然后配置内核,常见的配置有以下几种:

      a、make defconfig - 默认配置

      b、make allyesconfig - 创建能选yes就选yes的配置

      c、make allnoconfig - 创建能选no就选no的配置

      d、make menuconfig - 基于ncurser的图形化界面配置

      这里采用命令make defconfig使用默认的即可,如下图所示:

    3、然后使用make bzImage命令编译出内核即可,如下图所示:

    编译好的内核文件在arch文件夹相应的架构文件夹下面,如下图所示:


三、制作根文件系统

    1、我们这里利用busybox来制作一个根文件系统,busybox可以简单理解为一个linux工具的集合。首先还是下载busybox,官网下载地址:https://busybox.net/downloads/

    2、编译busybox与编译内核步骤基本一致,将下载好的压缩包进行解压,然后进入文件夹中,使用make defconfig配置默认编译选项,这里需要注意的是,在生成的.config配置文件中,需要设置CONFIG_STATIC=y,如果没有,添加即可,如下图所示:

    3、然后使用make busybox install命令编译busybox,编译好后会在当前目录下面生产一个_install文件夹,如下图所示:



    4、然后创建一个rootfs文件夹,并将_install文件夹下面除linuxxrc以外的所有文件及文件夹都拷贝到rootfs文件夹下面,最后创建dev等文件夹,最后在根目录下面创建init文件即可,文件内容如下图所示:

    5、最后利用命令find . | cpio -R root:root -H newc -o | gzip > ../rootfs.gz将文件系统打包,至此,一个文件系统就创建完成了,如下图所示:


四、BIOS

    1、这里我们使用syslinux来创建bios引导的一个linux iso镜像,syslinux官方下载地址如下:https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/

    2、将下载好的syslinux解压,然后创建文件夹isobios,将解压后的syslinux文件夹下面的bios/core/isolinux.binbios/com32/elflink/ldlinux/ldlinux.c32复制到isobios文件夹下面,如下图所示:

    3、在isobios文件夹下面创建配置文件isolinux.cfg,文件内容如下所示:

    4、最后,在isobios文件夹下面使用命令xorriso -as mkisofs -o ../testbios.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table ./生成iso镜像文件,如下图所示:

    5、使用虚拟机vmware创建一个虚拟机,如下图所示,便是我们创建的一个linux iso镜像跑起来的样子。


五、UEFI

    1、uefi这里采用system-bootsyslinux配合来制作,首先,创建两个文件夹isouefitmp,其中,isouefi用来挂载设备,tmp文件夹用来临时存放文件以计算大小,然后在tmp文件夹下面创建EFI/BOOTloader/entries目录,接着,将解压后的systemboot下面的uefi_boot/EFI/BOOT/BOOTx64.EFI文件拷贝到tmp/EFI/BOOT目录下面,如下图所示:

    2、接着,在tmp/loader目录下面,创建文件loader.conf配置文件,第一行表示默认配置是entries目录下那个文件,第二行设置默认超时时间;然后在entries文件夹下面创建相应的配置文件,这里是mll-x86_64.conf,文件内容和bios的差不多,不在单独细说,最后再将前面准备好的内核和文件系统拷贝到tmp目录下面,如下图所示:

    3、此时就可以根据tmp文件夹的总大小创建一个相同大小的img文件了,这里的tmp11M,为了稳妥起见,这里创建一个12Mimg文件,命令为truncate -s 12M uefi.img,然后使用losetup -f命令寻找一个当前未使用的逻辑设备,然后使用losetup命令将我们前面创建的img文件虚拟成改逻辑设备,接着利用mkfs.vfat将该设备格式化成vfat系统,接着使用mount命令将其挂载到isouefi文件夹下面,最后将tmp文件夹下面所有文件及其文件夹拷贝到isouefi目录下面,如下图所示:

    4、接着利用umount命令取消挂载,这样我们就得到一个包含内核文件系统等的img文件,接着创建一个iso文件夹,并且在该文件夹下面将创建一个boot文件夹,然后将img复制到iso/boot下面,最后利用xorriso工具生成iso文件即可,如下图所示:

    5、最后,新建一个虚拟机,引导选择uefi,启动即可,如下图所示:

从零开始制作一个linux iso镜像的更多相关文章

  1. 制作自定义系统iso镜像

    一.制作自己的ISO启动盘篇 在需要安装特定系统的时候,我们使用原版的linux系统盘镜像来安装,需要手动操作N多步,在机器非常多的环境下,这种方式显然不理想,这是我我们就需要制作我们特定的系统盘来简 ...

  2. 利用dd命令制作u盘iso镜像

    现在安装系统都是用u盘安装,那么制作u盘的iso镜像就是必须的了.现在此类工具倒是不少,但是,好用的不多,有的还收费.唉,还是用dd吧,老配方,老味道. 首先:要df -h一下,看看u盘的盘符,类似  ...

  3. 「Linux」制作一个Linux系统

    一.前言 Linux操作系统至1991年10月5日诞生以来,就其开源性和自由性得到了很多技术大牛的青睐,每个Linux爱好者都为其贡献了自己的一份力,不管是在Linux内核还是开源软件等方面,都为我们 ...

  4. 封装win7系统、制作win7GHO镜像、制作一个自定义的镜像文件具体步骤、制作Win10镜像gho

    作者:导演你让灰太狼吃只羊 来源:CSDN 原文:https://blog.csdn.net/qq_35057426/article/details/83015516 版权声明:本文为博主原创文章,转 ...

  5. Linux ISO镜像挂载

    挂载本地镜像? 镜像光盘的格式 iso9660 mount -t iso9660 -o,loop /data/centos.iso /iso 查看挂载磁盘 df -h cat /proc/mounts ...

  6. 微信小程序-从零开始制作一个跑步微信小程序

    来源:伯乐在线 - 王小树 链接:http://ios.jobbole.com/90603/ 点击 → 申请加入伯乐在线专栏作者 一.准备工作 1.注册一个小程序账号,得用一个没注册过公众号的邮箱注册 ...

  7. django 从零开始 制作一个图站 1环境的配置以及测试本地服务器

    先使用用virtualenv建立一个虚拟环境 使用pycharm 建立一个django项目 选择虚拟环境和建立一个应用app 其中 tuzhan是项目根目录 user是我们的项目app 中间一些项目文 ...

  8. springboot2.x基础教程:动手制作一个starter包

    上一篇博客介绍了springboot自动装配的原理.springboot本身有丰富的spring-boot-starter-xx集成组件,这一篇趁热打铁加深理解,我们利用springboot自动装配的 ...

  9. 制作iso镜像U盘自动化安装linux系统

    自制光盘引导自动化安装 首先我们要明白都需要哪些文件,我们列举下 ①需要一个文件夹来存放文件,将来把这个目录打包成iso ②准备kickstart文件(ks.cfg) ③准备启动文件启动菜单 差不多也 ...

随机推荐

  1. CF444C-DZY Loves Colors【线段树,set】

    正题 题目链接:https://www.luogu.com.cn/problem/CF444C 题目大意 \(n\)个物品第\(i\)个颜色为\(i\),权值为\(0\).要求支持\(m\)次操作 给 ...

  2. CRM是什么,你有认真了解过CRM吗?

    这是CRM的一个简单定义 客户关系管理 (CRM)是一种用于管理公司与客户和潜在客户的所有关系和互动的技术.目标很简单:改善业务关系.CRM 系统可帮助公司与客户保持联系.简化流程并提高盈利能力. 当 ...

  3. 日常学习用到的Git指令

    Git 常用Git指令 (本地) git init - 将文件夹初始化为Git仓库 git add - 将工作区的指定文件放入暂存区 git status - 查看工作区和暂存区的状态 git com ...

  4. std::sort 的注意事项

    Luogu P1177 [模板]快速排序 \(\Large{AC}\) 代码: #include<bits/stdc++.h> using namespace std; int n,a[1 ...

  5. Linux中的文件使用FTP进行文件备份

    注意!!! 本文是在linux中进行ftp备份(备份到另一个linux服务器) 上传思路: 1.每次上传文件时, 后台接收文件, 使用transferTo上传到Linux服务器 2.把文件路径 + F ...

  6. 架构师必备:MySQL主从延迟解决办法

    上一篇文章介绍了MySQL主从同步的原理和应用,本文总结了MySQL主从延迟的原因和解决办法.如果主从延迟过大,会影响到业务,应当采用合适的解决方案. MySQL主从延迟的表现 先insert或upd ...

  7. 痞子衡嵌入式:超级下载算法RT-UFL v1.0在IAR EW for Arm下的使用

    痞子衡主导的"学术"项目 <RT-UFL - 一个适用全平台i.MXRT的超级下载算法设计> v1.0 版发布近 4 个月了,部分客户已经在实际项目开发调试中用上了这个 ...

  8. 《Spring源码深度解析》学习笔记——Spring的整体架构与容器的基本实现

    pring框架是一个分层架构,它包含一系列的功能要素,并被分为大约20个模块,如下图所示 这些模块被总结为以下几个部分: Core Container Core Container(核心容器)包含有C ...

  9. 使用logstash的input file filter收集日志文件

    使用logstash的input file filter收集日志文件 一.需求 二.实现步骤 1.前置知识 2.编写pipeline文件 3.Input 中 file 插件的部分参数解释: 4.启动l ...

  10. Noip模拟66 2021.10.2

    T1 接力比赛 思路就是直接做背包$dp$,然后看看容量相同的相加的最大值. 考虑如何在$dp$过程中进行优化 注意到转移方程的第二维枚举容量没有必要从容量总和开始枚举 那么我们便转移边统计前缀和,从 ...