精
【教程】自制一个linux系统 |
|
红叶遍山
L12
• 2022-05-04 • 回复 12 • 最后编辑于2022-05-15 14:52 • 只看楼主
• 举报
|
前言:
先放首歌,祝你看的愉快!
谁不想要一个自己的系统呢? 现在做一个可以直接在虚拟机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:做了好久,主要一直没时间搞,一直在工作.之后还要出差,呜呜呜
参考了好几篇博文,谢谢网上大佬的共享.