使用linux内核打造属于自己的linux

首先要了解Linux的开机过程,如图

144409721.png

 

 

开机自检(BIOS)这个跟硬件相关,不需要我们做,我们要做的有“MBR引导——GRUB菜单——加载内核(kernel)——运行INIT进程——inittab配置文件——rc.sysinit脚本”,做完后一个非常简单的裸系统linux就成型了,但此时的系统什么功能都没有,如果要使用某些功能,比如ftp服务,vim命令等,需要添加配置文件

 

制作方法:在原有linux系统(宿主机)下添加一块硬盘,把添加的硬盘做成linux系统,做好后移植到其他地方当做新的linux系统,就可以使用了

 

1,添加硬盘:

144416651.png

 

144418635.png

 

2,分区

按照宿主机的模式分区,共分根,boot,swap三个分区

144558961.png

 

 

分区保存后会有如下提示

144559268.png

‘新盘将在重启后才能使用’,除了重启还有另一种方法,使用命令

 partprobe  /deb/sdb命令完成后就可以直接使用了

 

3,建立光盘挂载点

[root@localhost ~]# mkdir /mnt/boot(相当于boot)

[root@localhost ~]# mkdir /mnt/sysroot(相当于/)

[root@localhost ~]# mount  /dev/sdb1  /mnt/boot/

[root@localhost ~]# mount  /dev/sdb2  /mnt/sysroot/

 

4,构建grub

[root@localhost ~]# grub-install --root-directory=/mnt/ /dev/sdb

144706290.png

 

 

 

编写grub.conf前要把内核和驱动镜像拷入/mnt/boot/下

[root@localhost boot]# cp /boot/vmlinuz-2.6.18-164.el5  ./

[root@localhost boot]# cp /boot/initrd-2.6.18-164.el5.img  ./

但是驱动镜像需要更改一下,不然很有可能系统启动不起来

首先创建临时目录

把驱动镜像移动过去,并展开在当前目录下

[root@localhost boot]# mkdir /mnt/boot/tmp 

[root@localhost boot]# mv initrd-2.6.18-164.el5.imgtmp/

[root@localhost boot]# zcat tmp/initrd-2.6.18-164.el5.img  | cpio -id(不加管道后面的命令会出现乱码,cpio程序可以使其正常显示,-id参数选项意思为如果有目录的话建立相应的目录)

展开后如图

144708798.png

 

打开init文件并修改

144708614.png

在87行首加个#禁掉此行就OK了

 

修改完后,删掉原文件initrd-2.6.18-164.el5.img,重新打包

[root@localhost tmp]# find . |cpio -o(表示输入) -H(格式) newc --quiet (静默模式)|gzip -9 >initrd.gz 

打包后复制到/mnt/boot/目录下

[root@localhost tmp]# cp initrd.gz /mnt/boot/

144805143.png

 

 

 

 

 

最后编辑grub.conf

144805364.png

 

并修改权限使其可执行

144806355.png

 

此时已经做到了第四步加载内核,下面移植INIT进程

 

 

5,创建跟分区所需要的目录

144807619.png

144807104.png

145034551.png

 

[root@localhost sysroot]# ldd /sbin/init(查看init依赖于哪些库,并拷贝到硬盘2上)

        linux-gate.so.1 =>  (0x005aa000)

        libsepol.so.1 => /lib/libsepol.so.1 (0x006fc000)

        libselinux.so.1 => /lib/libselinux.so.1 (0x00854000)

        libc.so.6 => /lib/libc.so.6 (0x001c0000)

        libdl.so.2 => /lib/libdl.so.2 (0x0065c000)

        /lib/ld-linux.so.2 (0x004f0000)

一个一个复制太麻烦,所以就制作一个脚本,针对某个命令会复制所有的库文件

脚本文件如图

145010496.png

 

在/mnt/sysroot/etc/下编辑inittab配置文件

145110212.png

145111420.png

 

并修改为可执行文件

145200266.png

 

 

查询bash指令的库文件,并复制,使用刚才编写的复制脚本复制

145201949.png

145254169.png

 

做完后基本已经完成了

同步配置,准备移植新系统

145320657.png

 

6,下面开始准备启动盘

打开一个新的linux系统,把原有的硬盘删除,挂载新的硬盘(刚才所制作的硬盘)

添加硬盘

145348617.png

 

添加刚才创建的磁盘文件

 

145348814.png

 

 

然后打开此虚拟机

145348175.png

显示如图说明一个简易的linux已经打造成功

 

 

 

优化:添加开机背景图片(由于新的系统不支持一些命令,所以首先在宿主机上做好图片,然后再复制到新的linux系统中使用)

 添加图片,使用xshell上传

145441279.png

 

 

 

[root@localhost ~]# convert -resize 640x480! 1.jpg 1.jpg(忽略图片的原有比例,不然有可能铺满全屏)

[root@localhost ~]# convert 1.jpg -colors 14 -geometry 640x480 splash.xpm(转换图片的像素大小,格式)

[root@localhost ~]# gzip splash.xpm (压缩文件)

[root@localhost ~]# cp splash.xpm.gz /mnt/boot/grub/(复制到新的linux系统中)

 

应用到配置文件/boot/grub/grub.conf中

145442429.png

 

效果图如图

 

145455490.png

 

posted @ 2022-03-16 11:44  飞雪飘鸿  阅读(557)  评论(0编辑  收藏  举报
https://damo.alibaba.com/ https://tianchi.aliyun.com/course?spm=5176.21206777.J_3941670930.5.87dc17c9BZNvLL