
章节导航:
I. 前言
我们的生活与计算机密不可分. 我们一直在处理操作系统. 有时我们会因系统错误而感到头晕. 最好使用操作系统来构建我们自己的简单系统. ,体验制作操作系统的乐趣. 系统地学习了Linux操作系统之后,就有了理论基础,因此我迫不及待地构建自己的简单Linux小型系统,感兴趣的学生也可以来做.
在下一篇文章中,编辑器将首先从Linux系统的启动过程开始,逐个显示启动过程,然后进行实验指导.
二,Linux系统启动过程
1. 开机自检(POST: 开机系统测试)
这些自检功能是通过称为BIOS的软件程序实现的. BIOS是基本的输入输出系统. 它安装在硬件芯片CMOS上. CMOS在开机过程中开机. BIOS将根据CMOS上的一些配置信息读取硬件状态,然后初始化硬件设备.
开机自检主要是检查硬件设备是否存在并且可以正常运行,例如是否存在CPU,内存和硬盘,以及它们是否正常运行,CPU风扇是否可以运行和散热. ,以及是否存在某些输入和输出设备,但是某些设备的存在并不影响系统的正常启动,例如键盘和鼠标.
2,加载MBR
初始化硬件后,BIOS将列出一些可启动设备序列,然后开始读取第一个可启动设备中操作系统的核心文件. 我们必须使用启动管理程序来处理这些核心文件的加载. 引导管理程序为: Bootloader. 引导加载程序是一个程序. 它必须取决于一块硬件. 该硬件是硬盘,而这恰恰是第一个. 可引导硬盘的第一个扇区是我们之前阅读的MBR(主引导记录). 因此,在开机自检后,BIOS将引导系统进入MBR并找到引导加载程序.
3,引导加载程序
Boot Loader是一个小程序,在操作系统内核运行之前运行. 通过这个小程序,可以初始化硬件设备并建立内存空间图,从而为操作系统内核的最终调用准备系统的软件和硬件环境. 最广泛使用的Boot Loader是Grub. 系统将Linux下的/boot/grub/grub.conf的配置文件读入内存,根据配置文件中的信息查找内核文件和伪根文件,并将伪根文件加载到内存,模拟一个根文件系统,然后加载内核文件.
4. 加载系统内核(内核),执行系统初始化信息,
Bootloader可以加载内核和initrd,然后将initrd解压缩到内存中的根目录中,然后内核可以在该虚拟根文件系统上加载适当的驱动程序以加载硬盘和其他设备,然后释放虚拟Root文件系统,并以只读方式将真实的根文件系统挂载到磁盘上,然后启动正常的引导过程. 此时,内核程序已完全接管BIOS的工作,并且所有后续操作均由内核完成.
5. 在用户空间/ sbin / init
中启动第一个可执行程序
在加载内核,硬件和驱动程序信息之后,内核将调用用户空间中的第一个可执行程序/ sbin / init. inti流程的主要功能是准备软件操作环境,包括系统的主机名,网络配置和文件. 开始其他服务的管理,例如系统格式,服务操作级别等. 所有这些操作均由init定义. 配置文件.
初始化配置文件:
Centos5: 由于centos5使用Sys init方法,因此其特征是启动用户空间服务程序,通常通过脚本运行,并且相关服务将串行启动,这也导致centos5系统启动过程非常缓慢,配置文件为: / etc / initab
Centos6: 采用了Upstart方法. 其特征是守护程序之间的通信取决于D-Bus. 因此,基本上可以实现类似的并行启动: 配置文件: / etc / inittab,/ etc / init / *. conf
Centos7: 使用Systemd方法的功能是仅在首次访问该服务时才启动该服务. 因此,Centos7系统的启动过程非常快. 配置文件为: / usr / lin / system / *.
6. 在init程序完成inittab配置文件的执行后,执行系统初始化脚本rc.sysinit
在定义运行级别之后,Linux系统执行的第一个用户级别文件是rc.sysinit脚本程序. 该脚本初始化用户空间环境并执行许多系统初始化任务;在完成系统初始化脚本后,系统还将启动设置为在相应级别下启动的服务,并关闭设置为关闭的服务. 此步骤是根据inittab配置文件中定义的运行级别在相应的运行目录中运行服务设置脚本.
在服务启动结束时,将执行最后一个脚本: /etc/rc.d/rc.local,该脚本是为用户保留的,您可以在此处放置用户想要开始的内容.
7. 执行/ bin / login程序进入登录等待状态
此时,该输入用户名和密码了,漫长的启动之路已经结束.
附加启动流程图:

三,实验前准备
我们要制造的是U盘Linux系统,因此我们需要准备一个U盘,它不必太大.
需要准备的工具: U盘,虚拟机或Centos主机,Centos6系统.
对U盘的要求: 通常,Linux系统无法识别NTFS文件系统,因此,如果U盘是NTFS系统,我们需要将其格式化为FAT32文件系统格式,以便系统可以识别它.
四个. 实验过程
1. 启动虚拟机的VMware USB仲裁服务

我们需要虚拟机能够识别USB接口上的U盘,因此我们需要启用此服务. 如果已启用,则可以直接跳过这些步骤. 编辑器将演示如何启用该服务.
如图所示:
右键单击我的计算机,打开管理,然后输入:


在该服务中找到“ VMware USB Arbitration Service”项,然后启动该服务,然后重新启动虚拟机.
2,将U盘安装到虚拟机中的系统上
打开虚拟机后,找到您自己的USB闪存驱动器并选择连接:


3. 分区U盘
我们需要将U盘分为两个分区,一个分区作为启动分区,另一个分区作为根分区. 使用: fdisk命令.
在编辑器的计算机上标识的U盘是/ dev / sdc磁盘号,因此执行: fdisk / dev / sdc,使用/ dev / sdc1作为引导分区,并将大小划分为1G;更改/ dev / sdc2作为根分区,将所有剩余空间分配给根分区.




4. 将分区格式化为ext4文件系统
分区后,不能直接使用. 我们需要先格式化分区,然后才能正常使用. 使用命令: mkfs.ext4 / dev / sdc1. 您需要格式化两个分区/ dev / sdc1和/ dev / sdc2化.


5. 创建并安装将设置为引导分区的目录
该目录必须是引导目录,以便在生成某些数据时不会混乱,因为我们要将分区/ dev / sdc1挂载到名为/ boot的目录中,因此需要创建一个新目录,以便并非如此系统上的启动目录很混乱,编辑器创建了一个新目录: mkdir –p / linshi / boot

6. 将/ dev / sdc1挂载到/ linshi / boot目录
执行命令: mount / dev / sdc1 / linshi / boot

7. 在引导分区/ dev / sdc1
上安装grub
执行命令: grub-install --root-directory = / linshi / dev / sdc

此命令用于安装和修复grub引导文件. 如果grub目录中的文件已损坏,则可以使用此命令将其还原. 因为我们要将grub安装在U盘的引导目录上,所以我们需要指定一个位置,即–root-directory = / linshi,对象是/ dev / sdc
在/ linshi / boot下检查目录树结构:


检查U盘的MBR表:

8. 将本地启动下的内核文件和伪根文件复制到U盘启动下,命令如下:
cp /boot/vmlinuz-2.6.32-696.e16.x86_64 / linshi / boot /
cp /boot/initramfs-2.6.32-696.e16.x86-64.img / linshi / boot /
执行过程如图所示:

9. 手动编写grub.conf配置文件
Vim /mnt/boot/grub/grub.conf
内容如下:
默认值= 0
timeout = 5
隐藏菜单
titleCentos-jiake
root(hd0,0)
kernel / vmlinuz-2.6.32-696.e16.x86_64root = UUID =(USB闪存驱动器根分区的UUID)selinux = 0 init = / bin / bash
initrd / initramfs-2.6.32-696.e16.x86-64.img
如图所示:

10. 创建一个目录以挂载根分区,然后挂载U盘的根分区
mkdir / linshi / sysroot
挂载/ dev / sdc2 / linshi / sysroot
如图所示:

11. 在U盘的根分区下创建与本地根相同的目录
创建一个一个太慢了. 我们使用一种快捷方式,首先将所有目录名称存储在本地根目录下,创建一个列表,然后一次创建所有目录.
第一个ls /> /mulu.txt
mkdir –p`cat mulu.txt`
如图所示:

12. 复制网卡驱动程序
有时我们需要使用网卡,因此我们一起复制了网卡驱动程序. 如果您不想使用网卡功能,则无需复制此文件驱动程序.
使用locate e1000查找网卡驱动程序的位置,e1000是网卡的驱动程序文件.
如图所示:


13. 通过命令复制脚本将所需命令复制到U盘的根分区.
此脚本是由小编编写的. 如果您不知道该怎么做,请放心,小编将在后面附加源代码. 如果要使用脚本,请记住为脚本添加执行权限. 您可以看到编辑器的屏幕截图,其中提到了该操作:

14. 查看我们U盘根分区下的树形
复制命令后,必须验证命令是否复制成功,并且路径必须正确. 该命令最初所在的位置,将其复制并放在相应的目录中. 否则,该命令将不可用.



15. 完成命令迁移功能后,将U盘放在单独的计算机上以启动
要关闭和拔出USB闪存驱动器,此处的编辑器将计算机用作整机,并从USB闪存驱动器启动,因此无法显示高质量的屏幕截图. 下图是用手机拍摄的.
对于不同的型号,进入本地BIOS的键也不同. 请自行找到进入BIOS的密钥. 进入BIOS时,需要将U盘设置为第一个启动项. (为了显示U盘,需要先将U盘插入计算机)

找到自己的U盘,使用shift +将U盘移至第一位置:

完成后,按F10保存并退出以开始:

16. 成功启动!

等等,我们可以看到成功输入bash的界面. 由于我们已经制作了一个简单的Linux系统,因此我们仅使用bash进入一个简单的bash环境,并且可以执行一些简单的命令. 如果要使用init启动该过程,则需要配置更多文件. 如果您有兴趣,可以根据需要进行深入研究.
五,复制命令脚本
#!/ bin / bash
#将用户指定的命令复制到相应的根目录
copy_comd(){
com_path =`哪个$ 1`
com_dest =`目录名$ com_path`
[! -d $ dir $ com_dest] && mkdir -p $ dir $ com_dest
ls $ dir $ com_path&> / dev / null && {回显“命令已存在!” ;返回99; }
cp $ com_path $ dir“ $ com_path”
echo -e“ $ com_path \ e [33; 5m ====> \ e [0m $ dir” $ com_path“”
}
#将命令所依赖的库文件复制到相应目录中
copy_comfile(){
ldd $(其中$ 1)| grep -oE“ /.*” |在读取libfile时

做
本地lib_destdir = $ dir $(目录名$ libfile)
本地lib_destfile = $ dir $ libfile
如果[-e $ lib_destfile];然后
继续
elif [-d $ lib_destdir];然后
cp $ libfile $ lib_destdir
echo -e“ $ libfile \ e [33; 5m ===> \ e [0m $ lib_destfile”“
其他
mkdir -p $ lib_destdir&> / dev / null
cp $ libfile $ lib_destdir
echo -e“ $ libfile \ e [33; 5m ===> \ e [0m $ lib_destfile”“
fi
完成
}
#Main程序(您需要首先指定根目录,并且可以退出每个执行步骤. )
为真时;
读取-p“请输入dir(“退出”以退出!): ” dir
如果[“ $ dir” ==退出];然后
退出
fi
[-z $ dir] && {echo -e“ \ e [31m请输入目录!\ e [0m”; continue;} |||打破
完成
ls -d $ dir&> / dev / null || mkdir -p $ dir
同时为true;做
read -p“请输入要复制的命令(” quit“退出!): ” com
如果[“ $ com” ==退出];然后
退出
fi
其中“ $ com”&> / dev / null || {回声“此命令没有退出!” ;继续; }
copy_comd $ com
ret = $?
[$ ret -eq 99] &&继续
copy_comfile $ com
完成
#(记住要向脚本添加执行权限!)
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/sanxing/article-300497-1.html
我们家千玺配的棒棒的
当年台湾经济起飞靠的是越战机遇
自称青龙行于海
美国也就是虚张声势