副问题[/!--empirenews.page--]
一样平常来说,我们所说的 Linux体系 指的是各类基于 Linux Kernel 和 GNU Project 的操纵体系刊行版。为了把握 Linux 操纵体系的行使,相识 Linux 操纵体系的运作进程,领略内核与外围支撑体系的相关,加深对开源操纵体系的熟悉,我抉择造个轮子——本身定制一个 Linux 文件体系。
这里有两种实现要领:
加载bios 的硬件信息-> 读取MBR –>执行Grub ->加载kernel–> 加载驱动–> init –> 执行bash
- 操作体系
/sbin/init***(M2)***
加载bios 的硬件信息-> 读取MBR –>执行Grub ->加载kernel–> 加载驱动–> init –> /sbin/init -> 取得run-level信息 -> /etc/rc.d/rc.sysinit -> services –> /etc/rc.d/rc.local –> mingetty –> login
我们先选择 *M1 *。
思绪
- 操作原有体系复制必备部件到新存储器
- 操作
initrd.img 机制在 RAM Disk 中测试
- 搭配原文件内核和模块启动
Step1:得到shell版本的initrd.img
起首,我们可以写一个剧本 init ,使得内核用该文件体系启动后可以或许直接得到一个 Bash 。
建设剧本 init
个中: /bin 目次下是常用呼吁, init 是本身写的剧本, /lib64 目次下是应用措施所依靠的动态库。
init 内容
此刻我们必要行使呼吁行,建设 bin 和 sbin 目次,向个中添加 bash 、 ls 、 rm 、 cp 、 mv 、 echo 、 cat 、 less 等基本呼吁。因为这些呼吁必要依靠 /lib64 等目次下的一些动态链接的共享库,以是必要将依靠的库拷贝到小体系对应的目次下,用 ldd 呼吁查询应用措施及其依靠的动态库。完成之后,执行:
find . | cpio -H newc -o | gzip > /boot/initrd.img
将根文件体系打包成 initrd.img 放到 /boot 目次下。启动时体系会自动执行 initrd.img 中的 init 。
费了这么大劲天生 initrd.img ,怎样测试新建的 initrd.img 呢,必要在 grub 启动设置文件傍边增进一个进口用于测试。
title CentOS 6 Mini
root (hd0,0)
kernel /vmlinuz-2.6.32-642.el6.x86_64
initrd /initrd.img
这样重启之后就会呈现启动选项了。
Step2:完成挂载原体系手段
为了能挂载原体系,必需在 initrd.img 中加载原体系运行所必需的驱动模块,好比 ext4 文件体系的驱动、 scsi 装备的相干驱动等, /sbin/modinfo 共同 /sbin/insmod ,驱动放到 /module
Step3:完成拥有打点装备手段(udev)
操作打点、监控主机装备的处事措施udevd来自动加载所需的驱动模块,比我们本身实现越发靠得住。 udevd 的法则文件在 /lib/udev/ 目次下,设置文件在 /etc/udev/ 目次下,同时还必要 /etc/nsswitch.conf 设置的名称处事互换,其依靠的库为 /lib 目次下以 libnss 开头的文件,将上述文件拷贝到我们的目次下,然后行使 /sbin/start_udev 呼吁可以启动 udevd 处事。( udevd 必要挪用一些其他的体系呼吁,如 /sbin/modprobe ,可用 strace 举办跟踪获取)。
小体系的目次文件
个中: /dev 目次下是体系存放可用装备的目次, /log 是行使 strace 呼吁天生的 log 记录文件。
Step4:完成拥有login登录手段
因为 login 的机制较量伟大,涉及历程打点机制和历程组、节制台等很多方面,因此我们回收 *M2 *,将 /sbin/init 呼吁拷到小体系目次下, init 剧本改为
#!/bin/bash
exec /sbin/init
将节制权交给 /sbin/init 之后,体系启动时就必需比及它完成一系列挪用之后,进入 login 界面,用户才气从头得到节制权。
(编辑:河北网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|