理论上, 哪一个插断被使用到哪个设备上都没关系。 只要两个 (或以上 )
设备不被建构成使用相同的插断即可。在 /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 设备文档的建立。