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

一、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

相关文章

linux下开机自启: 在/etc/init.d目录下新建文件elasticsear...
1、因为在centos7中/etc/rc.d/rc.local的权限被降低了,所以...
最简单的查看方法可以使用ls -ll、ls-lh命令进行查看,当使用...
ASP.NET Core应用程序发布linux在shell中运行是正常的。可一...
设置时区(CentOS 7) 先执行命令timedatectl status|grep &...
vim&#160;/etc/sysconfig/network-scripts/ifcfg-eth0 B...