[轉貼]【心得】由軟碟轉跳 USB 拇指碟開機.

常言道:『飲水思源』,在 Open Source 的世界裡,我們常常需要別人的幫助,但是在您有所心得的時候請記得分享給大家,『幫助人是快樂的喔』。歡迎您在使用 debian 的過程中的任何心得分享給大家。

[轉貼]【心得】由軟碟轉跳 USB 拇指碟開機.

文章moto » 週四 7月 24, 2003 10:20 pm

作者: 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
歡迎你來到MOTO學園一起討論Debian相關問題。
在post問題前可先別忘記了以下的步驟:
1:翻一下/usr/share/doc/中是否已經有解答了?
2:閱讀一下無痛起步是否已經提到了?
3:找一下google予以解答?
4:善用學園中的"搜尋"功能,往往答案就在裡面窩。
頭像
moto
摩托學園站長
摩托學園站長
 
文章: 2808
註冊時間: 週二 9月 03, 2002 3:37 am
來自: 台北

文章訪客 » 週一 1月 02, 2006 6:24 am

我想問這些檔案要去哪裡找???
我的/cdrom沒有啊???
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 687064 2003-07-16 16:01 busybox
訪客
 

文章wsun013 » 週一 1月 02, 2006 7:43 am

這些是 kernel modules
在 /lib/modules/`uname -r`/底下
不過要是跟你所用的kernel 一起的喔
不用說不談版本
就算用不同tool chain 做出來的 module 也不相容
可以參考網上制做 knoppix 的方法嘍
------BEGIN GEEK CODE BLOCK------
Version: 3.12
GE d->++ s: a-- C+++>++++ UL>++++ P>++++ L++>++++ E---- W+ N@ o K- w++(+)
O- M- V? PS+++(+) PE++(+) Y-- PGP- t>--- 5? X+++ R- tv-(--) b+ DI? D+ G e++>++++
h+(!) r++(%) y*>++++
-------END GEEK CODE BLOCK-------
頭像
wsun013
快樂的大學生
快樂的大學生
 
文章: 784
註冊時間: 週二 9月 14, 2004 12:12 pm
來自: 紐西蘭

文章訪客 » 週一 1月 02, 2006 8:58 am

wsun013 寫:不用說不談版本
就算用不同tool chain 做出來的 module 也不相容

有些 module 是可以硬裝看看的, 並不是全都不能用...:)
訪客
 

文章wsun013 » 週一 1月 02, 2006 9:27 am

嗯嗯, 小弟突然想到自己有個driver (ADSL modem)也是硬裝的
對不起誤導訪客兄了
------BEGIN GEEK CODE BLOCK------
Version: 3.12
GE d->++ s: a-- C+++>++++ UL>++++ P>++++ L++>++++ E---- W+ N@ o K- w++(+)
O- M- V? PS+++(+) PE++(+) Y-- PGP- t>--- 5? X+++ R- tv-(--) b+ DI? D+ G e++>++++
h+(!) r++(%) y*>++++
-------END GEEK CODE BLOCK-------
頭像
wsun013
快樂的大學生
快樂的大學生
 
文章: 784
註冊時間: 週二 9月 14, 2004 12:12 pm
來自: 紐西蘭

文章訪客 » 週一 1月 02, 2006 9:32 am

wsun013 寫:這些是 kernel modules
在 /lib/modules/`uname -r`/底下
不過要是跟你所用的kernel 一起的喔
不用說不談版本
就算用不同tool chain 做出來的 module 也不相容
可以參考網上制做 knoppix 的方法嘍

uname -r是kernel版本嗎??
-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
drwxr-xr-x 2 root root 1024 2003-07-16 14:26 scsi
-rwxr-xr-x 1 root root 9185 2003-03-27 00:05 cloop.o
上面這些我都找到了
但...下面這3個還是找不到
-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
debian:/cdrom# ls static/ -l
總計 824
-rwxr-xr-x 1 root root 687064 2003-07-16 16:01 busybox
而且用whereis也找不到
我的環境是
vmware+Damn Small Linux 2.1 RC2的iso
訪客
 

文章wsun013 » 週一 1月 02, 2006 9:48 am

找不到module 會是因為kernel 沒編嗎?
可是找不到 ext3.o 就蠻奇怪的
小弟記得是在
/lib/modules/`uanme -r`/kernel/fs/ext3
下面

至於 busybox
http://packages.debian.org 找到的是這樣...
FILE PACKAGE

bin/busybox utils/busybox,shells/busybox-static
usr/lib/mindi/rootfs/bin/busybox shells/mindi-busybox
usr/lib/mkinitrd-cd/busybox admin/mkinitrd-cd
------BEGIN GEEK CODE BLOCK------
Version: 3.12
GE d->++ s: a-- C+++>++++ UL>++++ P>++++ L++>++++ E---- W+ N@ o K- w++(+)
O- M- V? PS+++(+) PE++(+) Y-- PGP- t>--- 5? X+++ R- tv-(--) b+ DI? D+ G e++>++++
h+(!) r++(%) y*>++++
-------END GEEK CODE BLOCK-------
頭像
wsun013
快樂的大學生
快樂的大學生
 
文章: 784
註冊時間: 週二 9月 14, 2004 12:12 pm
來自: 紐西蘭

文章訪客 » 週一 1月 02, 2006 12:31 pm

沒有 ext3 和 jbd,表示
1. 可能 DSL 內建 ext3 支援(直接編在核心裡面,沒做成 module)
2. 可能 DSL 不支援 ext3(其實沒差,因為 ext3 可以當成 ext2 來 mount)
3. 可能 DSL 有編入,但是光碟為了省空間把 ext3 的 module 拿掉了

DSL 預設就是使用 busybox 的,找一找一定有
訪客
 

文章訪客 » 週二 1月 03, 2006 1:06 am

busybox找到了
在/bin/busybox
但是沒看到註五
註五.所講的Config.h 檔
該怎麼用呢??
訪客
 


回到 share

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客