当前位置: 首页 > news >正文

制作自己的最小操作系统

自制一个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:做了好久,主要一直没时间搞,一直在工作.之后还要出差,呜呜呜

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

http://www.rkmt.cn/news/47697.html

相关文章:

  • .NET 10性能突破:持续优化才是质变关键
  • 植物大战僵尸经典版下载教程:重新体验最纯粹的塔防乐趣
  • 5 CSRF 攻击防范
  • 11.12记录-机器学习
  • 个人工作版(Linux)
  • 2025年耙式真空干燥机优质厂家权威推荐榜单:耙式干燥机/ZB系列耙式真空干燥机/真空耙式干燥机源头厂家精选
  • 习题解析之:输出 n 以内的所有素数
  • 2025年重庆吊装搬运公司权威推荐榜单:工厂搬迁/搬运/搬运设备源头公司精选
  • 新手入门常用的Dos命令
  • 到底是用vue2还是vue3好?
  • 避免在C#循环中使用await 改用WhenAll - 尼古拉
  • P12213 [蓝桥杯 2023 国 Python B] 最长回文前后缀 题解 字符串哈希+二分
  • 智能充气泵方案:充气泵pcba功能结构组成
  • 习题解析之:最大素数
  • mybatis-plus Wrappers相关Api
  • 塔城西林瓶灌装线厂家提供使用技巧培训助提效
  • VMware-配置静态IP地址详细教程
  • OI教练模拟器自动刷天赋脚本!
  • BM3D 图像降噪快速算法的 MATLAB 实现
  • v4l2 probe时各个device的操作顺序
  • 国泰君安基于隐语SecretFlow生产场景探索实践
  • 鲜花:m 群 bot 随机一言摘抄
  • MATLAB小波分析工具包进行时间序列的小波功率谱分析
  • 再次出山!!
  • 完整教程:Java 反射机制核心类详解:Class、Constructor、Method、Field
  • Problems
  • Java 获取 Excel 中工作表的名称 - 指南
  • 2025年现代风格卫生间隔断生产厂家权威推荐榜单:易清洁卫生间隔断/欧式卫生间隔断/养老院卫生间隔断源头厂家精选
  • 2025年排渣阀订制厂家权威推荐榜单:陶瓷阀门/搪瓷阀门/铸铁阀门源头厂家精选
  • Aoao Round 2 比赛总结