基于宿主机制作一个小系统

前端之家收集整理的这篇文章主要介绍了基于宿主机制作一个小系统前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一、Linux系统的启动流程

1、启动程序

Linux系统的启动流程为:POST-->BIOS(BootSequence)-->MBR(bootloader,446)-->

Kernel-->initrd-->(ROOTFS)/sbin/init(/etc/inittab)。


首先上电自检POST:它负责完成对cpu、主板、内存、软硬盘子系统、显示子系统(包括显示缓存)、串并行接口、键盘、CD-ROM光驱等的检测。主要检查硬件的好坏。

紧接着就是BIOS进行硬件相关初始化,之后定义可启动设备的运行顺序,接下来开始进行启动设备数据的读取。

MBR即主引导分区(512字节),其中前466字节存放Bootloader(引导装载程序),64字节为分区信息,2字节标记MBR是否有效。

之后启动内核Kernel,装载启动模块,运行系统的第一个进程。

2、系统的组成部分

组成部分:

核心文件:/boot/vmlinuz-VERSION-release 内核

CentOS 5: /boot/initrd-VERSION-release.img工具程序:mkinitrd

CentOS 6: /boot/initramfs-VERSION-release.img工具程序:mkinitrd,dracut

模块文件:/lib/modules/VERSION-release

3、引导加载程序Grub

在MBR中,Linux常用的应到加载程序为Grub。其重要功能有:提供菜单、并提供交互式接口;加载用户选择的内核或操作系统;为菜单提供了保护机制。它的运行阶段可以分为:

1st stage: 位于MBR中,为了引导2nd stage

1.5 stage: 位于boot基本磁盘分区中,为识别内核文件所在的文件系统提供文件系统识别扩展

2nd stage: 位于boot基本磁盘分区中,GRUB的引导程序(/boot/grub/)。

二、在Vmvare上基于宿主机制作一个小系统

1、制作的系统说明:

在Vmware上以CentOS6.5宿主机,加在一块磁盘(/dev/sdb)在上面制作目标机,制作的系统功能有能装载网卡驱动,并配置IP地址;系统启动进程通过init脚本。宿主机上的配置:

wKioL1fJfoPQJqW2AAEcqNo7dUs767.png-wh_50

2、给目标磁盘分区将分别挂载

[root@mylinuxmnt]#fdisk-l/dev/sdb
Disk/dev/sdb:5368MB,5368709120bytes
255heads,63sectors/track,652cylinders
Units=cylindersof16065*512=8225280bytes
Sectorsize(logical/physical):512bytes/512bytes
I/Osize(minimum/optimal):512bytes/512bytes
Diskidentifier:0x58ff3d53
DeviceBootStartEndBlocksIdSystem
/dev/sdb111321060258+83Linux
/dev/sdb2133394210451583Linux

[root@mylinuxmnt]#mount-text2/dev/sdb1/mnt/boot
[root@mylinuxmnt]#mount-text2/dev/sdb2/mnt/sysroot/

3、安装grub到目标磁盘

[root@mylinuxmnt]#grub-install--root-directory=/mnt/dev/sdb
ProbingdevicestoguessBIOSdrives.Thismaytakealongtime.
Installationfinished.Noerrorreported.
Thisisthecontentsofthedevicemap/mnt/boot/grub/device.map.
Checkifthisiscorrectornot.Ifanyofthelinesisincorrect,fixitandre-runthescript`grub-install'.

(fd0)/dev/fd0
(hd0)/dev/sda
(hd1)/dev/sdb
[root@mylinuxboot]#ls
grublost+found

4、复制内核和initrd文件

[root@mylinuxboot]#cp/boot/vmlinuz-2.6.32-431.el6.x86_64/mnt/boot/vmlinux
[root@mylinuxboot]#cp/boot/initramfs-2.6.32-431.el6.x86_64.img/mnt/boot/initramfs.img
[root@mylinuxboot]#ls
grubinitramfslost+foundvmlinux

5、创建目标主机的根文件系统

[root@mylinuxboot]#mkdir-pv/mnt/sysroot/{etc/rc.d,usr,var,proc,sys,dev,lib,lib64,bi
n,sbin,boot,srv,mnt,media,hoome,root}
[root@mylinuxboot]#tree/mnt/sysroot/
/mnt/sysroot/
├──bin
├──boot
├──dev
├──etc
│└──rc.d
├──hoome
├──lib
├──lib64
├──lost+found
├──media
├──mnt
├──proc
├──root
├──sbin
├──srv
├──sys
├──usr
└──var

6、移植bash等到目标机根文件系统

在这里我是用自己写的一个小脚本,它可以复制自己输入的命令,如(ifconfig、insmod、mv、ls、cp、mount等)以及所依赖的库文件。脚本如下:

#!/bin/bash
#Time:2016-09-01
#
Desdir=/mnt/sysroot
[-d$Desdir]||mkdir-p$Desdir
whiletrue;do
read-p"Pleaseinputacommand:"Command
if[["$Command"!="quie"]];then
ldd`which$Command`2>/dev/null|grep-o"/[^[:space:]]\{1,\}.*[[:space:]]">>a.txt
whilereadLINE;do
[-d${Desdir}`dirname$LINE`]||mkdir-p${Desdir}`dirname$LINE`
[-f${Desdir}${LINE}]||cp$LINE${Desdir}${LINE}
filecmd=`which$Command|grep-o"/.*"`
[-d${Desdir}`dirname$filecmd`]||mkdir-p${Desdir}`dirname$filecmd`
[-f$Desdir$filecmd]||cp$filecmd$Desdir$filecmd
done<a.txt
rm-fa.txt
else
exit0
fi
done

7、为grub提供配置文件

default=0
timeout=5
titleMylinuxLittleLinux
root(hd0,0)
kernel/vmlinuzroroot=/dev/sda2quietselinux=0init=/bin/bash
initrd/initramfs.img

8、写启动文件init

由于要配置网卡功能,所以要移植网卡驱动模块到目标机,在我的宿主机中使用的网卡驱动模块为e1000.ko 所以复制此模块,在init中配置文件中装载。

[root@mylinuxhome]#cp/lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/pcnet32.ko/mnt/sysroot/lib/modules/
[root@mylinuxhome]#vim/mnt/sysroot/sbin/init
#!/bin/bashecho"WelcomtoLinux"
mount-n-tprocproc/proc
mount-n-tsysfssysfs/sys
insmod/lib/modules/pcnet32.ko
ifconfiglo127.0.0.1/8
ifconfigeth0192.168.1.142/16
mount-n-oremount,rw/dev/sda2/
/bin/bash

9、测试目标机器


wKiom1fJf8bAwgSOAACu0hSW3-E432.jpg-wh_50

wKiom1fJirfjGwmxAACEfmo1z28066.jpg-wh_50

猜你在找的CentOS相关文章