做linux内核长久,使用linux内核打造属于自己的linux

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

b207c0a03063fd9548df4576684c7097.png

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

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

1,添加硬盘:

198b28a38be2f8457373f4357322a35c.png

8cfa429925dd1d7e7bca803c802281b3.png

2,分区

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

9706bab4b6dd475b5c7ba0de90686b02.png

分区保存后会有如下提示

eb4b629b4780a2452d04ab580777e9cb.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

bda03d673b07870f14af3f783aefec78.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参数选项意思为如果有目录的话建立相应的目录)

展开后如图

63bfbcc42b04d4f48c99a56890007986.png

打开init文件并修改

94a78bb279ef6d0ea0a4a855222fdee3.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/

3873624e97821be4b3770f3c1ce8a4da.png

最后编辑grub.conf

83a19f2261270f7bdf2be4c25407868a.png

并修改权限使其可执行

a5a861fb91e87e4193e85a0a3b2ac621.png

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

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

afcb4967161916535606e6b0a8065caf.png

edc6aaf8c7e68018a52af9370a750477.png

e6e6015b7f48b09d1b5b8e23eb5fc405.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)

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

脚本文件如图

b11cd6c2bbcfdfaf0ae0c6c2d8de75f0.png

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

971cbba570640d1e9f1684a9eebcaf42.png

2f4ee114d1cf5efac54cb319b01255f6.png

并修改为可执行文件

3cfb27bebfc0cacfa021392374efa257.png

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

c0959028332e453f3e287de2f6e259e9.png

8030a49529dc80069df67bdb6a835f76.png

做完后基本已经完成了

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

b77471de1ab9aa015ef300db3105775a.png

6,下面开始准备启动盘

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

添加硬盘

cbb743e404abb40d2799fea66adcbc30.png

添加刚才创建的磁盘文件

07200b1fd23f0032fadc5dc62e74b5eb.png

然后打开此虚拟机

2a86b30475b596bf1295f7ae04df7ca0.png

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

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

添加图片,使用xshell上传

970cc53f024896d9f5560a3b0eaa7d0b.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中

d1b8b277eab7bfa87602b4d8240fe223.png

效果图如图

bfae7a314016fbb625279d4649e642c4.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值