乐愚社区Beta

 linux  >  【教程】自制一个linux系统

【教程】自制一个linux系统

红叶遍山  活跃达人   L10  • 2022-05-04 • 回复 7 • 查看 3964 • 最后编辑于2022-05-15 14:52 • 收藏 31 • 只看楼主举报    

前言:

先放首歌,祝你看的愉快!

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

文件信息:

在VMware运行:

qemu:

原理:

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

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

配置:设置加载的文件系统大小

编译时间有点久,20分钟左右吧

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

修改配置文件

编译完成

生成的文件系统在_install文件夹内

#在_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/bash

sudo 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

方法一:

方法二:

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项就行

正常效果:(编译的文件系统有问题,用的之前的文件系统,所以命令不一样,请用上面的命令)

报错:

这时就有问题了,需要排除问题,主要有下面几个问题

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

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

报错这个:

检查文件系统是否是静态编译

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.安装系统镜像

新建虚拟机,有一步是这样的,记得选.

安装成功之后:

6.呕吼,完结撒花

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

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


7条回帖
sks  L8  评论于
(0)  回复(0) 1#
人生若波澜,世路有屈曲
1652399523  L1  评论于
(0)  回复(0) 2#
大佬能不能,把昭昭医考app破解了
yangylive  L0  评论于
(0)  回复(0) 3#
永远的神
2386810972  L0  评论于
(0)  回复(0) 4#
神一样。。。。
泡藕鱼  L1  评论于
(0)  回复(0) 5#
向大佬致敬
Qsj377  L18  评论于
(0)  回复(0) 6#
朋友们可以看下我最新发的帖子吗?么么嗒
Qsj377  L18  评论于
(0)  回复(0) 7#
有些深奥,我看不懂,但受到震惊
还没注册帐号?快来注册社区帐号,和我们一起嗨起来!
关于本社区

集各类兴趣爱好于一身的轻量化交流社区,在此您可以和他人一起分享交流您觉得有价值的内容,社区鼓励大家发表原创内容,为社区添砖加瓦!

发帖奖励 → 社区版规 → 招聘版主 →
推荐版块
扫描二维码下载社区APP
回到顶部