1.前言

一直以来都想制作一个最小化的Linux系统,这个小系统需要有常用的Linux 命令,以及定制化的某些功能。可是由于种种原因一直没能实现,最近终于有时间把它做了出来。

本文所说的精简的Linux系统主要由内核busybox,以及引导程序构成。

感谢网友[windy_ll](https://blog.csdn.net/qq_41374107)的文章,我是看着他的教程一步一步完成以下操作的。

2.安装配置内核所需要的依赖

我的环境是ubuntu20.04,初装的系统,软件源已配置为阿里的源。
在这里插入图片描述
为了保证后续软件的顺利安装先更新一下源。

apt update

在这里插入图片描述
2.1 安装依赖

由于需要配置内核,本文的所有操作都在root用户下进行

apt install -y make
apt install -y make-guile
apt install -y gcc
apt install -y flex
apt install -y bison 
apt install -y libelf-dev
apt install -y openssl
apt install -y libncurses-dev
apt install -y libssl-dev

小插曲:就在刚刚我的ubuntu20.04 ctrl+shift + insert粘贴键不好用了,重启了一下系统又好了。读者诸君你们大可不必一个命令一个命令的去敲,使用快捷键粘贴就可以了。

2.2 下载内核

wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.13.8.tar.gz

在这里插入图片描述
此处下载的内核就是咱们将要制作的镜像系统的内核。

tar -zxvf linux-5.13.8.tar.gz 
cd linux-5.13.8

在这里插入图片描述
2.3 配置内核

常见的配置有以下几种:

  • make defconfig - 默认配置
  • make allyesconfig - 创建能选yes就选yes的配置
  • make allnoconfig - 创建能选no就选no的配置
  • make menuconfig - 基于ncurser的图形化界面配置

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

make defconfig

在这里插入图片描述
2.4 编译内核

make bzImage

在这里插入图片描述
这个过程有点漫长,先去洗个脸😄

如果没有什么报错,出现下图说明编译成功了。

在这里插入图片描述
编译好的内核文件在arch文件夹相应的架构文件夹下面,如下图所示:
在这里插入图片描述
3.制作根文件系统

3.1 下载busybox

wget https://busybox.net/downloads/busybox-1.32.1.tar.bz2

3.2 配置busybox

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

cd ~/Downloads
wget https://busybox.net/downloads/busybox-1.32.1.tar.bz2
tar -jxvf busybox-1.32.1.tar.bz2
cd busybox-1.32.1
make defconfig
vim .config

在这里插入图片描述
3.2 编译busybox

make busybox install

在这里插入图片描述
编译完成后,会在当前目录下新增一个_install文件夹,里面就是编译好的busybox

在这里插入图片描述
3.3 制作根文件

删除_install目录下的linuxrc文件

cd _install/
rm -rf linuxrc

在这里插入图片描述
复制_install 文件夹下的除linuxrc以外的所有文件到rootfs文件夹下面。

cd ..
cd ..
mkdir rootfs
cd rootfs
cp -r ../busybox-1.32.1/_install/bin/ .
cp -r ../busybox-1.32.1/_install/sbin/ .
cp -r ../busybox-1.32.1/_install/usr/ .
mkdir dev proc sys

在这里插入图片描述
在当前目录(rootfs)下新增一个init文件

vim init

添加如下内容

#!/bin/sh

dmesg -n 1
mount -t devtmpfs none /dev
mount -t proc none /proc
mount -t sysfs none /sys
setsid cttyhack /bin/sh

在这里插入图片描述
然后将rootfs文件夹下的所用内容赋777权限。

cd ..
chmod 777 -R rootfs/

在这里插入图片描述
3.4 打包系统文件

利用命令find . | cpio -R root:root -H newc -o | gzip > ../rootfs.gz将文件系统打包

find . | cpio -R root:root -H newc -o | gzip > ../rootfs.gz

在这里插入图片描述
4. 创建BIOS引导

这里我们使用syslinux来创建bios引导的一个linux iso镜像,

4.1 先下载并解压syslinux

wget https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.tar.gz
gunzip syslinux-6.03.tar.gz
tar -xvf syslinux-6.03.tar

在这里插入图片描述
4.2 准备制作镜像文件所需的文件

新建一个文件夹isobios,将解压后的syslinux文件夹下面的bios/core/isolinux.bin,bios/com32/elflink/ldlinux/ldlinux.c32复制到isobios文件夹下面。

mkdir isobios
cd isobios
cp ../rootfs.gz .
cp ../linux-5.13.8/arch/x86/boot/bzImage kernel.gz
cp ../syslinux-6.03/bios/core/isolinux.bin .
cp ../syslinux-6.03/bios/com32/elflink/ldlinux/ldlinux.c32 .  

在这里插入图片描述
4.3 创建启动引导配置文件isolinux.cfg

vim isolinux.cfg

在这里插入图片描述
添加如下内容

default kernel.gz initrd=rootfs.gz

在这里插入图片描述
4.4 生成ISO镜像

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

需要用到xorriso,要先安装

apt install -y xorriso
xorriso -as mkisofs -o ../testbios.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table ./

在这里插入图片描述

好了,至此我们的精简的Linux镜像已经制作好了,接下来就要验证一下这个小系统能不能跑起来了。

5.验证

首先将我们前面制作的ISO文件复制出来。

然后使用vmware虚拟机新建一个虚拟机。

和平常我们安装新的虚拟机系统一样,这里我们制作的ISO镜像使用了5.13.8的内核,在虚拟机制作时选择其他Linux5.X或更高版本内核64位
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
好了,挂载我们制作的镜像文件,开启一下看看吧。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
好了,系统引导成功了。

在这里插入图片描述
探索一下这个小系统有什么吧?

在这里插入图片描述
简单试了一下,常用的ls,pwd,touch,ifconfig,chmod等还是有的。

如果一个linux系统没有网络功能也就失去了灵魂,接下来把我们的小系统的网络开启起来吧。

ifconfig eth0 192.168.2.110 netmask 255.255.255.0
route add default gw 192.168.2.1

在这里插入图片描述
ping一下宿主机。

在这里插入图片描述
宿主机对ping一下。

在这里插入图片描述
漂亮,双方对ping一切OK。

🇵🇸 至此我们的精简的linux镜像就制作完成了。可能还会有一些问题,比如我想添加多一点的命令,(关机,重启,vim),网络功能还有点弱,还想增加镜像的安装功能,那就等博主的后续文章吧。

特别感谢网友:「windy_ll」

原文地址:从零开始制作一个linux iso镜像

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐