linux floppy 虚拟,Floppylinux

開機過程簡述

在還沒有談論如可製作簡易 Floppy Linux

之前,首先要瞭解整個開機的過程。當一部電腦一打開電源時,電腦裡的

BIOS

就會找尋有無系統開機磁片,此時會有兩種狀況產生:第一種狀況就是找到系統開機磁片,此時就會從系統開機磁片中的第

0 磁區、第 0

磁柱載入可開機磁區;另一種狀況就是找不到系統開機磁片的話,

BIOS 就會找尋硬碟的 MBR ( Master Boot Record

),並且執行記錄在 MBR 上的開機載入程式( Boot Loader

)進行開機。1999932c12869a23bb7158de032d218f.gif

不管是從軟碟開機也好,還是從硬碟開機也罷,首先整個作業系統的

loader (就 Linux 來講就是 LILO 『 LInux LOader 』)會載入

Linux Kernel ,而 Kernel

一起動的第一件事就是進入保護模式( protected mode

),所有的硬體交由 Kernel 來控制,擺 脫 BIOS 的牽絆。

一旦 Kernel

載入完畢之後,開始初始化系統所有硬體設備。當所有的硬體初始化完成之後,接著系統將嘗試掛載(

mount ) root filesystem 。Root filesystem 就是被掛上當作” /

”目錄的 filesystem 。Kernel 必須知道從哪裡可以找到 root

filesystem ( PS :一般系統磁碟片的 root filesystem

會被製作成以 ramdisk 執行方式的影像檔【 image

】),否則系統就會停止運作( halt )。

當 root filesystem 成功 的載之後,就會去執行 init

這個程式,init 就會開始檢查 /etc/inittab

,找出該檔中標明 sysinit 這一行,並執行該行的 script

,在 redhat 上為 rc.sysinit ,而 rc.sysinit

會進行系統的初始化動作,在這裡我打算不介紹這支

script 有興趣可以參考 redhat 上的 rc.sysinit 。

當 rc.sysinit 執行完畢之後,控制權立即轉回到 init

的手中,接下來馬上進入預設 runlevel 。若內定的 runlevel

為 3 的話, init 就執行 /sbin/mingetty 啟動 virtual console

並且以 : ” login :”提示讓使用者登入,完成開機。登入後系統會提供一個

shell 給使用者,就可以使用 Linux 。若 runlevel 為 5

的話,則在開啟 virtual console 之後,init 會再執行 xdm

啟動 X window system ,讓使用者以 xdm 界面登入。

以上就是 Linux 開機的過程。

製作簡易 Floppy Linux

在這裡必須說明一下,所製作的簡易 Floppy Linux 是一個功

能非常精簡的 Linux ,其功

能簡述為:只支援軟碟、並不支援硬碟及光碟, 没

有網路功 能,可以執行簡單的 shell

程式及一些常用的工具程式。接下來,你應該準備一些發展

Floopy Linux 的 source package 及工具程式: kernel source 、

syslinux 、 BusyBox 。首先,你可以觀察出這個 Floppy Linux

的開機過程與上述開機過程稍有不同:將 LILO 更換成

syslinux ,開機完之後直接提供一個 shell 給使用者用。

Floppy Linux 完整開機如圖所示。

首先針對我們的 Floppy Linux 來量身製作它所屬 kernel (

PS :請把所需的 driver   make

進核心中),聰明的你應該很快設定好簡易 kernel

所需的選項並 make 出 kernel 來。在這裡並不論討如何 make

kernel ,假如你對如何 make kernel

不懂的話,你應該多下一點功 夫在這上面或參考 HowTo

。以下為 make kernel 命令。

#make menuconfig

#make dep

#make zImage 或 make bzImage (若核心大於 640K 的話)

接下來,我們需要一些常用的工具程式, BusyBox

是一個蠻不錯的選擇。在這裡先對這個大名鼎鼎 BusyBox

簡單的介紹一下: BusyBox 它包含了七十多種 Linux

上標準的工具程式,它只需要的磁碟空間僅僅幾百 k

(視所選擇工具程式的數目來決定大小),在嵌入式系統上常用到它(例如

Linux Router Project 和 Debian boot floppies

就使用到它)。你可以在網址 http://busybox.lineo.com

找到一些參考資料及下載它,它是 Open Source tool 由

lineo,Inc

這家嵌入廠商所贊助。好了趕緊建立出一個靜態連結的

BusyBox ( Floppy Linux 這一個例子用到了 init 、 ls 、 cp 、

cat 、 mount 、 umount 、 more 、 ps 、 sh ),將 BusyBox

編譯成靜態連結的原因就是不希望 Floppy Linux 使用到 glibc

而增加磁碟的使用空間。以下為建立 BusyBox 的步驟:

#tar zxvf busybox-0.51.tar.gz

修改 Makefile 中的 DOSTATIC 參數,從 false 改為 true

#make

到現在為止,我們已經有了 Liunx kernel

及一些常用的工具程式,似乎還少了 root filesysem

。所以我們現在為 Floppy Linux 開始來打造迷你的 root

filesystem 。在開始建造 root filesystem 之前你必須成為 super

uesr 也就是 root ,因為我們必須要用到 mknod 不得不為 root

。首先為 root filesystem 建一個目錄叫做 floppy-linux

,然後進入 floppy-linux 目錄內:

#mkdir floppy-linux

#cd floppy-linux

接下來的步驟就是為 root filesystem

建立一些標準的目錄:

#mkdir dev etc etc/rc.d bin proc mnt tmp var

#chmod 755 dev etc  etc/rc.d bin mnt tmp var

#chmod 555 proc

#ln -s bin sbin

進入 /dev 目錄下建立一般終端機設備:

#cd dev

#mknod tty c 5 0

#mknod console c 5 1

#chmod 666 tty console

接著建立 VGA Display 虛擬終端機設備:

#mknod tty0 c 4 0

#chmod 666 tty0

再建立 RAM disk 設備:

#mknod ram0 b 1 0

#chmod 600 ram0

再建立 floppy 設備:

#mknod fd0 b 2 0

#chmod 600 fd0

最後在建立 null 設備:

#mknod null c 1 3

#chmod 666 null

若你覺得以 mknod

的方式建造這些檔案不方便的話,另一個方法就是以 tar

的方式來建立。現在開始編輯有關的 shell srcipt

,先來編輯 /etc/inittab 這一支 script ,因為我們用的是

BusyBox 上的 init ,它與一般所使用的 init

有點不太一樣,它會先執行 /etc/init.d/rcS 而不是 /etc/rc.d/rc.sysinit

,為了做出來的 Floppy Linux 架構與 redhat

的架構一樣,所以修改了 BusyBox 中的 init.c

。底下是修到的部分內容:

#ifndef INIT_SCRIPT

#define INIT_SRCIPT “ /etc/rc.d/rc.sysinit ”

#endif

請進入到 /floppy-linux/etc/rc.d 這個目錄下編輯 inittab

,內容如下:

::sysinit:/etc/rc.d/rc.sysinit

::askfirst:/bin/sh

修改 inittab 的權限:

#chmod 644 inittab

編輯好 rc.sysinit 之後,緊接著就是編輯 /floppy-linux/etc/rc.d

底下的 rc.sysinit ,其內容如下:

#!/bin/sh

mount -a

變更其權限:

#chmod 755 rc.sysinit

再來在編輯 /floppy-linux/etc/ 底下的 fstab , fstab

內容如下:

proc   /proc    proc    defaults   0   0

修改 fstab 權限:

#chmod 644 fstab

完成上述編輯之後,就要把靜態連結版的 BusyBox 搬到

/floppy-linux/bin

下,並做出所需要的工具程式的連結符號,其步驟為下:

#cd /floppy-linux/bin

#cp /busybox-0.51/busybox ./init

#ln -s init ls

#ln -s init cp

#ln -s init mount

#ln -s init umount

#ln -s init more

#ln -s init ps

#ln -s init sh

到這裡為止,可以說 floppy-linux 的 root filesystem

已經製作好了,但我們的 floppy-linux 的 root filesystem 要以

ram disk 的方式來實現。所現在我們就來製作 ram disk

,其方法如下:

#dd if=/dev/zero of=/tmp/tmp_loop bs=1k count=2048

#losetup /dev/loop0 /tmp/tmp_loop

#mke2fs -m 0 /dev/loop0

#mount -t ext2 /dev/loop0 /mnt

#cp -a /floppy-linux/* /mnt

#umount /mnt

#losetup -d /dev/loop0

#dd if=/tmp/tmp_loop | gzip -9 > /tmp/Image.gz

#rm -f /tmp/tmp_loop

#sync

此時你就可以在 /tmp 底下發現 Image.gz

這個檔案,這就是我們的 ram disk

影像檔,假如你經常修改 root filesystem

的內容,建議你可以將上述步驟寫成一支 shell srcipt

,你就可以省下蠻多的時間。到目前為止我們已經完成製

floppy-linux 的準備,接下來就將我們努力的成果擺

入磁碟片。我們的 floppy-linux 的 loader 為 syslinux

,所以先要準備好 syslinux

。首先,將空白的磁片格式化,然後載入 sysliunux

,步驟如下:

#mkdosfs /dev/fd0

#syslinux /dev/fd0

完成上述步驟之後,請編輯 syslinux 的組態檔 syslinux.cfg

,其 syslinux.cfg 內容如下:

TIMEOUT  20

DEFAULT  linux

LABEL  linux

KERNEL  linux

APPEND  root=/dev/ram0  initrd=Image.gz

然後將 syslinux.cfg 、 kernel 、 Image.gz 拷貝到磁片中:

#mount -t msdos /dev/fd0 /mnt

#cp /usr/src/linux/arch/i386/boot/zImage /mnt/linux

#cp /tmp/Image.gz /mnt

#cp syslinux.cfg /mnt

現在可以說 Floppy Linux

正式完成,此時你會發現到我們的 Floppy Linux

的大小竟然只有幾百 k 。你現在可以測試你的 Floopy Linux

啦。

*  Copyright (C) 版權屬原作者所有 *

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值