作者: tinyding (丁丁) 看板: Linux
標題: 【心得】由軟碟轉跳 USB 拇指碟開機.
時間: Wed Jul 23 22:09:53 2003
title: Linux 平台,由軟碟轉跳 USB 拇指碟開機,心得分享.
date: 2003.07.23
Shih-Ning Ding, tinyding @ ksts 點 seed 點 net 點 tw
上上個星期左右,一位台南友人來電問到"是否能在 USB 拇指碟中灌 Linux,並且使用
它來開機...",當時我因先前並沒有處理過 USB 相關週邊裝置的經驗,但根據網路上
的一些文件來看,驅動 USB 週邊裝置好像沒有什麼問題的樣子,所以我的回應是"可以
試試看...". 底下是在這次過程中所遭遇的問題及解決方式.
首先,因這次拿到的 USB 拇指碟有 256 Mb,而我平常在用的系統是 Debian Linux,所
以,我下個
debootstrap woody USBDIR ftp://ftp.tku.edu.tw/OS/Linux/distributions/debian
命令就可以在 USBDIR 目錄下安裝一個小型的 Debian Linux 系統,然後概估一下
USBDIR 目錄的總容量為何?是否小於 256 Mb?並以 fdisk 規劃一下 USB 拇指碟(
如註一.),再定其上的 Filesystem(我選用 ext3 filesystem.)後,就可以把 USBDIR
整個 tar 至所 Mount 上 USB 拇指碟中的第一個 partition 中了.
其次,因為在測試的 PC 上,上面的 BIOS 並沒有支援 USB 裝置開機,所以,我們初步
構想是由軟碟先開,再轉跳 USB 拇指碟繼續完成整個開機流程...
根據這兩個網頁文件(
http://www.neweasier.com/article/2003-0 ... 04787.html
http://rz-obrian.rz.uni-karlsruhe.de/knoppix-usb/
)上所描述的,我們得知在把 USB 裝置驅動起來後,得等個幾秒鐘讓它完成初始註冊等
動作,因此,在開機軟碟片上我們得擺上驅動 USB 相關的模組、kernel 、ext3 相關
模組以及延時程式(參註二.). 起初,我企圖使用 knoppix 的 1.44 MB 開機軟碟來把
上述的東西都裝在一張軟碟片(容量大小為 80*2*18*512)上,但我失敗了(其中
minisys.gz 的內容如註三.).後來改採 tomsrtbt 套件(網址
http://www.toms.net/rb/)FAQ 文件中所述的,以 /dev/fd0u1722 來製作一張擁有
1.68 Mb 容量的軟碟(82*2*21*512),才解決擠不進一張軟碟的問題.
最後,由 Knoppix CD 開機,將其中的 /lib/modules/2.4.20-xfs 目錄下的所有檔案,
都拷貝到 USB 拇指碟下的 /lib/modules/2.4.20-xfs 去存放著,並再修改一下 USB
拇指碟下的 /etc/fstab 檔案內容為註四所表之後,重新開機,以特製的軟碟片來啟
動,在執行了 /linuxrc 後,把 USB 相關的週邊裝置驅動起來,並等待個四秒,
/linuxrc 結束,並以 /dev/sda1 為 root filesystem,轉跳 USB 拇指碟去繼續完成
未完的開機流程...
在這些都成功的運作之後,我不禁地又回頭再思慮了一番,難道在軟碟上的 minisys.gz
的內容,真的不能再縮減了嗎?!我引用 busybox 程式 670 Kb 就只為了執行 sleep
的功能?而 /linuxrc 上還有一支 insmod 的功能是由 /static/ash 所完成的,這個
功能 busybox 不是也有嗎?另,busybox 除了能編譯成 static 外,不是還可以執行
像 tar/gzip/df 等等的許多功能嗎?那我能將這許多在這次都用不著的功能,把它們
由 busybox 中給剔除嗎? 所幸! BusyBox 套件中的 Config.h 定義了 busybox 可
執行的功能,將不需要的功能弄成註解即可(如註五.),經過 busybox 的瘦身後,我總
算把驅動 USB 拇指碟的開機軟碟給弄回標準地 1.44 MB 規格(註六與註七.).
Have Fun! ^_^
註一.
==== 規劃 USB 拇指碟 ======
debian:~# fdisk /dev/sda
Command (m for help): p
Disk /dev/sda: 260 MB, 260045312 bytes
8 heads, 62 sectors/track, 1023 cylinders
Units = cylinders of 496 * 512 = 253952 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 1023 253673 83 Linux
Command (m for help):
============================
註二.
==== Ext3 與 USB 裝置驅動模組以及 busybox 做為延時 sleep 之用. ======
debian:/mnt# ls modules/ -l
總計 373
-rw-r--r-- 1 root root 87626 2003-03-26 22:59 ext3.o
-rw-r--r-- 1 root root 74090 2003-03-26 22:59 jbd.o
-rw-r--r-- 1 root root 87035 2003-03-26 22:59 usbcore.o
-rw-r--r-- 1 root root 24860 2003-03-26 22:59 usb-ohci.o
-rw-r--r-- 1 root root 69971 2003-03-26 22:59 usb-storage.o
-rw-r--r-- 1 root root 28684 2003-03-26 22:59 usb-uhci.o
debian:/mnt# ls static/ -l
總計 824
-rwxr-xr-x 1 root root 150580 2002-07-26 20:09 ash
-rwxr-xr-x 1 root root 687064 2003-07-16 16:01 busybox
lrwxrwxrwx 1 root root 3 2003-07-16 14:28 init -> ash
lrwxrwxrwx 1 root root 3 2003-07-16 14:28 sh -> ash
=====================================================================
註三.
==== 修改 Knoppix 開機軟碟中的 minisys.gz 以便驅動 USB 拇指碟 ======
debian:/cdrom# ls -l
總計 27
lrwxrwxrwx 1 root root 12 2003-07-16 14:28 bin -> /KNOPPIX/bin
lrwxrwxrwx 1 root root 13 2003-07-16 14:28 boot -> /KNOPPIX/boot
drwxr-xr-x 2 root root 1024 1998-04-23 07:30 cdrom
drwxr-xr-x 3 root root 6144 2001-09-18 02:36 dev
drwxr-xr-x 2 root root 1024 2003-02-24 06:40 etc
drwxr-xr-x 2 root root 1024 2000-06-15 13:17 KNOPPIX
lrwxrwxrwx 1 root root 12 2003-07-16 14:28 lib -> /KNOPPIX/lib
-rwxr-xr-x 1 root root 201 2003-07-16 16:03 linuxrc
-rwxr-xr-x 1 root root 11957 2003-05-06 22:48 linuxrc.knoppix
drwx------ 2 root root 1024 2003-07-16 13:53 lost+found
drwxr-xr-x 2 root root 1024 2000-05-28 21:59 mnt
drwxr-xr-x 3 root root 1024 2003-07-16 14:09 modules
lrwxrwxrwx 1 root root 12 2003-07-16 14:28 opt -> /KNOPPIX/opt
drwxr-xr-x 2 root root 1024 1997-11-27 00:23 proc
lrwxrwxrwx 1 root root 13 2003-07-16 14:28 sbin -> /KNOPPIX/sbin
drwxr-xr-x 2 root root 1024 2003-07-16 16:02 static
lrwxrwxrwx 1 root root 8 2003-07-16 14:28 tmp -> /var/tmp
lrwxrwxrwx 1 root root 12 2003-07-16 14:28 usr -> /KNOPPIX/usr
debian:/cdrom# cat linuxrc
#!/static/sh
insmod /modules/jbd.o
insmod /modules/ext3.o
insmod /modules/usbcore.o
insmod /modules/usb-uhci.o
insmod /modules/usb-ohci.o
insmod /modules/usb-storage.o
/static/busybox sleep 4
exit 0
debian:/cdrom# ls modules/ -l
總計 383
-rwxr-xr-x 1 root root 9185 2003-03-27 00:05 cloop.o
-rw-r--r-- 1 root root 87626 2003-03-26 22:59 ext3.o
-rw-r--r-- 1 root root 74090 2003-03-26 22:59 jbd.o
drwxr-xr-x 2 root root 1024 2003-07-16 14:26 scsi
-rw-r--r-- 1 root root 87035 2003-03-26 22:59 usbcore.o
-rw-r--r-- 1 root root 24860 2003-03-26 22:59 usb-ohci.o
-rw-r--r-- 1 root root 69971 2003-03-26 22:59 usb-storage.o
-rw-r--r-- 1 root root 28684 2003-03-26 22:59 usb-uhci.o
debian:/cdrom# ls static/ -l
總計 824
-rwxr-xr-x 1 root root 150580 2002-07-26 20:09 ash
-rwxr-xr-x 1 root root 687064 2003-07-16 16:01 busybox
lrwxrwxrwx 1 root root 3 2003-07-16 14:28 init -> ash
lrwxrwxrwx 1 root root 3 2003-07-16 14:28 sh -> ash
debian:/cdrom# ldd static/busybox
not a dynamic executable
====================================================================
註四.
==== 修改 USB 拇指碟中的 /etc/fstab 檔之內容 ======
/dev/sda1 / ext3 defaults,errors=remount-ro 0 1
proc /proc proc defaults 0 0
===================================================
註五.
==== 節錄 BusyBox-0.60.5 中的 Config.h 檔. ======
/* vi: set sw=4 ts=4: */
// This file defines the feature set to be compiled into busybox.
// When you turn things off here, they won't be compiled in at all.
//
//// This file is parsed by sed. You MUST use single line comments.
// i.e., //#define BB_BLAH
//
//
// BusyBox Applications
//#define BB_ADJTIMEX
//#define BB_AR
#define BB_ASH
// #define BB_BASENAME
#define BB_CAT
// #define BB_CHGRP
// #define BB_CHMOD
// #define BB_CHOWN
==================================================
註六.
==== 經瘦身後的 busybox,重新再放到 minisys.gz 中 ======
debian:/mnt# ls -l
總計 4
drwxr-xr-x 2 root root 1024 2003-07-20 16:11 dev
-rwxr-xr-x 1 root root 290 2003-07-20 15:39 linuxrc
drwxr-xr-x 3 root root 1024 2003-07-20 15:26 modules
drwxr-xr-x 2 root root 1024 2003-07-20 19:50 static
debian:/mnt# ls dev/ -l
總計 0
crw------- 1 root root 4, 0 1999-05-14 07:55 console
prw------- 1 root root 0 2000-01-17 02:31 initctl
brw-rw---- 1 root root 1, 250 2001-04-15 08:44 initrd
crw-rw-rw- 1 root root 1, 3 1998-05-06 04:32 null
brw------- 1 root root 1, 1 1998-05-06 04:32 ram
brw------- 1 root root 1, 0 1998-05-06 04:32 ram0
brw------- 1 root root 1, 1 1998-05-06 04:32 ram1
brw------- 1 root root 1, 11 1998-05-06 04:32 ram11
brw------- 1 root root 1, 12 1998-05-06 04:32 ram12
brw------- 1 root root 1, 13 1998-05-06 04:32 ram13
brw------- 1 root root 1, 14 1998-05-06 04:32 ram14
brw------- 1 root root 1, 15 1998-05-06 04:32 ram15
brw------- 1 root root 1, 19 1998-05-06 04:32 ram19
brw------- 1 root root 1, 2 1998-05-06 04:32 ram2
brw------- 1 root root 1, 3 1998-05-06 04:32 ram3
brw------- 1 root root 1, 4 1998-05-06 04:32 ram4
brw------- 1 root root 1, 5 1998-05-06 04:32 ram5
brw------- 1 root root 1, 6 1998-05-06 04:32 ram6
brw------- 1 root root 1, 7 1998-05-06 04:32 ram7
brw------- 1 root root 1, 8 1998-05-06 04:32 ram8
brw------- 1 root root 1, 9 1998-05-06 04:32 ram9
lrwxrwxrwx 1 root root 4 2003-07-20 19:51 ramdisk -> ram0
debian:/mnt# cat linuxrc
#!/static/sh
/static/busybox insmod /modules/jbd.o
/static/busybox insmod /modules/ext3.o
/static/busybox insmod /modules/usbcore.o
/static/busybox insmod /modules/usb-uhci.o
/static/busybox insmod /modules/usb-ohci.o
/static/busybox insmod /modules/usb-storage.o
/static/busybox sleep 4
debian:/mnt# ls modules/ -l
總計 374
-rw-r--r-- 1 root root 87626 2003-03-26 22:59 ext3.o
-rw-r--r-- 1 root root 74090 2003-03-26 22:59 jbd.o
drwxr-xr-x 2 root root 1024 2003-07-16 14:26 scsi
-rw-r--r-- 1 root root 87035 2003-03-26 22:59 usbcore.o
-rw-r--r-- 1 root root 24860 2003-03-26 22:59 usb-ohci.o
-rw-r--r-- 1 root root 69971 2003-03-26 22:59 usb-storage.o
-rw-r--r-- 1 root root 28684 2003-03-26 22:59 usb-uhci.o
debian:/mnt# ls static/ -l
總計 534
-rwxr-xr-x 1 root root 541976 2003-07-20 19:48 busybox
lrwxrwxrwx 1 root root 7 2003-07-20 19:51 sh -> busybox
=======================================================
註七.
==== 最後定案的驅動 USB 拇指碟的開機軟碟內容 ======
debian:/floppy# ls -l
總計 1319
-rwxr--r-- 1 root root 33 2003-07-20 16:47 display
-rwxr--r-- 1 root root 6 2003-07-20 16:56 f1
-r-xr--r-- 1 root root 7828 2003-07-20 16:29 ldlinux.sys
-rwxr--r-- 1 root root 414660 2003-07-20 20:31 minisys.gz
-rwxr--r-- 1 root root 148 2003-07-20 21:16 syslinux.cfg
-rwxr--r-- 1 root root 925720 2003-03-26 22:59 vmlinuz
debian:/floppy# cat syslinux.cfg
DEFAULT linux
PROMPT 1
DISPLAY display
F1 f1
LABEL linux
KERNEL vmlinuz
APPEND ramdisk_size=100000 vga=normal initrd=minisys.gz root=/dev/sda1
debian:/floppy# cat display
USB Boot
Press F1 for help.
debian:/floppy# cat f1
linux
===================================================
--
\1B[1;32m※ Origin: \1B[33mSayYA 資訊站 \1B[37m<bbs.sayya.org> \1B[m
\1B[1;31m◆ From: \1B[36mh-225.hosp.ncku.edu.tw\1B[m