• 使用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

  • 相关阅读:
    vue 当前页跳转并强制刷新
    (转)vue项目刷新当前页面
    查询sqlserver中表信息
    (转) 自旋锁和互斥锁
    Web API 自定义文件内容的定制类
    (转)缓存
    (转) redis的事务和watch
    ASP.NET MVC , ASP.NET Web API 的路由系统与 ASP.NET 的路由系统是怎么衔接的?
    (转) 分布式系统关注点——99%的人都能看懂的「熔断」以及最佳实践
    php项目权限系统设计
  • 原文地址:https://www.cnblogs.com/xiongwei/p/16012150.html
Copyright © 2020-2023  润新知