首页
社区
课程
招聘
[原创]从零开始制作一个linux iso镜像
发表于: 2021-11-15 18:39 11343

[原创]从零开始制作一个linux iso镜像

2021-11-15 18:39
11343

一、前言

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

 

    OS: ubuntu 20
    软件: xorriso


二、制作linux内核

    1、首先需要去官网选择一个需要的版本下载下来,官网下载地址:c53K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0K9i4u0J5L8%4u0K6i4K6u0W2k6h3c8Y4k6g2)9J5k6h3E0W2M7X3&6W2L8q4)9J5k6h3!0J5k6#2)9J5c8Y4m8#2j5W2)9J5c8X3I4A6L8Y4g2^5i4K6u0r3K9$3g2J5L8X3g2D9i4K6u0r3

 

    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,官网下载地址:4d9K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1N6i4y4&6j5X3!0^5i4K6u0W2L8X3g2@1i4K6u0r3k6r3!0%4L8X3I4G2j5h3c8K6i4K6u0r3

 

    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官方下载地址如下:cc7K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0K9i4u0J5L8%4u0K6i4K6u0W2k6h3c8Y4k6g2)9J5k6h3E0W2M7X3&6W2L8q4)9J5k6h3!0J5k6#2)9J5c8Y4m8#2j5W2)9J5c8X3I4A6L8Y4g2^5i4K6u0r3N6i4c8A6L8s2y4Q4x3V1k6T1L8$3!0@1i4K6u0r3M7%4W2K6L8r3W2F1N6i4S2Q4x3V1j5`.

 

    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,启动即可,如下图所示:

 

 


六、相关链接

    github链接:d15K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6%4K9h3&6V1P5g2)9J5k6s2m8#2M7Y4m8D9k6g2)9J5c8X3#2S2K9$3g2Q4y4h3k6D9K9h3&6#2P5q4)9#2k6X3W2K6L8H3`.`.


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2022-3-27 21:18 被windy_ll编辑 ,原因: 更新图床链接
收藏
免费 2
支持
分享
最新回复 (1)
雪    币: 4068
活跃值: (7531)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这是安全论坛的软件逆向区。。。
2021-11-15 20:52
0
游客
登录 | 注册 方可回帖
返回