本文檔在virtualbox5.1.30,和ubuntu14.04下制作的.目的是了解系統(tǒng)的啟動過程.
1. 新建一個虛擬機(jī)(名稱:linux,類型:Linux,版本:Ubuntu(64bit))
除了虛擬硬盤大小設(shè)置2G,其它選項默認(rèn).
2. 在一個已經(jīng)安裝好ubuntu的虛擬機(jī)添加上述的虛擬硬盤.
先在安裝好的ubuntu上選擇設(shè)置->儲存->控制器:SATA->添加虛擬硬盤.
找到步驟1建立的虛擬硬盤.
結(jié)果如圖:
3.啟動已安裝好的ubuntu.給虛擬硬盤分區(qū).
如圖/dev/sdb就是步驟1的虛擬硬盤.
分區(qū)命令:sudo fdisk /dev/sdb
如圖,只分了一個主分區(qū):
4給虛擬硬盤安裝grub引導(dǎo).
a.把/dev/sdb1格式化ext4文件系統(tǒng).如圖:
b.掛載/dev/sdb1到/mnt.
命令:sudo mount -t ext4 /dev/sdb1 /mnt/
c.安裝grub.
5.添加grub.cfg
最簡單的方法是拷貝ubuntu虛擬機(jī)上的/boot/grub/grub.cfg到/mnt/boot/grub/,然后修改.
a.修改所有的uuid,用如圖的uuid(sdb1)替換原來的uuid(每個分區(qū)有唯一的uuid).
b.如圖修改147,165,182行.
6.拷貝vmlinux和ramdisk.
如圖命令:
7.自己寫一個init程序,測試內(nèi)核能否啟動.
代碼如圖:(文件名mian.c)
編譯命令:gcc -static main.c -o init,然后拷貝init到/mnt.
8.在/mnt下創(chuàng)建proc,sys,dev三個文件夾,/mnt內(nèi)容如下:
9.啟動linux虛擬機(jī),如圖,說明內(nèi)核和init都成功運(yùn)行.
10.拷貝sh和ls命令程序和動態(tài)庫. (可以拷貝更多命令)
注意:ubuntu系統(tǒng)的bash無法在這里當(dāng)作init進(jìn)程,sh實際是dash
a.先在/mnt下創(chuàng)建bin,lib/x86_64-linux-gnu,lib64文件夾.
b.sudo cp /bin/sh /bin/ls ./bin/
c.查看sh,ls需要哪些動態(tài)庫,如下:
d.拷貝步驟c的動態(tài)庫到lib/x86_64-linux-gnu和lib64.
結(jié)果如圖:
11.啟動linux虛擬機(jī),啟動前修改grub.cfg的init=/bin/sh,或者啟動時修改.結(jié)果如下:
聯(lián)系客服