制作一个简单的linux系统

系统的其动过程可分为:
POST :开机加电自检
Boot Sequence(BIOS):根据BISO中的启动顺序找到MBR
Boot Loader (MBR):启动MBR中的bootloader引导程序
Kernel(ramdisk):加载内核,加载内核是会用到ramdisk,找文件系统
rootfk:boot的进入文件系统
switchroot:切换根目录
/sbin/init:运行第一个程序
/etc/inittab:根据inittab中指定的启动级别,启动指定级别下该启动的服务,关闭该关闭的服务(/etc/rc.d/init.d)
/etc/init/*.conf

根据以上内容制作一个小型的linux系统。

准备工作,在虚拟机当中添加一块硬盘大小20G(分两个区、dev/sdb1挂载到boot,dev/sdb2挂载到miniroot),我们将系统直接做在这块硬盘上面,然后直接启动即可。
1、添加硬盘
制作一个简单的linux系统

2、分区并格式化为ext4文件系统
制作一个简单的linux系统

3、创建目录,挂载分区
制作一个简单的linux系统

4、进入/mnt/boot目录下复制本机内核文件和initramfs文件至/mnt/boot目录下并从新命名
制作一个简单的linux系统

5、使用grub-install 命令安装grub
grub-install --root-directory=/mnt /dev/sdb
--root-directory=(指向的是boot目录的上一级目录)
/dev/sdb :是要将grub安装在那个磁盘上,注意不是分区上
制作一个简单的linux系统
可以看到已经生成了grub文件

6、在grub文件中创建grub的配置文件grub.cfg

default=0
timeout=5
title=minilinux
root (hd0,0)
kernel /vmlinuz ro root=/dev/sda2
initrd /initramfs.img

root(hd0,0):指定根目录,hd0:表示第一块磁盘,0:表示第一个分区,其实就是将根切换到了boot分区,方便接下来查找kernel,和initrdisk文件
kernel:指明内核文件
ro root=/dev/sdb2 :以只读方式重新指明根文件所在位置
initrd:指明文件initrdisk文件所在位置
制作一个简单的linux系统

7、到/mnt/miniroot/目录下创建相关目录
mkdir -pv proc dev lib lib64 bin sbin home root etc/rc.d usr/{lib,bin,sbin} var tmp mnt sys
制作一个简单的linux系统

8、将系统上init和bash文件和所依赖的库一同复制到miniroot相应目录下
可用which查看命令目录
用lld查看命令所依赖的库文件
制作一个简单的linux系统
制作一个简单的linux系统

9、切换根目录测试根是否有效 chroot /mnt/miniroot/ 如果出现bash提示符,说明根有效
制作一个简单的linux系统

10、 创建/mnt/miniroot/etc/inittab配置文件,
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
制作一个简单的linux系统
定义系统默认启动级别为3,并且指定系统初始化时运行/etc/rc.d/rc.sysinit脚本

11、编辑rc.sysinit文件,显示欢迎信息
然后运行/bin/bash
并赋予执行权限
制作一个简单的linux系统

12、运行sync同步到硬盘上
制作一个简单的linux系统

13,、将制作minilinux的主机关机,添加一台虚拟机,从这块做好minilinux系统的主机启动。
制作一个简单的linux系统
制作一个简单的linux系统
制作一个简单的linux系统

但是这样做没能成功,载入内核,然后切换了根,就结束了好像是没有运行init去执行rc.d/rc.sysinit 求解??

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章