?? pcmcia-howto-5.html
字號(hào):
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">
<META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.7">
<TITLE>Linux PCMCIA HOWTO 中文版: 進(jìn)階的主題</TITLE>
<LINK HREF="PCMCIA-HOWTO-6.html" REL=next>
<LINK HREF="PCMCIA-HOWTO-4.html" REL=previous>
<LINK HREF="PCMCIA-HOWTO.html#toc5" REL=contents>
</HEAD>
<BODY>
<A HREF="PCMCIA-HOWTO-6.html">Next</A>
<A HREF="PCMCIA-HOWTO-4.html">Previous</A>
<A HREF="PCMCIA-HOWTO.html#toc5">Contents</A>
<HR>
<H2><A NAME="s5">5. 進(jìn)階的主題</A></H2>
<P>
<P>
<H2><A NAME="ss5.1">5.1 PCMCIA 設(shè)備的資源分配</A>
</H2>
<P>理論上, 哪一個(gè)插斷被使用到哪個(gè)設(shè)備上都沒關(guān)系。 只要兩個(gè) (或以上 )
設(shè)備不被建構(gòu)成使用相同的插斷即可。在 <CODE>/etc/pcmcia/config.opts</CODE>
□你可以發(fā)現(xiàn)有個(gè)地方用來(lái)排除那些被非 PCMCIA 設(shè)備所使用著的插斷。
<P>同樣地,也沒有辦法可以直接指定 I/O 位址給一個(gè) PCMCIA 卡來(lái)使用。
<CODE>/etc/pcmcia/config.opts</CODE> 檔案允許你指定可被所有的 PCMCIA
設(shè)備所使用的埠□圍, 或是排除那些會(huì)和其他設(shè)備相沖突的埠□圍。
<P>在修改了 <CODE>/etc/pcmcia/config.opts</CODE>後,你可以使用 ``<CODE>kill -HUP</CODE>''
來(lái)重新啟動(dòng) <CODE>cardmgr</CODE>。
<P>被用來(lái)監(jiān)視卡片狀態(tài)的插斷是在 <CODE>cardmgr</CODE> 處理 <CODE>/etc/pcmcia/config</CODE>
檔案之前由低階的插槽驅(qū)動(dòng)程式模組 (<CODE>i82365</CODE> 或 <CODE>tcic</CODE>) 所選擇
的。因此改變這個(gè)檔案并不會(huì)有什麼影響。要設(shè)定這個(gè)插斷,在插槽驅(qū)動(dòng)程
式被載入時(shí),設(shè)定在 <CODE>/etc/rc.d/rc.pcmcia</CODE> 內(nèi)的 <CODE>PCIC_OPTS</CODE>
變數(shù)使用 <CODE>cs_irq=</CODE> 選項(xiàng)。
<P>所有的客戶端卡片驅(qū)動(dòng)程式都有個(gè)叫做 <CODE>irq_list</CODE> 的參數(shù)。 被用來(lái)指
定哪些插斷可用試著用來(lái)配置給他們的。這些驅(qū)動(dòng)程式選項(xiàng)應(yīng)該被設(shè)定在你
的 <CODE>/etc/pcmcia/config</CODE> 檔案□。例如:
<P>
<BLOCKQUOTE><CODE>
<PRE>
device "serial_cs"
module "serial_cs" opts "irq_list=8,12"
...
</PRE>
</CODE></BLOCKQUOTE>
<P>會(huì)指定串列埠驅(qū)動(dòng)程式只使用 irq 8 或 irq 12。 不管 <CODE>irq_list</CODE>
的設(shè)定如何, 卡片服務(wù)程式 Card Services 絕不會(huì)分配已被其他設(shè)備所使
用了的插斷,或是在建構(gòu)檔□被排除的插斷。
<P>
<H2><A NAME="ss5.2">5.2 我怎樣才能為家庭及工作的使用做各別的設(shè)備設(shè)定呢?</A>
</H2>
<P>我們可以很簡(jiǎn)單地使用 PCMCIA ``scheme'' 支援來(lái)達(dá)成。 使用兩種不同的
建構(gòu) schemes,分別叫 ``home'' 及 ``work''。 以下是個(gè)有 scheme 指定
的設(shè)定的 <CODE>network.opts</CODE> 手稿□例:
<P>
<BLOCKQUOTE><CODE>
<PRE>
case "$ADDRESS" in
work,*,*,*)
# definitions for network card in work scheme
...
;;
home,*,*,*|default,*,*,*)
# definitions for network card in home scheme
...
;;
esac
</PRE>
</CODE></BLOCKQUOTE>
<P>PCMCIA 設(shè)備位址的首要部份都是建構(gòu) scheme。 在這個(gè)例子中, 第二個(gè)
``case'' 句子會(huì)從 ``homee'' 和 ``default'' schemes 中挑選一個(gè)。 因
此,不管任何理由 scheme 并沒被設(shè)定了,內(nèi)定值是 ``home'' 設(shè)定。
<P>現(xiàn)在,要在二個(gè)設(shè)定集□頭挑選一個(gè),可執(zhí)行:
<P>
<BLOCKQUOTE><CODE>
<PRE>
cardctl scheme home
</PRE>
</CODE></BLOCKQUOTE>
<P>或者是
<P>
<BLOCKQUOTE><CODE>
<PRE>
cardctl scheme work
</PRE>
</CODE></BLOCKQUOTE>
<P><CODE>cardctl</CODE> 命令相當(dāng)於關(guān)掉所有的卡片後再重啟動(dòng)它們。 不管 PCMCIA
系統(tǒng)是否被載入,這個(gè)命令都可安全地被執(zhí)行。但是如果你在當(dāng)時(shí)正在使用
其他的 PCMCIA 設(shè)備時(shí)這個(gè)命令可能會(huì)失敗。 (雖然他們的建構(gòu)并不完全依
靠 scheme 的設(shè)定。 )。
<P>要知道目前 PCMCIA scheme 的設(shè)定,執(zhí)行:
<P>
<BLOCKQUOTE><CODE>
<PRE>
cardctl scheme
</PRE>
</CODE></BLOCKQUOTE>
<P>
<H2><A NAME="ss5.3">5.3 從 PCMCIA 設(shè)備開機(jī)</A>
</H2>
<P>
<P>要在一個(gè) PCMCIA 設(shè)備上做個(gè)檔案系統(tǒng)需要耍個(gè)小把戲可行, 因?yàn)?Linux
的 PCMCIA 系統(tǒng)并沒有設(shè)計(jì)成連接到核心程式上。它的主要元件,可載入式
核心模組以及使用者模式的 cardmgr 精靈是仰賴在一個(gè)已經(jīng)在執(zhí)行的系統(tǒng)
上。核心的 ``initrd'' 以允許 Linux 使用一個(gè)有最小化的根
映像檔、載入驅(qū)動(dòng)程式的暫時(shí)性的動(dòng)態(tài)記憶體磁碟來(lái)開機(jī),然後再重新掛上
一個(gè)不同的根檔案系統(tǒng)。這個(gè)暫時(shí)的根系統(tǒng)可以建構(gòu) PCMCIA 設(shè)備,然後再
把它重新掛成一個(gè)根系統(tǒng)。
<P>initrd 映像檔絕對(duì)必須存放在一個(gè)可開機(jī)的設(shè)備上: 一般來(lái)說(shuō)這就無(wú)法放
到 PCMCIA 設(shè)備上了。這是因?yàn)?BIOS 的限制,可不是核心的限制。在這□
, 能夠分辨出 `` 可開機(jī)的 (boot-able)'' 設(shè)備 (例如,任何可以做開機(jī)
使用的設(shè)備 ) 與 `` 可做根系統(tǒng)的 (root-able)'' 設(shè)備 (例如,可以被掛
入成為根系統(tǒng)的設(shè)備 ) 的不同處也是很重要的。 `` 可開機(jī)的
(Boot-able) '' 設(shè)備是由 BIOS 所決定的, 通常是內(nèi)部軟碟機(jī)和硬式磁碟
機(jī)。`` 可做根系統(tǒng)的 (root-able)'' 設(shè)備是任何可以在被載入即即被核心
所支援的區(qū)塊設(shè)備。 initrd 的功能可使更多的設(shè)備變成 `` 可做根系統(tǒng)的
(root-able)'',而非 ``可開機(jī)的 (boot-able)''。
<P>有些 Linux 供應(yīng)版本允許安裝到 PCMCIA SCSI 卡接著的設(shè)備上。使得它們
無(wú)意地多出了可支援從 PCMCIA SCSI CD-ROM 設(shè)備來(lái)安裝的邊際效應(yīng)。
然而, 到目前為止, 并沒有任何 Linux 安裝工具支援建構(gòu)一個(gè)可以從
PCMCIA 根檔案系統(tǒng)上開機(jī)到 Linux 的合適 ``initrd''。 設(shè)立一個(gè)以
PCMCIA 根檔案的 Linux 系統(tǒng)需要您使用其他的 Linux 系統(tǒng)來(lái)產(chǎn)生一個(gè)
``initrd'' 映像檔案。如果沒有可用的其他 Linux 系統(tǒng),另一個(gè)替代方法
是做最小安裝到非 PCMCIA 磁碟上,建立一個(gè) initrd 映像檔,然後再重新
安裝到 PCMCIA 目地設(shè)備上。
<P>在 Linux Bootdisk-HOWTO □有一些關(guān)於設(shè)定開機(jī)磁碟片的一般資訊,但卻
沒有任何有關(guān)於 initrd 的資訊。 initrd 的主要文件被放在最新的核心程
式碼供應(yīng)版本□頭, 在 <CODE>linux/Documentation/initrd.txt</CODE>。
在開始前,你應(yīng)該要先讀一下這份文件。 對(duì)於 <CODE>lilo</CODE> 的熟悉也是有助
益的。 要使用 initrd 也需要你已有個(gè)將 <CODE>CONFIG_BLK_DEV_RAM</CODE> 和
<CODE>CONFIG_BLK_DEV_INITRD</CODE> 功能打開後所編譯出來(lái)的核心。
<P>這是個(gè)高等建構(gòu)技術(shù), 需要您對(duì) Linux 以及 PCMCIA 系統(tǒng)有一定程度的熟
悉度。請(qǐng)確認(rèn)在您閱讀完所有相關(guān)的文件後再開始。下面的 `` 食譜 '' 應(yīng)
該是可行的, 但是一旦不依照□例來(lái)做的話, 就會(huì)很快地將你推向未知及
`` 不被支援的 '' 地方,那你就得自己來(lái)的。
<P>這方法需要你一定要使用 PCMCIA 驅(qū)動(dòng)程式 2.9.5 或最新的版本才可以。
舊的 PCMCIA 套件或是個(gè)別的元件并不能在 initrd □使用。請(qǐng)不要將不同
的版本的元件混合了。
<P>
<H3>pcinitrd 輔助員手稿</H3>
<P><CODE>pcinitrd</CODE> 手稿用來(lái)建立一個(gè)使用 PCMCIA 根磁區(qū)分割來(lái)啟動(dòng) Linux
的基本 initrd 映像檔。 該映像檔□包含一個(gè)最小的目錄層級(jí)結(jié)構(gòu)
、 以及有用的設(shè)備檔案、一些二進(jìn)位檔案、共用程式庫(kù)檔以及一套 PCMCIA
驅(qū)動(dòng)程式模組。 當(dāng)你執(zhí)行 <CODE>pcinitrd</CODE> 時(shí),要指定要要包含進(jìn)去映像檔
□面的驅(qū)動(dòng)程式模組名稱。 而主要 PCMCIA 核心元件 <CODE>pcmcia_core</CODE>
及 <CODE>ds</CODE>會(huì)被自動(dòng)地包含進(jìn)去。
<P>例如,假設(shè)你的筆記電腦使用一個(gè) i82365 同容的 PCMCIA 主控制器,而你
想從一個(gè)接著 Adaptec SlimSCSI 卡而裝有根檔案系統(tǒng)的硬碟上啟動(dòng) Linux
。你可以建立一個(gè)合適的 initrd 映像檔,方法如下:
<P>
<BLOCKQUOTE><CODE>
<PRE>
pcinitrd -v initrd pcmcia/i82365.o pcmcia/aha152x_cs.o
</PRE>
</CODE></BLOCKQUOTE>
<P>來(lái)自訂 initrd 啟使排程,你可以用下面的命令來(lái)使用 ``loopback'' 設(shè)備
來(lái)掛上該映像檔案:
<P>
<BLOCKQUOTE><CODE>
<PRE>
mount -o loop -t ext2 initrd /mnt
</PRE>
</CODE></BLOCKQUOTE>
<P>然後編修 <CODE>linuxrc</CODE> 手稿。 PCMCIA 建構(gòu)的檔案會(huì)被安裝到映像檔案□
頭的 <CODE>/etc</CODE> 內(nèi), 當(dāng)然你也可以自已設(shè)定。 細(xì)節(jié)請(qǐng)看
<CODE>pcinitrd</CODE> 的 man 頁(yè)。
<P>
<H3>建立一個(gè) initrd 開機(jī)軟碟片</H3>
<P>
<P>在建立了 <CODE>pcinitrd</CODE> 映像檔後, 你可以利用拷貝核心的方式來(lái)做一片
可開機(jī)的磁碟片, 并把被壓縮的 initrd 映像檔、支援給 <CODE>lilo</CODE> 使用
的檔案到一張空白磁碟片上。 下面的列子, 我們假設(shè)我們需要的 PCMCIA
根設(shè)備是 <CODE>/dev/sda1</CODE>:
<P>
<BLOCKQUOTE><CODE>
<PRE>
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
</PRE>
</CODE></BLOCKQUOTE>
<P>建立一個(gè)包含下面內(nèi)容的 <CODE>/mnt/etc/lilo.conf</CODE> 檔案:
<P>
<BLOCKQUOTE><CODE>
<PRE>
boot=/dev/fd0
compact
image=/vmlinuz
label=linux
initrd=/initrd
read-only
root=/dev/sda1
</PRE>
</CODE></BLOCKQUOTE>
<P>最後,執(zhí)行 lilo 如下:
<P>
<BLOCKQUOTE><CODE>
<PRE>
lilo -r /mnt
</PRE>
</CODE></BLOCKQUOTE>
<P>當(dāng) <CODE>lilo</CODE> 被執(zhí)行時(shí)配合使用 <CODE>-r</CODE> 選項(xiàng),它會(huì)做所有與被指定的根
目錄的相關(guān)動(dòng)作。 在 <CODE>/mnt/dev</CODE> □建立設(shè)備檔案的理由是,
當(dāng)它是在替代的根目錄模式下 <CODE>lilo</CODE> 并無(wú)法使用在 <CODE>/dev</CODE> 內(nèi)
的檔案。
<P>
<H3>安裝 initrd 映象檔到非Linux 磁碟內(nèi)</H3>
<P>initrd 功能一般都使用在當(dāng)內(nèi)部的硬碟機(jī)被分派給其他的作業(yè)系統(tǒng)使用時(shí)
。 Linux 核心以及 initrd 映像檔可以被放在非 Linux 的磁區(qū)分割內(nèi),
而且 <CODE>lilo</CODE> 或是 <CODE>LOADLIN</CODE> 可以被設(shè)定由這些映像檔來(lái)開啟
Linux 系統(tǒng)。
<P>假設(shè)你有個(gè)已被建構(gòu)好合適的根設(shè)備,且 initrd 映像檔被建立在另外的系
統(tǒng)上了,啟動(dòng) Linux 系統(tǒng)的最容易方法是使用 <CODE>LOADLIN</CODE>,如下:
<P>
<BLOCKQUOTE><CODE>
<PRE>
LOADLIN <kernel> initrd=<initrd-image>
</PRE>
</CODE></BLOCKQUOTE>
<P>一旦你可以在你的目標(biāo)機(jī)器上啟動(dòng) Linux, 你就可以安裝 <CODE>lilo</CODE> 來(lái)允
許直接地啟動(dòng) Linux 了。 例如,假設(shè) <CODE>/dev/hda1</CODE> 是個(gè)非 Linux
的目標(biāo)磁區(qū)分割,且 <CODE>/mnt</CODE> 可以被用做為掛入點(diǎn)。 首先,在目標(biāo)
磁區(qū)分割上建立一個(gè)放 Linux 檔案的子目錄:
<P>
<BLOCKQUOTE><CODE>
<PRE>
mount /dev/hda1 /mnt
mkdir /mnt/linux
cp [kernel-image] /mnt/linux/vmlinuz
cp [initrd-image] /mnt/linux/initrd
</PRE>
</CODE></BLOCKQUOTE>
<P>在這個(gè)例子中, 假設(shè) <CODE>/dev/sda1</CODE> 是我們要做為 Linux 根分割的
磁碟, 它是個(gè)經(jīng)由 PCMCIA SCSI 卡所掛上的 SCSI 硬碟機(jī)。 要安裝
<CODE>lilo</CODE>,請(qǐng)建立一個(gè)有以下內(nèi)容的 <CODE>lilo.conf</CODE> 檔:
<P>
<BLOCKQUOTE><CODE>
<PRE>
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
</PRE>
</CODE></BLOCKQUOTE>
<P>在 <CODE>boot=</CODE> 這行□說(shuō)要在指定的設(shè)備之主開機(jī)記錄 MBR( master boot
record) □安裝開機(jī)載入程式。 <CODE>root=</CODE> 這行指出在載入 initrd 映像
檔後需要使用的根檔案系統(tǒng),如果核心映像檔□已這麼建構(gòu)了那就不需這麼
做了。 在 <CODE>other=</CODE> 那行是用來(lái)描述說(shuō)有其他的作業(yè)系統(tǒng)被安裝在
<CODE>/dev/hda1</CODE> □。
<P>要安裝這個(gè)例子□的 <CODE>lilo</CODE> ,使用:
<P>
<BLOCKQUOTE><CODE>
<PRE>
lilo -C lilo.conf
</PRE>
</CODE></BLOCKQUOTE>
<P>記得在這個(gè)案子□,<CODE>lilo.conf</CODE> 檔案使用了包括 <CODE>/mnt</CODE> 在內(nèi)
的絕對(duì)位址。我用這個(gè)例子的原因是目標(biāo)檔案系統(tǒng)并不一定支援使用 <CODE>boot=</CODE>
和 <CODE>root=</CODE> 選項(xiàng)來(lái)建立 Linux 設(shè)備檔案的建立。
<P>
<HR>
<A HREF="PCMCIA-HOWTO-6.html">Next</A>
<A HREF="PCMCIA-HOWTO-4.html">Previous</A>
<A HREF="PCMCIA-HOWTO.html#toc5">Contents</A>
</BODY>
</HTML>
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -