制作一个简单的linux系统

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了制作一个简单的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、添加硬盘
技术分享图片

2、分区并格式化为ext4文件系统
技术分享图片

3、创建目录,挂载分区
技术分享图片

4、进入/mnt/boot目录下复制本机内核文件和initramfs文件至/mnt/boot目录下并从新命名
技术分享图片

5、使用grub-install 命令安装grub
grub-install --root-directory=/mnt /dev/sdb
--root-directory=(指向的是boot目录的上一级目录)
/dev/sdb :是要将grub安装在那个磁盘上,注意不是分区上
技术分享图片
可以看到已经生成了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文件所在位置
技术分享图片

7、到/mnt/miniroot/目录下创建相关目录
mkdir -pv proc dev lib lib64 bin sbin home root etc/rc.d usr/{lib,bin,sbin} var tmp mnt sys
技术分享图片

8、将系统上init和bash文件和所依赖的库一同复制到miniroot相应目录下
可用which查看命令目录
用lld查看命令所依赖的库文件
技术分享图片
技术分享图片

9、切换根目录测试根是否有效 chroot /mnt/miniroot/ 如果出现bash提示符,说明根有效
技术分享图片

10、 创建/mnt/miniroot/etc/inittab配置文件,
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
技术分享图片
定义系统默认启动级别为3,并且指定系统初始化时运行/etc/rc.d/rc.sysinit脚本

11、编辑rc.sysinit文件,显示欢迎信息
然后运行/bin/bash
并赋予执行权限
技术分享图片

12、运行sync同步到硬盘上
技术分享图片

13,、将制作minilinux的主机关机,添加一台虚拟机,从这块做好minilinux系统的主机启动。
技术分享图片
技术分享图片
技术分享图片

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

以上是关于制作一个简单的linux系统的主要内容,如果未能解决你的问题,请参考以下文章

Linux 之 简单制作chkconfig启动文件

Linux下BusyBox根文件系统制作

定制简单的Linux系统

基于topeer 4412开发板 无界面linux文件系统的制作

Linux下BusyBox根文件系统制作

Linux 最小系统制作