製作可用grub引導Linux系統

2021-06-22 10:06:07 字數 3075 閱讀 6333

一" 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...