1.什么裁剪?

本片博文的主要目的是让笔者和读者更深的认识Linux系统的运作方式,大致内容就是把Linux拆开自己一个个组件来组装,然后完成一个微型的Linux系统.下面,让我们来实现吧..写的不好的地方请指教.

2.原理

大家都知道,操作系统的启动流程是(主要是Linux):POST—>BIOS—>MBR—kernel-->initrd-->sbin/init,

POST,BIOS都不是我们管的,所以这里我们从MBR开始,Linux的系统引导先主要是用的grub这个软件,grub引导系统了,然后启动内核,内核调用initrd来实现最基本的操作系统,

3.接下来,实际操作(所有操作均在虚拟机上实现)

3-1.首先我们得创建一个新的磁盘,来保存我们的grub和内核等关键程序(直接在虚拟机上添加新的磁盘)

笔者这里已经添加好了,就不演示添加的过程了,笔者的地盘分了两个区,分别是100M的主盘,和1G的主盘,名字为

/dev/sdg1和/dev/sdg2,首先在/mnt目录下创建两个文件夹:如图

3-2.挂载/dev/sdg1到/mnt/boot,挂载/dev/sdg2到/mnt/sysroot

3-3.大家知道,启动系统的时候除了硬件方面,首先就是要有引导程序,所以我们把引导程序安装到/mnt/boot

使用命令:grub-install –-root-directory=/mnt /dev/sdg1

3-4.有了引导程序就需要有我们的内核了,没有内核怎么启动啊,但是内核的启动又要依赖initrd(Centos6),所以我们要把这两个文件都复制过去,使用命令:

cp /boot/vmlinuz-2.6.32-358.el6.x86_64 /mnt/boot/vmlunuz

cp /boot/initramfs-2.6.32-358.el6.x86_64.img /mnt/boot/initramfs.img

3-5.这样一个简单的操作系统的雏形就做好了,但是OS的操作依赖于shell,所以我们得把bash shell复制到/dev/sgd2目录下,所以我们得把/bin/bash以及bash依赖的库复制过去,可以使用ldd `which bash`查看bash依赖的库文件有哪些,笔者这里自己有一个简单的script脚本,就不手动复制了

3-6.接下来要配置grub文件,不然系统怎么找到你的硬件,所以接下来在/mnt/boot/grub下创建一个grub.conf的配置文件,内容如下

3-7.接下来还要在根目录下,也就是挂载在/mnt/sysroot下创建一个proc的文件夹.就可以把这块新的硬盘当成其他系统的启动盘了,我们来试试,新创建一个空的虚拟机不用教了吧.然后添加我们的这块磁盘,就可以开机启动了

3-8.接下来我们来给他添加命令,其实很简单的,只要把命令的所在目录和命令所有依赖的库复制到/mnt/sysroot目录下就行了.这里我用脚本完成,就不演示了,笔者复制了一些常用的命令如:ls

3-9.笔者给这个小系统创建了几个目录了当然是在原主机上添加的,是不是越来越像一个系统了

3-10.好了!系统到这里就差不多了,不过我们还得修修,大家在3-6可以看到,我们的init=/bin/bash,这时候就会有同学问了,有没搞错,Linux系统化初始化不都是调用/sbin/init的么,你怎么调用了/bin/bash,没错,其实这里指向什么就调什么,那我们现在重新让他指向/sbin/init吧,首先在/mnt/sysroot下建立一个init文件,在里面添加如下字符:完成后记得给/sbin/init一个快 执行权限,然后把/mnt/boot/grub/grub.conf中的指向改成init=/sbin/init

3-11.如下图,执行成功了

3-12.最后,我们该给他添加一个网络模块了,哦哦,在3-9步我们发现磁盘还是只读的,所以得重新把他挂载成读写的,如下图:

3-13.终于可以给他加网络模块了,Linux的系统是单内核,但是支持模块化,所以咯,我们来给他加个网络模块吧,我们值需要先把原系统的网络模块复制到我们的微系统中,Linux的模块都在/lib/module/[内核版本号下],我们首先用lspci或者lsmod查看网络模块信息,然后复制到微系统中,如下:

最后安装网络模块,使用命令insmod [path]

好了,整个系统安装完成了!

4.接下来是系统开机自动启动的服务了,有兴趣的朋友可以看看

4-1.在/etc/rc.d/rc3.d(1-7都有,这里用3举例).见下图,一下都是开机可启动的服务,K代表开机时不自动启动的,S代表开机时自动启动的,K和S后面都有数字,那代表他们启动或关闭的优先级,数字越小,优先级越高,他们都是连接文件,指向/etc/init.d.而启动系统开机启动服务的命令是chkconfig命令

4-2.chkconfig命令

我们创建一个tsservice.sh脚本,让他开机自动启动,该怎么做呢?把这个脚本放在/etc/init.d下.脚本的全段代码如下图,附代码:#!/bin/bash

#

myService=`basename $0`

lockFile="/var/lock/subsys/$myService"

[ $# -lt 1 ] && echo "Usage: $myService {start|stop|restart|status}" && exit 4

case $1 in

'start')

touch $lockFile

echo "Starting $myService OK"

;;

'stop')

rm -f $lockFile

echo "Stopping $myService OK"

;;

'restart')

rm -f $lockFile

touch $lockFile

echo "Restarting $myService OK"

;;

'status')

if [ -f $lockFile ]; then

echo "$myService is running"

else

echo "$myService is stopped"

fi

;;

*)

echo "Usage: $myService {start|stop|restart|status}"

exit 3

;;

esac

4-3我们已经创建了该脚本,并且把该脚本放在了/etc/init.d目录下,是否就可以运行了呢?错....还需要使用chkconfig --add添加才行

可以看到,我们完成了

linux系统剪切,Linux 系统裁剪相关推荐

  1. Linux内核编译及系统裁剪

    核心:/boot/vmlinuz-version 内核模块(ko):/lib/modules/version/ 内核设计:       单内核             模块化设计       微内核 ...

  2. 学习 Linux,101: 引导系统

    2019独角兽企业重金招聘Python工程师标准>>> 系列文章: http://www.ibm.com/developerworks/cn/views/linux/libraryv ...

  3. YOCTO项目介绍:通过提供模版、工具和方法帮助开发者创建基于linux内核的定制系统

    目录 YOCTO项目介绍 配置内核 build配套 Yocto ,是一个开源社区.它通过提供模版.工具和方法帮助开发者创建基于linux内核的定制系统,支持ARM, PPC, MIPS, x86 (3 ...

  4. c linux time微秒_Linux基础知识(Linux系统、Linux中的链表)

    Linux系统简介 Linux系统的结构及特点 Linux系统的结构图如下图所示: 从上图可以看出,Linux是一个典型的宏内核(一体化内核)结构.硬件系统上面时硬件抽象层,在硬件抽象层上面时内核服务 ...

  5. linux中_Linux基础知识(Linux系统、Linux中的链表)

    Linux系统简介 Linux系统的结构及特点 Linux系统的结构图如下图所示: 从上图可以看出,Linux是一个典型的宏内核(一体化内核)结构.硬件系统上面时硬件抽象层,在硬件抽象层上面时内核服务 ...

  6. 嵌入式系统、linux和嵌入式linux的区别

    这几个东西比较容易混淆 嵌入式系统: IEEE(国际电气和电子工程师协会)对嵌入式系统的定义:"用于控制.监视或者辅助操作机器和设备的装置".原文为:Devices Used to ...

  7. 双系统在linux中修复引导文件夹,linux双系统引导修复

    如果你有Windows 系统安装盘/ 启动盘,或者安装了DOS 工具,可以从Windows 进入纯DOS 界面的话,那么可以分别用 fixmbr 命令生成正确的引导文件boot.ini ,和使用 fd ...

  8. macOS系统(Linux同)终端输入操作的一些快捷操作!

    macOS系统(Linux同)终端输入的一些基本快捷操作! 首先打开电脑的终端页面 我们可以看到原始的终端界面,不论窗口还是字体都比较小,不方便我们的操作和指令的输入,我们可以先将进行以下两个操作 1 ...

  9. ARM主板RK3288/RK3399主板中安卓系统与LINUX系统的相同点与不同点

    安卓,是一个系统,用于移动终端,智能手机.平板之类,如今也可以用于桌面工作站或电视机顶盒.智能电视等.它的内核基于linux内核,但不同于其他linux发行版,有部分源码闭源.        linu ...

  10. 双系统中的linux如何重装系统,最详细的双系统重装ubuntu系统教程

    最近有网友给小编留言并提问小编知不知道双系统重装ubuntu系统的方法.他自己去网上查了很多关于ubuntu系统重装教程都没有找到,非常着急.为了解决这位网友的问题,小编特意亲自写了这篇最详细的双系统 ...

最新文章

  1. python web项目案例教程_Python Web开发案例教程(慕课版)——使用Flask、Tornado、Django...
  2. 三维模型特征提取方法概述
  3. HTML产品表单列表,HTML表格、列表、表单
  4. 为什么大家都说 SELECT * 效率低?
  5. Sublime Less 自动编译成css
  6. UI(UGUI)框架(一)---------概述与保存/读取面板类型与路径
  7. wince工业平板电脑_如何防止工业平板电脑温度过高?
  8. Linux学习笔记(十九)文件压缩
  9. SAP Cloud for Customer 如何直接消费S/4HANA API
  10. spring5.0.2中文官网文档pdf
  11. 心电图 python_ST段凹面型向上抬高,一定是早期复极?心电图读图第201期
  12. error: unpacking of archive failed on file错误的解决
  13. 【HDOJ4699】Editor(对顶栈,模拟)
  14. MySQL的外键约束:Cascade/Restrict/No action/SET NULL :级联操作
  15. 如何进行EMC Symmetrix (DMX或者VMAX)的系统健康检查
  16. 计算机职业访谈ppt,大学职业生涯人物访谈.ppt
  17. android 控件发光_Android自定义View之边框文字、闪烁发光文字
  18. Centos7,离线yum源下载,搭建
  19. 比SQL还好用,又一门国产数据库语言诞生了
  20. 自学Java!三面蚂蚁核心金融部,Java岗

热门文章

  1. 《Web漏洞防护》读书笔记——第7章,访问控制防护
  2. macbook 安装任意来源
  3. matplotlib学习
  4. [转]SAPUI5 (01) - OpenUI5环境搭建
  5. Es6 类class的关键 super、static、constructor、new.target
  6. Jersey实现Restful服务
  7. spm_预处理实验记录
  8. TFS使用指南——从服务器上获取最新的项目文件
  9. sql server 2000 生成数据库的SQL脚本
  10. 单元测试框架TestableMock快速入门(一):快速Mock任意调用