作者 主題: [轉貼]【心得】由軟碟轉跳 USB 拇指碟開機.  (閱讀 7904 次)

0 會員 與 1 訪客 正在閱讀本文。

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17464
    • 檢視個人資料
    • http://www.study-area.org
"丁丁" <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
>
> ===================================================
>