一" rel="noopener noreferrer">製作可用grub引導linux系統的磁碟映像檔案 一
追夢者 本文研究如何製作乙個帶有grub引導linux系統的磁碟映像檔案,並在磁碟映像檔案中放置乙個linux bzimage,使得grub可以引導linux,文章最後用qemu來驗證磁碟映像檔案的正確性。
實驗平台:
系統:linux-2.6.35.6-45.fc14.i686 gnu/linux
1編譯linux-2.6.38.tar.bz2
從ftp:
$cd image_dir
$tar xvf linux-2.6.38.tar.bz2
採用i386的預設配置編譯linux-2.6.38:
$make i386_defconfig
示意圖如下:
然後編譯linux kernel:
$make
編譯結果如下:
2製作用軟盤引導的磁碟映像檔案
需用指出的是,我們需用準備靜態編譯的乙個應用程式init提供給linux kernel執行的後期呼叫。
例如編譯乙個輸出結果為「hello world!」的可執行檔案:
#include
int main()
該可執行檔案命名為init.c
$gcc –static –o init init.c
如果靜態編譯原始碼init.c時出現:
/usr/bin/ld: cannot find -lc
collect2: ld returned 1 exit status
解決方法:
$sudo yum install glibc-static
備註:
glibc-static.i686 :c library static libraries for -static linking.
libstdc++-static.i686: static libraries for the gnu standard c++ library
安裝這兩個庫檔案:
$sudo yum install glibc-static libstdc++-static
建立引導根目錄映像:
使用命令:
$dd if=/dev/zero of=initrd4m.img bs=4096 count=1024
$mkfs.ext3 initrd4m.img
解釋:建立乙個
initrd 4m.img
映像,大小為
4m,每個扇區
4k。建立結果如下:
$mkdir rootfs
$sudo mount -o loop initrd4m.img rootfs
解釋:
在image_dir目錄下建立乙個rootfs目錄,將initrd4m.img掛在到rootfs目錄下。
將init拷貝到initrd4m.img的目標根目錄下(因為linux啟動後期會在根目錄中尋找乙個應用程式來執行,在根目錄下提供init是一種可選方案)
$cp init rootfs/
準備dev目錄:
$sudo mkdir rootfs/dev
linux啟動過程中會啟用console裝置:
$sudo mknod rootfs/dev/console c 5 1
另外需要提供乙個linux根裝置,我們使用ram:
$sudo mknod rootfs/dev/ram b 1 0
$sudo umount rootfs
至此,乙個包含簡單應用程式的根目錄initrd4m.img映像就準備好。
結果如下:
使用命令:
可以看到系統在qemu中啟動起來,並且在啟動後看到init的輸出結果「hello world!」。
示意圖如下:
3用busybox建立根檔案系統來執行linux
上面的方案是最簡單的執行建立linux映像的方法,在上面的基礎上,我們更進一步:下面我們用busybox建立根檔案系統來執行linux。
我們在上面建立的initrd4m.img中建立根檔案系統:
$cd image_dir
$tar xvf busybox-1.19.4.tar.bz2
我們在busebox預設編譯的基礎上,稍作修改
$make defconfig
$make menuconfig
修改如下配置:
設定busybox settings–>build options–>build busybox
as a static binary(no share libs)
示意圖:
設定busybox settings –> installation options as soft-links
示意圖如下:
接著編譯busybox,產生根目錄印象
$make
接著將編譯的根目錄映像安裝到myinitrd4m.img映像檔案中:
我們使用前面生成的initrd4m.img,將initrd4m.img掛載到rootfs目錄下:
$sudo mount -o loop initrd4m.img rootfs
在busybox-1.19.4下,將編譯生成的根目錄映像安裝到rootfs目錄中(即安裝到initrd4m.img的根目錄中):
$cd busybox-1.19.4
$sudo make config_prefix=../rootfs/ install
解除安裝initrd4m.img映像:
$sudo umount rootfs
執行:此時可以進入busybox提供的shell環境,示意圖如下:
如上圖所示,進入shell後,我們可以動態載入執行init!
4製作帶grub啟動的磁碟映像
待續。。。。。。。
grub 引導安裝linux
在grub for dos裡面把那grldr這個檔案拷到你c盤根目錄 系統盤 其它的檔案都不要,就這樣,然後改boot.ini,加上一句 c grldr my grub 就 這樣,重啟,選 這項,進入grub。然後 grub kernel hd0,按一下tab鍵,從提示的專案裡面選乙個你那個isol...
製作GRUB個性化引導介面
安裝imagemagick,修改時要用到 yum install imagemagick要求它的解析度是640 480 因為grub只支援這個解析度的 將格式轉成xpm 因為grub只支援這個格式的 並且該xpm的色深必須是14,此要求用乙個命令就可以完成 我們先要原先的備份 gzip 9 spla...
恢復 Grub 引導
一般安裝 windows 和 linux 雙系統時都是先安裝 windows 再安裝 linux,然後利用 linux 自帶的多作業系統引導工具來製作引導選單。以 fedora 為例,安裝時會有 grub 的設定只要一直 next 就可以配置好 至少是能用的 但如果在使用中我們重新安裝了 windo...