理論上, 哪一個插斷被使用到哪個設備上都沒關係。 只要兩個 (或以上 )
設備不被建構成使用相同的插斷即可。在 /etc/pcmcia/config.opts
裏你可以發現有個地方用來排除那些被非 PCMCIA 設備所使用著的插斷。
同樣地,也沒有辦法可以直接指定 I/O 位址給一個 PCMCIA 卡來使用。
/etc/pcmcia/config.opts
檔案允許你指定可被所有的 PCMCIA
設備所使用的埠範圍, 或是排除那些會和其他設備相衝突的埠範圍。
在修改了 /etc/pcmcia/config.opts
後,你可以使用 ``kill -HUP
''
來重新啟動 cardmgr
。
被用來監視卡片狀態的插斷是在 cardmgr
處理 /etc/pcmcia/config
檔案之前由低階的插槽驅動程式模組 (i82365
或 tcic
) 所選擇
的。因此改變這個檔案並不會有什麼影響。要設定這個插斷,在插槽驅動程
式被載入時,設定在 /etc/rc.d/rc.pcmcia
內的 PCIC_OPTS
變數使用 cs_irq=
選項。
所有的客戶端卡片驅動程式都有個叫做 irq_list
的參數。 被用來指
定哪些插斷可用試著用來配置給他們的。這些驅動程式選項應該被設定在你
的 /etc/pcmcia/config
檔案裏。例如:
device "serial_cs"
module "serial_cs" opts "irq_list=8,12"
...
會指定串列埠驅動程式只使用 irq 8 或 irq 12。 不管 irq_list
的設定如何, 卡片服務程式 Card Services 絕不會分配已被其他設備所使
用了的插斷,或是在建構檔裏被排除的插斷。
我們可以很簡單地使用 PCMCIA ``scheme'' 支援來達成。 使用兩種不同的
建構 schemes,分別叫 ``home'' 及 ``work''。 以下是個有 scheme 指定
的設定的 network.opts
手稿範例:
case "$ADDRESS" in
work,*,*,*)
# definitions for network card in work scheme
...
;;
home,*,*,*|default,*,*,*)
# definitions for network card in home scheme
...
;;
esac
PCMCIA 設備位址的首要部份都是建構 scheme。 在這個例子中, 第二個 ``case'' 句子會從 ``homee'' 和 ``default'' schemes 中挑選一個。 因 此,不管任何理由 scheme 並沒被設定了,內定值是 ``home'' 設定。
現在,要在二個設定集裏頭挑選一個,可執行:
cardctl scheme home
或者是
cardctl scheme work
cardctl
命令相當於關掉所有的卡片後再重啟動它們。 不管 PCMCIA
系統是否被載入,這個命令都可安全地被執行。但是如果你在當時正在使用
其他的 PCMCIA 設備時這個命令可能會失敗。 (雖然他們的建構並不完全依
靠 scheme 的設定。 )。
要知道目前 PCMCIA scheme 的設定,執行:
cardctl scheme
要在一個 PCMCIA 設備上做個檔案系統需要耍個小把戲可行, 因為 Linux 的 PCMCIA 系統並沒有設計成連接到核心程式上。它的主要元件,可載入式 核心模組以及使用者模式的 cardmgr 精靈是仰賴在一個已經在執行的系統 上。核心的 ``initrd'' 以允許 Linux 使用一個有最小化的根 映像檔、載入驅動程式的暫時性的動態記憶體磁碟來開機,然後再重新掛上 一個不同的根檔案系統。這個暫時的根系統可以建構 PCMCIA 設備,然後再 把它重新掛成一個根系統。
initrd 映像檔絕對必須存放在一個可開機的設備上: 一般來說這就無法放 到 PCMCIA 設備上了。這是因為 BIOS 的限制,可不是核心的限制。在這裏 , 能夠分辨出 `` 可開機的 (boot-able)'' 設備 (例如,任何可以做開機 使用的設備 ) 與 `` 可做根系統的 (root-able)'' 設備 (例如,可以被掛 入成為根系統的設備 ) 的不同處也是很重要的。 `` 可開機的 (Boot-able) '' 設備是由 BIOS 所決定的, 通常是內部軟碟機和硬式磁碟 機。`` 可做根系統的 (root-able)'' 設備是任何可以在被載入即即被核心 所支援的區塊設備。 initrd 的功能可使更多的設備變成 `` 可做根系統的 (root-able)'',而非 ``可開機的 (boot-able)''。
有些 Linux 供應版本允許安裝到 PCMCIA SCSI 卡接著的設備上。使得它們 無意地多出了可支援從 PCMCIA SCSI CD-ROM 設備來安裝的邊際效應。 然而, 到目前為止, 並沒有任何 Linux 安裝工具支援建構一個可以從 PCMCIA 根檔案系統上開機到 Linux 的合適 ``initrd''。 設立一個以 PCMCIA 根檔案的 Linux 系統需要您使用其他的 Linux 系統來產生一個 ``initrd'' 映像檔案。如果沒有可用的其他 Linux 系統,另一個替代方法 是做最小安裝到非 PCMCIA 磁碟上,建立一個 initrd 映像檔,然後再重新 安裝到 PCMCIA 目地設備上。
在 Linux Bootdisk-HOWTO 裏有一些關於設定開機磁碟片的一般資訊,但卻
沒有任何有關於 initrd 的資訊。 initrd 的主要文件被放在最新的核心程
式碼供應版本裏頭, 在 linux/Documentation/initrd.txt
。
在開始前,你應該要先讀一下這份文件。 對於 lilo
的熟悉也是有助
益的。 要使用 initrd 也需要你已有個將 CONFIG_BLK_DEV_RAM
和
CONFIG_BLK_DEV_INITRD
功能打開後所編譯出來的核心。
這是個高等建構技術, 需要您對 Linux 以及 PCMCIA 系統有一定程度的熟 悉度。請確認在您閱讀完所有相關的文件後再開始。下面的 `` 食譜 '' 應 該是可行的, 但是一旦不依照範例來做的話, 就會很快地將你推向未知及 `` 不被支援的 '' 地方,那你就得自己來的。
這方法需要你一定要使用 PCMCIA 驅動程式 2.9.5 或最新的版本才可以。 舊的 PCMCIA 套件或是個別的元件並不能在 initrd 裏使用。請不要將不同 的版本的元件混合了。
pcinitrd
手稿用來建立一個使用 PCMCIA 根磁區分割來啟動 Linux
的基本 initrd 映像檔。 該映像檔裏包含一個最小的目錄層級結構
、 以及有用的設備檔案、一些二進位檔案、共用程式庫檔以及一套 PCMCIA
驅動程式模組。 當你執行 pcinitrd
時,要指定要要包含進去映像檔
裏面的驅動程式模組名稱。 而主要 PCMCIA 核心元件 pcmcia_core
及 ds
會被自動地包含進去。
例如,假設你的筆記電腦使用一個 i82365 同容的 PCMCIA 主控制器,而你 想從一個接著 Adaptec SlimSCSI 卡而裝有根檔案系統的硬碟上啟動 Linux 。你可以建立一個合適的 initrd 映像檔,方法如下:
pcinitrd -v initrd pcmcia/i82365.o pcmcia/aha152x_cs.o
來自訂 initrd 啟使排程,你可以用下面的命令來使用 ``loopback'' 設備 來掛上該映像檔案:
mount -o loop -t ext2 initrd /mnt
然後編修 linuxrc
手稿。 PCMCIA 建構的檔案會被安裝到映像檔案裏
頭的 /etc
內, 當然你也可以自已設定。 細節請看
pcinitrd
的 man 頁。
在建立了 pcinitrd
映像檔後, 你可以利用拷貝核心的方式來做一片
可開機的磁碟片, 並把被壓縮的 initrd 映像檔、支援給 lilo
使用
的檔案到一張空白磁碟片上。 下面的列子, 我們假設我們需要的 PCMCIA
根設備是 /dev/sda1
:
mke2fs /dev/fd0
mount /dev/fd0 /mnt
mkdir /mnt/etc /mnt/boot /mnt/dev
cp -a /dev/fd0 /dev/sda1 /mnt/dev
cp [kernel-image] /mnt/vmlinuz
gzip < [initrd-image] > /mnt/initrd
建立一個包含下面內容的 /mnt/etc/lilo.conf
檔案:
boot=/dev/fd0
compact
image=/vmlinuz
label=linux
initrd=/initrd
read-only
root=/dev/sda1
最後,執行 lilo 如下:
lilo -r /mnt
當 lilo
被執行時配合使用 -r
選項,它會做所有與被指定的根
目錄的相關動作。 在 /mnt/dev
裏建立設備檔案的理由是,
當它是在替代的根目錄模式下 lilo
並無法使用在 /dev
內
的檔案。
initrd 功能一般都使用在當內部的硬碟機被分派給其他的作業系統使用時
。 Linux 核心以及 initrd 映像檔可以被放在非 Linux 的磁區分割內,
而且 lilo
或是 LOADLIN
可以被設定由這些映像檔來開啟
Linux 系統。
假設你有個已被建構好合適的根設備,且 initrd 映像檔被建立在另外的系
統上了,啟動 Linux 系統的最容易方法是使用 LOADLIN
,如下:
LOADLIN <kernel> initrd=<initrd-image>
一旦你可以在你的目標機器上啟動 Linux, 你就可以安裝 lilo
來允
許直接地啟動 Linux 了。 例如,假設 /dev/hda1
是個非 Linux
的目標磁區分割,且 /mnt
可以被用做為掛入點。 首先,在目標
磁區分割上建立一個放 Linux 檔案的子目錄:
mount /dev/hda1 /mnt
mkdir /mnt/linux
cp [kernel-image] /mnt/linux/vmlinuz
cp [initrd-image] /mnt/linux/initrd
在這個例子中, 假設 /dev/sda1
是我們要做為 Linux 根分割的
磁碟, 它是個經由 PCMCIA SCSI 卡所掛上的 SCSI 硬碟機。 要安裝
lilo
,請建立一個有以下內容的 lilo.conf
檔:
boot=/dev/hda
map=/mnt/linux/map
compact
image=/mnt/linux/vmlinuz
label=linux
root=/dev/sda1
initrd=/mnt/linux/initrd
read-only
other=/dev/hda1
table=/dev/hda
label=windows
在 boot=
這行裏說要在指定的設備之主開機記錄 MBR( master boot
record) 裏安裝開機載入程式。 root=
這行指出在載入 initrd 映像
檔後需要使用的根檔案系統,如果核心映像檔裏已這麼建構了那就不需這麼
做了。 在 other=
那行是用來描述說有其他的作業系統被安裝在
/dev/hda1
裏。
要安裝這個例子裏的 lilo
,使用:
lilo -C lilo.conf
記得在這個案子裏,lilo.conf
檔案使用了包括 /mnt
在內
的絕對位址。我用這個例子的原因是目標檔案系統並不一定支援使用 boot=
和 root=
選項來建立 Linux 設備檔案的建立。