"丁丁" <tinyding.bbs@bbs.sayya.org> 撰寫於郵件 news:47NM6H$6v_@bbs.sayya.org...
> 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-03-14/1047604787.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
>
> ===================================================
>