注:本文主要介绍如何基于Linux的内核编译一个最简单的操作系统,编译Linux内核+BusyBox,制作可启动迷你Linux系统
1、环境准备
wsl –install(在windows安装Linux的环境)
2、编译步骤
一、更换国内软件源(解决下载慢)
备份原有软件源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
作用:备份系统默认源,后续出错可以恢复
写入阿里云高速镜像源
sudo tee /etc/apt/sources.list > /dev/null << ‘EOF’
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
EOF
作用:替换国外源,大幅加快软件下载速度
更新软件仓库
sudo apt update
sudo apt upgrade -y
作用:刷新源缓存,升级系统基础软件
二、安装全套编译依赖环境
sudo apt install -y gcc make flex bison libncurses-dev cpio xorriso grub-common grub-pc-bin grub-efi-amd64-bin libelf-dev libssl-dev bc wget qemu-system-x86
作用介绍
三、创建专属编译工作目录
mkdir -p ~/mini_os
cd ~/mini_os
作用:统一存放源码、编译文件,路径干净无权限冲突
四、编译Linux原生内核
下载Linux内核源码(阿里云镜像)
wget https://mirrors.aliyun.com/linux-kernel/v6.x/linux-6.1.tar.xz
解压内核源码
tar -xf linux-6.1.tar.xz
进入内核源码目录
cd linux-6.1
生成内核默认配置
make defconfig
作用:自动生成通用电脑适配内核配置,新手无需手动修改
多核全速编译内核
make -j$(nproc)
作用:调用电脑全部CPU核心编译,提升编译速度
编译完成产物: arch/x86_64/boot/bzImage 内核镜像
返回上级目录
cd ..
五、编译BusyBox极简命令工具箱
BusyBox集成ls、cd、mkdir等所有Linux基础命令
下载BusyBox源码
wget https://busybox.net/downloads/busybox-1.36.1.tar.bz2
解压源码
sudo apt install -y bzip2(下载解压软件)
tar -xf busybox-1.36.1.tar.bz2
进入BusyBox目录
cd busybox-1.36.1
生成默认配置
make defconfig
开启静态编译(核心关键)
sed -i ‘/CONFIG_STATIC=/d’ .config
echo “CONFIG_STATIC=y” >> .config
作用:编译成独立静态程序,不依赖系统动态库,迷你系统可直接运行
多核编译BusyBox
make -j$(nproc)
安装编译好的命令工具
make install
作用:命令全部输出到 _install 目录,作为系统基础命令集
返回上级目录
cd ..
六、搭建迷你Linux根文件系统
创建根文件系统文件夹
mkdir rootfs
拷贝BusyBox所有命令到根系统
cp -r busybox-1.36.1/_install/* rootfs/
创建系统必备空目录
mkdir -p rootfs/{dev,proc,sys,etc}
作用:dev设备目录、proc系统信息目录、sys硬件目录
创建系统必要设备文件
sudo mknod rootfs/dev/console c 5 1
sudo mknod rootfs/dev/null c 1 3
作用:控制台终端、空设备,系统启动必需
配置系统开机自动启动终端
echo ‘::askfirst:-/bin/sh’ > rootfs/etc/inittab
作用:系统开机直接进入命令行终端
七、打包内核内存文件系统
进入根文件系统目录
cd rootfs
打包压缩为initramfs启动文件
find . | cpio -o -H newc | gzip > ../initramfs.cpio.gz
作用:把整个根系统打包,让内核启动时加载
返回上级目录
cd ..
八、制作GRUB引导启动ISO镜像
创建ISO镜像目录结构
mkdir -p iso/boot/grub
拷贝内核与启动文件到ISO目录
cp linux-6.1/arch/x86_64/boot/bzImage iso/
cp initramfs.cpio.gz iso/
编写GRUB系统启动菜单
cat > iso/boot/grub/grub.cfg << ‘EOF’
menuentry “My Self Linux” {
linux /bzImage
initrd /initramfs.cpio.gz
}
EOF
作用:虚拟机启动时显示系统选项,指定内核与根文件系统
生成最终可启动ISO镜像
grub-mkrescue -o mylinux.iso iso
生成文件: mylinux.iso 自制完整Linux系统镜像
其是可以直接安装在虚拟机上的
总结:其用Linux搭建操作系统本身不难,因为已经用很成熟的内核这些了,但本身还是调用别人的东西,希望后面有人能完整的搞出完整的独立操作系统吧。