尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

制作自己的最小操作系统

制作自己的最小操作系统
📅 发布时间:2026/6/20 12:21:14

自制一个linux系统

前言

谁不想要一个自己的系统呢?      现在做一个可以直接在虚拟机VMware上安装运行的系统.

文件信息:

alt text

在VMware运行

alt text

qemu

alt text

原理

一个完整的系统组成:引导文件,内核,文件系统

linux系统启动的大致过程:上电-->BootLoader-->内核加载-->init-->挂载文件系统-->启动成功

接下来就清晰了,先编译一个内核和制作一个文件系统,然后使用qemu工具启动内核,内核启动文件系统,验证是否能够运行.最后再制作引导文件和封装为ISO文件,即镜像文件.

内核:官网下载kernel,自己配置编译.

文件系统:使用busybox一键生成shell,省时省力,再使用

引导文件:syslinux,老东西了,毕竟是自制的小系统可以直接用,

封装:xorriso可以生成ISO文件的cat安全验证文件,也可以封装.

环境&工具:

  • 电脑内存大点

  • 虚拟机VMware 10以上

  • 虚拟机上需要有Ubuntu系统,16及以上吧,作为工作环境

过程:

1.下载kernel,编译,
#在用户文件夹下建立这个项目的文件夹
~$ mkdir work
#进入work文件夹
~$cd work
#下载kernel文件
~$ wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.50.tar.xz
#升级下软件仓库
~$ sudo apt update
#安装编译内核需要的库和工具
~$ sudo apt-get install fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison
#解压下载的内核
~$tar xvJf linux-5.4.50.tar.xz
#进入解压文件
~$cd linux-5.4.50
#图形化配置
~$make menuconfig
#编译,多线程编译,快点
~$make -j 4

配置:设置加载的文件系统大小
alt text
编译时间有点久,20分钟左右吧
alt text
2.制作文件系统

#下载busybox
~$ wget https://busybox.net/downloads/busybox-1.35.0.tar.bz2
#解压
~$tar xvf busybox-1.35.0.tar.bz2 
#进入解压文件夹
~$cd busybox-1.35.0.tar.bz2
#生成默认的配置文件.config
~$make defconfig
#需要更改为静态编译
~$vim .config    在Build Options下面增加 CONFIG_STATIC=y 
#图形化设置busybox选项,和上两步一样,目的都是生成.config的文件,前两步做了,这一步可以跳过
~$make menuconfig
#编译
~$make busybox install

修改配置文件
alt text
编译完成
alt text
生成的文件系统在_install文件夹内
alt text

#在_install下创建文件夹
~$mkdir -p dev etc home lib mnt proc root sys tmp var
#创建inittab文价
~$vim etc/inittab
#给权限
~$chmod 755 etc/inittab

输入以下内容

::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::askfirst:-/bin/sh
::cttlaltdel:/bin/umount -a -r
#创建init.d下的文件
~$mkdir -p etc/init.d
~$vim etc/init.d/rcS
#给权限
~$chmod 755 etc/init.d/rcs

编辑rcS时输入:

echo "----------mount all in fstab----------------"
/bin/mount -a #读取/etc/fstab,加载文件系统
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
echo "****************Hello word******************"
echo "Kernel Version:linux-5.4.50"
echo "                         -----by yangxu" #随便写点什么,可以再启动界面看到
echo "***********************************************"

编辑etc/fstab文件

~$cd _install
~$vim etc/fstab

输入以下内容:

#device mount-point type option dump fsck
proc  /proc proc  defaults 0 0
temps /tmp  rpoc  defaults 0 0
none  /tmp  ramfs defaults 0 0
sysfs /sys  sysfs defaults 0 0
mdev  /dev  ramfs defaults 0 0

最后添加设备文件

~$cd _install
~$cd dev
~$sudo mknod console c 5 1
~$ sudo mknod null c 1 3
~$ sudo mknod tty1 c 4 1

打包文件系统

方法一:

~$cd _install
#打包,利用cpio命令备份再压缩为gz文件
~$find . | cpio -R root:root -H newc -o | gzip > ~/work/rootfs.gz 

方法二:

~$cd work
~$vim makefilesystem.sh
#输入以下,保存
~$chmod 755 ./makefilesystem.sh
~$./makefilestem.sh
#!/bin/bashsudo rm -rf rootfs.ext3
sudo rm -rf fs
dd if=/dev/zero of=./rootfs.ext3 bs=1M count=32
mkfs.ext3 rootfs.ext3
mkdir fs
sudo mount -o loop rootfs.ext3 ./fs
sudo cp -rf ./busybox-1.35.0/_install/* ./fs
sudo umount ./fs
gzip --best -c rootfs.ext3 > rootfs.img.gz

方法一:
alt text
方法二:
alt text
3.测试内核和文件系统是否兼容

#安装qemu
~#apt-get install qemu-system-x86_64
#work的文件夹下
~$qemu-system-x86_64 -kernel ./linux-5.4.50/arch/x86_64/boot/bzImage -initrd ../busybox-1.32.0/rootfs.img.gz -append "root=/dev/ram init=/linuxrc"

qemu-system-x86_64

-kernel ./linux-5.4.50/arch/x86_64/boot/bzImage   内核位置

-initrd  ./rootfs.gz  文件系统位置

-append "root=/dev/ram init=/linuxrc"     给内核传参,有root项就行

正常效果:(编译的文件系统有问题,用的之前的文件系统,所以命令不一样,请用上面的命令)
alt text
报错:
alt text
这时就有问题了,需要排除问题,主要有下面几个问题

1.查看内核配置里面支持的文件系统

2.文件系统是否有问题,

报错这个:
alt text
检查文件系统是否是静态编译

4.加入引导文件,封装为系统镜像

~$cd work

下载syslinux,用里面的文件做引导

~$wget https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.tar.xz

解压

~$xz -d syslinux-6.03.tar.xz
~#tar xvf syslinux-6.03.tar
#建立镜像文件夹,这里我用的第二种方法打包的文件系统
~$mkdir -p ./isofile
#把内核文件,文件系统压缩包和引导文件都放到该文件夹下
~$cp ./linux-5.4.50/arch/x86_64/boot/bzImage  ./isofile
~$cp ./rootfs.img.gz ./isofile
~$cp ./syslinux-6.03/bios/core/isolinux.bin  ./isofile
~$cp ./syslinux-6.03/bios/com32/elflink/ldlinux/ldlinux.c32 ./isofile
#再写个引导配置文件,类似于qemu里面的append参数,给内核传参
~$cd ./isofile
~$vim isolinux.cfg
#输入  default bzImage initrd=rootfs.img.gz  保存即可
#封装系统镜像
~$xorriso -as mkisofs -o ../test.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table ./

然后从虚拟机里面传出来,就是这样的,

到这一步就完成了

其中:

xorriso 
-as mkisofs 
-o ../testbios.iso  #保存的镜像文件
-b isolinux.bin 
-c boot.cat   # 可信文件
-no-emul-boot 
-boot-load-size 4 
-boot-info-table 
./

5.安装系统镜像

新建虚拟机,有一步是这样的,记得选.
alt text
安装成功之后:
alt text
6.呕吼,完结撒花

tips:做了好久,主要一直没时间搞,一直在工作.之后还要出差,呜呜呜

参考了好几篇博文,谢谢网上大佬的共享.

本文来自博客园,作者:潇汀,转载请注明原文链接:https://www.cnblogs.com/allalonewithyou/p/19214708,个人邮箱:yaonie4444@foxmail.com

相关新闻

  • .NET 10性能突破:持续优化才是质变关键
  • 植物大战僵尸经典版下载教程:重新体验最纯粹的塔防乐趣
  • 5 CSRF 攻击防范

最新新闻

  • GitHub AI热榜实操解码:从星标数到可运行代码的落地指南
  • 端午静听雨
  • 宁波生成式引擎GEO优化服务商技术实力对比分析 - 起跑123
  • RePKG完全指南:三步解锁Wallpaper Engine资源的终极工具
  • XOutput终极指南:让老旧游戏手柄在现代游戏中焕发新生
  • 天堂寨性价比高好吃吊锅推荐 本地食客实测优选榜单 - 速递信息

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号