製作一個簡單的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 求解??

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