linux启动参数详解

来源:互联网 发布:冈仁波齐神秘事件知乎 编辑:程序博客网 时间:2024/05/18 03:38

http://blog.tianya.cn/blogger/post_show.asp?BlogID=942373&PostID=9320620

Linux内核在启动的时候,能接收某些命令行选项或启动时参数。当内核不能识别某些硬件进而不能设置硬件参数或者为了避免内核更改某些参数的值,可以通过这种方式手动将这些参数传递给内核。 

  
  如果不使用启动管理器,比如直接从BIOS或者把内核文件用“cp zImage /dev/fd0”等方法直接从设备启动,就不能给内核传递参数或选项--这也许是我们使用引导管理器比如LILO的好处之一吧。 
  
  Linux的内核参数是以空格分开的一个字符串列表,通常具有如下形式: 
  
  name[=value_1][,value_2]...[,value_10] 
  
  “name”是关键字,内核用它来识别应该把“关键字”后面的值传递给谁,也就是如何处理这个值,是传递给处理例程还是作为环境变量或者抛给“init”。值的个数限制为10,你可以通过再次使用该关键字使用超过10个的参数。 
  
  首先,内核检查关键字是不是 `root=',`nfsroot=', `nfsaddrs=', `ro', `rw', `debug'或 `init',然后内核在bootsetups数组里搜索于该关键字相关联的已注册的处理函数,如果找到相关的已注册的处理函数,则调用这些函数并把关键字后面的值作为参数传递给这些函数。比如你在启动时设置参数name=a,b,c,d,内核搜索bootsetups数组,如果发现“name”已注册,则调用“name”的设置函数如name_setup(),并把a,b,c,d传递给name_setup()执行。 
  
  所有型如“name=value”参数,如果没有被上面所述的设置函数接收,将被解释为系统启动后的环境变量,比如“TERM=vt100”就会被作为一个启动时参数。 
  
  所有没有被内核设置函数接收也没又被设置成环境变量的参数都将留给init进程处理,比如“single”。 
  
  常用的设备无关启动时参数。 
  
  1、init=... 
  
  设置内核执行的初始化进程名,如果该项没有设置,内核会按顺序尝试/etc/init, 
  
  /bin/init,/sbin/init, /bin/sh,如果所有的都没找到,内核会抛出 kernel panic:的错误。 
  
  2、nfsaddrs=... 
  
  设置从网络启动时NFS的启动地址,已字符串的形式给出。 
  
  3、nfsroot=... 
  
  设置网络启动时的NFS根名字,如果该字符串不是以 "/"、","、"."开始,默认指向“/tftp-boot”。 
  
  以上2、3在无盘站中很有用处。 
  
  4、no387 
  
  该选项仅当定义了CONFIG_BUGi386时才能用,某些i387协处理器芯片使用32位的保护模式时会有BUG,比如一些浮点运算,使用这个参数可以让内核忽略387协处理器。 
  
  5、no-hlt 
  
  该选项仅当定义了CONFIG_BUGi386时才能用,一些早期的i486DX-100芯片在处理“hlt”指令时会有问题,执行该指令后不能可靠的返回操作系统,使用该选项,可以让linux系统在CPU空闲的时候不要挂起CPU。 
  
  6、root=... 
  
  该参数告诉内核启动时使用哪个设备作为根文件系统。比如可以指定根文件为hda8:root=/dev/hda8。 
  
  7、ro和rw 
  
  ro参数告诉内核以只读方式加载根文件系统,以便进行文件系统完整性检查,比如运行fsck;rw参数告诉内核以读写方式加载根文件系统,这是默认值。 
  
  8、reserve=... 
  
  保留端口号。格式:reserve=iobase,extent[,iobase,extent]...,用来保护一定区域的I/O端口不被设备驱动程序自动探测。在某些机器上,自动探测会失败,或者设备探测错误或者不想让内核初始化设备时会用到该参数;比如: reserve=0x300,32 device=0x300,除device=0x300外所有设备驱动不探测 0x300-0x31f范围的I/O端口。 
  
  9、mem=... 
  
  限制内核使用的内存数量。早期BIOS设计为只能识别64M以下的内存,如果你的内存数量大于64M,你可以指明,如果你指明的数量超过了实际安装的内存数量,系统崩溃是迟早的事情。如:mem=0x1000000意味着有16M内存,如果是mem=0x6000000,就是96M内存了。 
  
  注意:很多机型把部分内存作为BIOS的映射,所以你在指定内存大小的时候一定要预留空间。你也可以在 pentium或者更新的CPU上使用mem=nopentium关闭4M的页表,这要在内核配置时申明。 
  
  10、panic=N 
  
  默认情况,内核崩溃--kernel panic 后会宕机而不会重启,你可以设置宕机多少秒之后重启机器;也可以在/proc/sys/kernel/panic文件里设置。 
  
  11、reboot=[warm|cold][,[bios|hard]] 
  
  该选项仅当定义了CONFIG_BUGi386时才能用。2.0.22的内核重启默认为cool reboot,warm reboot 更快,使用"reboot=bios"可以继承bios的设置。 
  
  12、nosmp 和 maxcpus=N 
  
  仅当定义了 __SMP__,该选项才可用。可以用来禁用多CPU或者指明最多支持的CPU个数。 
  
  内核开发和调试的启动时参数 
  
  这些参数主要用在内核的开发和调试上,如果你不进行类似的工作,你可以简单的跳过本小节。 
  
  1、debug 
  
  linux的日志级别比较多(详细信息可以参看linux/kernel.h),一般地,日志的守护进程klogd只把比DEBUG级别高的日志写进磁盘;如果使用该选项,klogd也把内核的DEBUG信息写进日志。 
  
  2、profile=N 
  
  在做内核开发的时候,如果想清楚的知道内核在什么地方耗用了多少CPU的时钟周期,可以使用核心的分析函数设置变量prof_shift为非0值,有两种方式可以实现:一种是在编译时指定,另一种就是通过“profile=”来指定; 他给出了一个相当于最小单位--即时钟周期;系统在执行内核代码的时候, profile[address >;>; prof_shift]的值就会累加,你也可以从 /proc/profile得到关于它的一些信息。 
  
  3、swap=N1,N2,N3,N4,N5,N6,N7,N8 
  
  设置内核交换算法的八个参数:max_page_age, page_advance, page_decline,page_initial_age, age_cluster_fract, age_cluster_min, pageout_weight,bufferout_weight。 
  
  4、buff=N1,N2,N3,N4,N5,N6 
  
  设置内核缓冲内存管理的六个参数:max_buff_age, buff_advance, buff_decline,buff_initial_age, bufferout_weight, buffermem_grace。 
  
  使用 RAMDISK的参数 
  
  (仅当内核配置并编译了 CONFIG_BLK_DEV_RAM)。一般的来说,使用ramdisk并不是一件好事,系统自己会更加有效的使用可用的内存;但是,在启动或者制作启动盘时,使用ramdisk可以很方便的装载软盘等设备上的映象(尤其是安装程序、启动过程中),因为在正真使用物理磁盘之前,必须要加载一些必要的模块,比如文件系统模块,scsi驱动等(可以参见我的initrd-x.x.x.img文件分析-制作安装程序不支持的根文件系统)。 
  
  早期的ramdisk(比如1.3.48的核心)是静态分配的,必须以ramdisk=N来指定ramdisk的大小;现在ramdisk可以动态增加。一共有四个参数,两个布尔型,两个整形。 
  
  1、load_ramdisk=N 
  
  如果N=1,就加载ramdisk;如果N=0,就不加载ramdisk;默认值为0。 
  
  2、prompt_ramdisk=N 
  
  N=1,提示插入软盘;N=0,不提示插入软盘;默认为1。 
  
  3、ramdisk_size=N或者ramdisk=N 
  
  设定ramdisk的最大值为N KB,默认为4096KB。 
  
  4、ramdisk_start=N 
  
  设置ramdisk的开始块号为N,当ramdisk有内核的映象文件是需要这个参数。 
  
  5、noinitrd 
  
  (仅当内核配置了选项 CONFIG_BLK_DEV_RAM和CONFIG_BLK_DEV_INITRD)现在的内核都可以支持initrd了,引导进程首先装载内核和一个初始化的ramdisk,然后内核将initrd转换成普通的ramdisk,也就是读写模式的根文件系统设备。然后linuxrc执行,然后装载真正的根文件系统,之后ramdisk被卸载,最后执行启动序列,比如/sbin/init。 
  
  选项noinitrd告诉内核不执行上面的步骤,即使内核编译了initrd,而是把initrd的数据写到 /dev/initrd,只是这是一个一次性的设备。(T002) 


2. 启动提示参数概观

这一节介绍一些可以用来传递启动时期参数给核心本身的软件范例。也给你有关这些参数系如何被处理,启动参数有什么样的限制,以及它们如何被转送到各个适当设备的观念。 

有一点很重要得注意的是在启动参数中不应该使用空白,只有在各别的参数之间可以。单一参数其值的列表(A list of values)是在各值之间以逗号格开的,再一次,没有任何空白。参见下面的范例。 



--------------------------------------------------------------------------------

ether=9,0x300,0xd0000,0xd4000,eth0 root=/dev/hda1
*RIGHT*
ether = 9, 0x300, 0xd0000, 0xd4000, eth0 root = /dev/hda1
*WRONG*


--------------------------------------------------------------------------------


2.1 LILO (LInux LOader) 

最常用的是 Werner Almesberger 所写的 LILO(LInux LOader) 程序。它有能力启动不同的核心,而且配置信息存放在一个纯文本文件里。大部份的发行套件都附有 LILO 作为缺省的启动载入程序(boot-loader)。 LILO 可以一视同仁地启动 DOS, OS/2, Linux, FreeBSD 等等,而且相当有弹性。 

在你开机之后,典型的配置会让 LILO 停住并印出 LILO:。然后等个几秒看看使用者有没有输入任何选项,没有的话就启动缺省的系统。在 LILO 配置文件里典型的系统标签是 linux 以及 backup 和 msdos。如果你想要输入启动参数,可以打在这,在输入你要 LILO 启动的系统之标签后面,像下面这个范例所显示的。 



--------------------------------------------------------------------------------

LILO: linux root=/dev/hda1


--------------------------------------------------------------------------------

LILO 随附有绝佳的文件,而且为了这里所讨论的启动参数之使用,当你想要把启动时期参数加到 LILO 配置文件里永久使用时 LILO 的 append= 指令就非常重要。只要简单地在 /etc/lilo.conf 档中加入像 append = "foo=bar" 这样的东东即可。可以加在该档的最前面,使它对每一节区(section)都生效,或是加在某 image= 节区里使它对该节区生效。请参阅 LILO 文件里更完整的说明。 


2.2 LoadLin 

另一个常用的 Linux 载入程序 `LoadLin' 则是一支有能力从 DOS 提示符号(prompt)下启动 Linux 核心(可以给予启动参数)的 DOS 程序,假如某些系统资源可用的话就行。这对使用 DOS 并想从 DOS 下启动进入 Linux 的人而言很好用。 

如果你拥有一些需要使用其所提供的 DOS 驱动程序来初使化以进入可用状态 (known state)的硬件那么它叶丝谲有用。一个常见的例子是需要使用 DOS 驱动程序设定(twiddle) 几个神秘的暂存器使它进入声霸卡兼容模式的”声霸卡兼容”音效卡。启动 DOS 与所附的驱动程序,然后从 DOS 提示符号下使用 LOADLIN.EXE 载入 Linux 以避免重新启动(reboot)会重置(reset)该卡。如此该卡维持在声霸卡兼容模式也就能在 Linux 下使用。 

还有一些其它程序可以用来启动 Linux。完整的列表请找找在你当地 Linux 文件传输映设节点里的程序,在 system/Linux-boot/ 下。 


2.3 ``rdev'' 公用程序 

核心本身里面的数个比特存有少数几个核心启动参数的缺省值。在大部份的系统里安装有一支称为 rdev 的公用程序知道这些值在那里,以及如何改变它们。它也能改变另外一些没有相对之核心启动参数的东西,像是缺省的显示模式(video mode)。 

此 rdev 公用程序通常也另称(aliased to) swapdev, ramsize, vidmode 以及 rootflags。它能够改变五种东西,分别是根目录设备(root device),置换设备(swap device),内存磁盘(RAM disk)之参数,缺省的显示模式,及根目录设备的存取设定(readonly/readwrite)。 

更多有关 rdev 的信息可以藉由输入 rdev -h 或是参阅其在线说明页 (man rdev)获得。 


2.4 核心如何排列参数 

大部份的启动参数格式为: 



--------------------------------------------------------------------------------

name[=value_1][,value_2]...[,value_11]


--------------------------------------------------------------------------------

其中 `name' 是一个用来唯一识别(unique)相关的值(如果有的话)是要给核心的那个部份的关键词。多个启动参数只是上述格式以空白分隔的列表。注意那个 11 是真实的限制,因为现行的程序代码对每个关键词只处理 11 个以逗号分隔的参数。(然而,在非比寻常复杂的情况下你可以重覆使用相同的关键词加入 11 个以上的参数,假如设定函数支持这样搞的话。)同时也要注意,核心把列表分成(splits)最多 10 个的整数参数,后面并跟著一个字串,所以你不能真的给它 11 个整数,除非你自行在驱动程序中将第 11 个参数由字串转换成整数。 

大部份排序的动作是在 linux/init/main.c 里面。首先,核心查看参数是否为 `root=', `Ro', `Rw', or `Debug' 这些特别的参数。这些特别参数的意义本文中会进一步说明。 

然后它走过(walks)一系列的设定函数(放在 bootsetups 数组里)看看所指定的参数字串(像是 `foo')是不是与其中的一个设定函数(foo_setup())相关,以设定特定设备或核心的一部份。如果你传给核心 foo=3,4,5,6,bar 这样一行那么核心会搜寻 bootsetups 数组看看 `foo' 是否有注册。如果有,那么它会调用与 `foo' 相关联的设定函数(foo_setup())并交给它在核心指令列所给的整数参数 3, 4, 5, and 6,并交给它字串参数 bar。 


2.5 设定环境变量 

任何不被接受当作上述设定函数的 `foo=bar' 型式之叙述会被解译为要设定的环境变量。一个(没用的?)范例是以 `TERM=vt100' 作为启动参数。 


2.6 传递参数给 `init' 程序 

任何剩下的,核心不管而且不被解译成环境变量之参数接下来会传给第一个程序(process),通常是 init 程序。最常传给 init 程序的参数是 single 这个字,指示 init 把计算机启动在单人模式(single user mode) 并且不启动所有一般的驻留程序(daemons) 。查阅你系统里安装的 init 版本之在线手册看看它接受那些参数。 

3. 一般无关设备特性的启动参数

有些启动参数并非与任何设备或周边相关。它们乃是与某个核心内部参数相关,像是内存的处理,内存磁盘的处理,根文件系统的处理以及其它东东。 


3.1 根文件系统选项 

下列选项皆与核心如何选择及处理根文件系统有关。 


`root=' 参数

此参数告诉核心启动时以那个设备作为根文件系统使用。此设定的缺省值为建造(bulid)核心时系统的根文件系统设备。例如,如果核心是在一个以 `/dev/hda1' 作为根文件系统分割区的系统上建造的,那么缺省的根文件系统设备就是 `dev/hda1'。要切换此缺省值,并选择第二台软驱作为根文件系统设备的话,可以使用 `root=/dev/fd1'。 

可用的根文件系统设备为下列设备其中之一: 

(1) /dev/hdaN to /dev/hddN, 这是 ST-506 兼容磁盘 `a to d' 上的第 N 个分割区。 

(2) /dev/sdaN to /dev/sdeN, 这是 SCSI 兼容磁盘 `a to e' 上的第 N 个分割区。 

(3) /dev/sdaN to /dev/xdbN, 这是 XT 兼容磁盘 `a to b' 上的第 N 个分割区。 

(4) /dev/fdN, 这是软驱号码 N。 N=0 为 DOS 下的 `A:' 磁盘机,而 N=1 则为 `B:'。 

(5) /dev/nfs, 这并非真的是个设备,而是一个告诉核心经由网络取得根文件系统的旗标。 

上述磁盘设备的另一种数字格式,更为笨拙且更没有可移植性的主要/次要(major/minor) 号码也能接受。(例如 /dev/sda3 的主要号码为 8,次要号码为 3,所以你可以使用 root=0x803 作为另一种指定方式。) 

这是少数几个在核心中存有缺省值,所以可以用 rdev 公用程序改变的核心启动参数。 


`ro' 参数

当核心启动时它需要有个根文件系统以读取一些基本的东西。这就是挂在根目录的根文件系统。然而,如果根文件系统以可以写入的方式挂上来的话,你就无法在有文件写到一半的情况下确实地检查文件系统的完整性。此 `ro' 选项告诉核心以只读的方式挂入根文件系统,如此任何文件系统一致性检查程序(fsck) 在执行检查时都可以安全地假设没有文件写到一半的情况。没有任何程序或程序可以写入此文件系统直到它重新以可擦写的方式挂入为止。 

这是少数几个在核心中存有缺省值,所以可以用 rdev 公用程序改变的核心启动参数。 


`rw' 参数

这与上一个完全相反,它告诉核心以可读取/写入的方式挂入根文件系统。无论如何,缺省是以可擦写方式挂入根文件系统。不要在以可擦写方式挂入的文件系统上执行任何的 `fsck' 程序。 

此参数使用的值与上一个储存於核心映像的参数相同,可经由 rdev 存取。 


3.2 与内存磁盘(RAM Disk)管理有关的选项 

下列选项皆与核心如何处理内存磁盘设备有关,这种虚拟磁盘设备通常在安装阶段启动机器时使用,或配合使用模组化驱动程序以存取根文件系统的机器上。 


`ramdisk_start=' 参数

为了使核心映像能够与压缩的内存磁盘映像放在一张软盘内,所以加入这个 `ramdisk_start=' 指令。核心不能够放在压缩过的内存磁盘之文件系统映像里,因为它得从最开始的第零磁区开始放置,如此基本输出入系统(BIOS)才能载入启动磁区而核心也才能够开始启动执行。 

注意:如果你使用的是没有压缩的内存磁盘映像,那么核心可以是要载入内存磁盘之文件系统映像的一部份,且该软盘可以由 LILO 启动,两者也可以如同压缩之映像般为分开的两部份。 

如果你使用启动/根(boot/root)两张磁盘的方式(核心一张,内存磁盘映像放第二张)那么内存磁盘会由第零磁区开始,并使用零作为偏移值(offset)。因为这是缺省值,你根本不必真的去使用这个指令。 


`load_ramdisk=' 参数

此参数告诉核心是否要载入一份内存磁盘映像。 `load_ramdisk=1' 指定核心将软盘载入至内存磁盘中。缺省值为零,表示核心不应该试著去载入内存磁盘。 

请参阅 linux/Documentation/ramdisk.txt 文件中新的启动参数与如何使用它们的完整叙述。它同时也说明如何藉由 `rdev' 来设定及储存这些个参数。 


`prompt_ramdisk=' 参数

此参数告诉核心是否要给你个提示要求插入含内存磁盘映像的磁盘。 

在只用一张软盘的配置下内存磁盘映像与刚刚载入/启动的核心在相同的软盘上故不需要提示。这种情况可以用 `prompt_ramdisk=0'。在使用两张软盘的配置下你需要有个抽换磁盘的机会,故可以使用 `prompt_ramdisk=1'。因为这是缺省值,所以不必真的去指定它。(轶闻:从前人们习惯使用 `vga=ask' 这个 LILO 选项来暂时停止启动程序以取得抽换启动磁盘及根磁盘的机会。) 

请参阅 linux/Documentation/ramdisk.txt 文件中新的启动参数与如何使用它们的完整叙述。它同时也说明如何藉由 `rdev' 来设定及储存这些个参数。 


`ramdisk_size=' 参数

因为内存磁盘实际上会依需求动态成长,所以其大小有个上限加以限制以免它用光所有可用的内存而坏事。缺省值 4096(i.e. 4MB) 应该足够满足大部份的需求。你可以用这个启动参数切换此缺省值。 

请参阅 linux/Documentation/ramdisk.txt 文件中新的启动参数与如何使用它们的完整叙述。它同时也说明如何藉由 `rdev' 来设定及储存这些个参数。 


`ramdisk=' 参数(过气了)

(注意:这个参数是旧的,除了 v1.3.47 版以及更旧的的核心之外不应该使用。应该使用的是前面所述的指令) 

这个参数以千比特(kB)为单位指定内存磁盘设备的大小。例如,如果想要把位於一张 1.44MB 软盘上的根文件系统载入至内存磁盘设备,可以用: 



--------------------------------------------------------------------------------

ramdisk=1440


--------------------------------------------------------------------------------

这是少数几个在核心中存有缺省值,所以可以用 rdev 公用程序改变的核心启动参数。 


`noinitrd'(启始内存磁盘)参数

v2.x 及更新的核心有个特性,根文件系统最初是内存磁盘,然后核心执行内存映像上的 /linuxrc。这个特性典型系用于载入某些挂入真正的根文件系统所需要的模组(例如,载入储存於内存磁盘映像里的 SCSI 驱动程序,然后挂入在某 SCSI 磁盘里真正的根文件系统。) 

实际的 `noinitrd' 参数决定核心启动之后如何处理 initrd 数据。如果有指定,它可以经由 /dev/initrd 存取,可以在内存释放回系统之前读取一次。有关初始之内存磁盘的完整细节与使用请参阅 linux/Documentation/initrd.txt。此外,最新版的 LILO 及 LOADLIN 应该会包含其它有用的信息。 


3.3 与内存管理有关的参数 

下列参数会改变 linux 侦测或处理系统实体及虚拟内存的方式。 


`mem=' 参数

 这个参数有两个目的:原先的目的是指定机器所安装的内存数量(如果你想限制 linux 能使用的内存数量可以指定一个较小的值)。第二个(很少用)目的则是指定 mem=nopentium 以便告诉 linux 核心不要使用 4MB 分页表(page table)这个效能特性。 

在个人计算机规格中,原先定义回传安装内存数量的基本输出入调用被设计成最多只能回报最多 64MB。(是的,另一个缺乏远见的设计,就像 1024 磁簇的磁盘限制...哎。) Linux 在启动时会使用此基本输出入调用以确定安装的内存数量。如果你安装的内存超过 64MB,可以用这个启动参数告诉 Linux 你有多少内存。下面引用 Linus 对 mem= 参数的说明。 

”核心会接受任何你所给予的 `mem=xx' 参数,而如果它发现你骗它,那它迟早一定会当的很难看。这个参数指示可以定址的最高内存地址,所以,例如 `mem=0x1000000' 表示你有 16MB 的内存。对拥有 96MB 的机器而言此值为 `mem=0x6000000'。 

注意注意注意: 

某些机器可能会使用最上层(top)的内存作为基本输出入系统的快取等等一类用途,所以你可能并非实际拥有 96MB 的可定址空间。反之亦然: 

某些芯片组会将基本输出入系统包括的实体内存区域对应(map)到最上层内存后面,所以内存最上层实际上可能是 96MB + 384kB。如果你告诉 linux 的内存比它实际上拥有的还多,那就会出状况:也许不会立刻出事,但最后一定会发生。” 

注意,此参数并非一定得是十六进位格式,而且可以使用 `k' 与 `M'(大小写无关)字尾分别指定千比特以及百万比特。(`k' 会把你给的值旋转(shift) 10 比特,而 `M' 会旋转 20 比特。)上述警告依然没变,沿上例,一台 96MB 的机器也许可以设 mem=97920k 而无法使用 mem=98304k 或 mem=96M。 


`swap=' 参数

这允许使用者调整某些与磁盘置换(swapping)有关的虚拟内存参数(VM)。它接受下列八个参数: 



--------------------------------------------------------------------------------

MAX_PAGE_AGE
PAGE_ADVANCE
PAGE_DECLINE
PAGE_INITIAL_AGE
AGE_CLUSTER_FRACT
AGE_CLUSTER_MIN
PAGEOUT_WEIGHT
BUFFEROUT_WEIGHT


--------------------------------------------------------------------------------

有兴趣的玩家建议你阅读 linux/mm/swap.c 并注意 /proc/sys/vm 里面的东西。 


`buff=' 参数

类似 `swap=' 参数,这允许使用者调整某些与缓冲内存(buffer)之管理相关的参数。它接受下列六个参数。 



--------------------------------------------------------------------------------

MAX_BUFF_AGE
BUFF_ADVANCE
BUFF_DECLINE
BUFF_INITIAL_AGE
BUFFEROUT_WEIGHT
BUFFERMEM_GRACE


--------------------------------------------------------------------------------

有兴趣的玩家建议你阅读 linux/mm/swap.c 并注意 /proc/sys/vm 里面的东西。 


3.4 以网络文件系统(NFS)作为根文件系统使用的参数 

藉由通过网络文件系统(NFS: Network FileSystem) 提供根文件系统 Linux 支持无碟(diskless)工作站这样的系统。这些参数系用来告诉无碟工作站要从那一台机器取得其系统。同时要注意 root=/dev/nfs 参数是必需的。有关使用网络文件系统作为根文件系统之细节说明在 linux/Documentation/nfsroot.txt 文件里。你应该阅读这个文件,因为下面只是从那个文件直接拿过来的快速摘要。 


`nfsroot=' 参数

这个参数告诉核心以那一台机器,那个目录以及那些个网络文件系统选项作为根文件系统使用。此参数的格式如下: 



--------------------------------------------------------------------------------

nfsroot=[:][,]


--------------------------------------------------------------------------------

如果指令列上没有给定 nfsroot 参数,则将使用 `/tftpboot/%s' 缺省值。其它选项如下: 

-- 指定网络文件系统服务端的互联网地址(IP address)。如果没有给定此字段,则使用由 nfsaddrs 变量(见下面)所决定的值。此参数的用途之一是允许使用不同机器作为反向地址解析协议(RARP) 及网络文件系统服务端。通常你可以不管它(设为空白)。 

-- 服务端上要作为根挂入的目录域名。如果字串中有个 `%s' 符记(token),此符记将代换为客户端互联网地址之 ASCII 表示法。 

-- 标准的网络文件系统选项。所有选项都以逗号分开。如果没有给定此选项字段则使用下列的缺省值: 


port = as given by server portmap daemon
rsize = 1024
wsize = 1024
timeo = 7
retrans = 3
acregmin = 3
acregmax = 60
acdirmin = 30
acdirmax = 60
flags = hard, nointr, noposix, cto, ac


`nfsaddrs=' 参数

这个启动参数设定网络通讯所需的各种网络接口地址。如果没有给定这个参数,则核心会试著使用反向地址解析协议以及/或是启动协议(BOOTP)以找出这些参数。其格式如下: 



--------------------------------------------------------------------------------

nfsaddrs=::::::


--------------------------------------------------------------------------------

-- 客户端的互联网地址。如果没设,此地址将由反向地址解析协议或启动协议来决定。使用何种协议端视配置核心时打开的选项以及 参数而定。如果设定此参数,就不会使用反向地址解析协议或启动协议。 

-- 网络文件系统服务端之互联网地址。如果使用反向地址解析协议来决定客户端地址并且设定此参数,则只接受从指定之服务端传来的响应。要使用不同的机器作为反向地址解析与网络文件系统服务端的话,在此指定你的反向地址解析协议服务端(保持空白)并在 nfsroot 参数(见上述)中指定你的网络文件系统服务端。如果此项目空白则使用回答反向地址解析协议或启动协议之服务端的地址。 

-- 网关(gateway)之互联网地址,若服务端位於不同的子网络上时。如果此项目空白则不使用任何网关并假设服务端在本地的(local)网络上,除非由启动协议接收到值。 

-- 本地网络界面的网络掩码。如果为空白,则网络掩码由客户端的互联网地址导出,除非由启动协议接收到值。 

-- 客户端的域名。如果空白,则使用客户端互联网地址之 ASCII-标记法,或由启动协议接收的值。 

-- 要使用的网络设备域名。如果为空白,所有设备都会用来发出反向地址解析请求,启动协议请求由最先找到的设备发出。网络文件系统使用接收到反向地址解析协议或启动协议响应的设备。如果你只有一个设备那你可以不管它。 

-- 用以作为自动配置的方法。如果是 `rarp' 或是 `bootp' 则使用所指示的协议。如果此值为 `both' 或空白,若配置核心时有打开这两种协议则都使用。 `none' 表示不使用自动配置。这种情况下你必须指定前述字段中所有必要的值。 

此 参数可以作为 nfsaddrs 的参数单独使用(前面没有任何 `:` 字符),这种情况下会使用自动配置。然而,此种情况不能使用 `none'作为值。 


3.5 其它另外的核心启动参数 

这些启动参数让使用者调整某些核心内部的参数。 


The `debug' Argument

核心经由 printk() 函数传达重要(以及没那么重要)的讯息给管理者(operator)。如果讯息很重要, printk() 函数也会显示到主控台(console)上,就如同丢给 klogd() 记录到磁盘上一般。如同记录到磁盘上一般在主控台上显示重要讯息的原因是因为在不幸的状况下(例如磁盘损坏)讯息将无法存入磁盘而漏失。 

到底什么重要什么不重要其门槛藉由 console_loglevel 变量设定。缺省是把任何比 DEBUG(等级 7)重要的东西记录到主控台上去。(这些等级定义在 kernel.h 含入档中)指定 debug 启动参数将使主控台的记录等级设为 10,所以所有核心讯息都会出现在主控台上。 

主控台记录等级通常也可以在执行期间经由 klogd() 程序选项设定。查看你系统之安装版本的在线说明页看看该怎么做。 


`init=' 参数

核心启动时缺省执行 `init' 程序,这支程序接下来经由执行 getty 程序,跑 `rc' 脚本文件(scripts)以及诸如此类的东东为使用者设定计算机。核心首先寻找 /sbin/init ,然后是 /etc/init (depreciated),而最后它会去试 /bin/sh (可能在 /etc/rc )。如果说,例如,如果你的 init 程序坏掉了,只要使用 init=/bin/sh 

这个启动参数就能让你在启动时直接跳到解译环境(shell),使你能够换掉坏掉的程序。 


`no387' 参数

某些 i387 协同处理器芯片有臭虫(bugs),在 32 比特保护模式下会出现。例如,部份早期的 ULSI-387 芯片在执行浮点运算时会死当,这似乎是因为 FRSAV/FRRESTOR 指令的一只□。使用 `no387' 启动参数使 Linux 就算你真的有数值辅助处理器叶丝邛略它的存在。当然编译核心时你必须加入数值模拟支持!如果你有某些能够使用 80287 浮点处理单元(FPU)的古董级 386 机器那这叶丝谲有用,因为 linux 无法使用 80287。 


`no-hlt' 参数

i386(及其后继者)家族的中央处理器有个 `hlt' 指令用来告诉中央处理器现在□□没事做,直到某个外部设备(键盘,调制解调器,磁盘等等)调用中央处理器执行任务为止。这个指令会使中央处理器进入‘省电’模式,像个死人(zombie)般坐在那里直到有个外部设备叫它起来(经由中断(interrupt) ,通常是)。部份早期的 i486DX-100 芯片处理这个 `hlt' 指令有问题,使用过这个指令後它们不能可靠地回到运作模式。使用 `no-hlt' 这个指令告诉 Linux当无事可做时跑个无穷循环而不停住你的中央处理器。让有这些芯片的人们能够使用 Linux,然而还是建议有可能的话就换掉这些芯片。 


`no-scroll' 参数

启动时使用这个参数可以关闭卷页(scrolling)特性,这个特性使得 Braille 终端机难以使用。 


`panic=' 参数

在不太可能发生的核心异常(kernel panic)事件下(像是核心侦测到内部错误,并认为这样的错误严重到应该发出警讯并停止任何操作), 

缺省的处理方式是就停在那儿直到有人过来并注意到屏幕上的异常警讯然后重新启动机器。 

然而如果机器是在无法触及,隔离的地方跑的话也许会希望它能自动重置自己然后回到在线。例如,启动时使用 panic=30 会使核心在发生核心异常 30 秒後试著重新启动自己。若此值为零则使用缺省的处理方式,就是一直在那儿等。 

注意,这个逾时(timeout)设定也可经由 /proc/sys/kernel/panic 系统控制 (sysctl)界面读取与设定。 


`profile=' 参数

核心发展者们可以打开某个选项以得知核心如何使用中央处理器时间以及用在那□,以便最大化效率(efficiency)与效能(performance)。这个选项让你在启动时设定观察变化的计数(the profile shift count)。此值一般设为二。你也可以在编译核心时打开此功能。无论那种情况,你都需要像 readprofile.c 这类可以处理 /proc/profile 输出的工具。 


`reboot=' 选项

这个选项控制重置计算机时(典型是经由 /sbin/init 处理的 Control-Alt-Delete 动作) Linux 所做的重新启动之种类。新的 v2.0 核心缺省的动作是做‘冷’开机(完全重置,基本输出入系统执行内存检查等等)以代替‘暖’开机(没有完全重置,没有内存检查)。 

改为缺省冷开机是为了要在便宜的/烂烂的,暖开机请求没办法重新启动的硬件上工作。可以使用 reboot=w 设为原先的方式(暖开机),其实可以用任何以 w 开头的字来设定。 

为什么这会造成困扰?某些具有内存快取的磁盘控制器能够感测到暖开机,并且把所有暂存的数据写到磁盘上。冷开机可能会重设该卡,在快取卡内存里面的回写(write-back)数据就会漏失。已经有人回报系统内存检查很花时间以及/或是小型计算机智能大楼界面基本输出入系统 (SCSI BIOSes)冷开机时花较久的时间初始化是使用暖开机的好理由。 


`reserve=' 参数

这是用来保护输出入端口区域不要侦测。这个指令的格式是: 


reserve=iobase,extent[,iobase,extent]... 
在某些机器上也许必须避免设备驱动程序去检查(自动侦测)在某些特殊区域的设备。这可能是因为硬件设计的不良而会使得启动终止(像是某些以太网卡),会被误认的硬件,状态会因为较前面的侦测而改变的硬件,或者只是你不想让核心初始化的硬件。 

此 reserve 启动时期参数藉由指定一段不要侦测的输出入端口范围以解决此问题。此段区域在核心的输出入端口注册表格当中被视为已经在该处找到设备(域名为 reserved )而保留。注意,绝大部份的机器都不需要此机制。只有真的有问题或特殊情况才会需要用到这东东。 

位於指定之区域中的输出入端口乃是靠著在侦测一段输出入区域之前先执行 check_region() 以避免设备侦测。这用于某些遇上 NE2000 会挂掉或者会误认其它设备的驱动程序。 

正确的设备驱动程序不应该去侦测保留区域,除非另一个启动参数明确地指示它这样做。这意谓著 reserve 经常与其它启动参数一起使用。如果你指定一段保留区域以保护某特定设备的话,你必须明确地指定此设备的侦不锒围,大部份的驱动程序如果有给它们明确的地址就会忽略输出入端口注册表。 

例如,此启动列 



--------------------------------------------------------------------------------

reserve=0x300,32 blah=0x300


--------------------------------------------------------------------------------

保留 0x300-0x31f 不让除了 `blah' 的设备驱动程序外的所有驱动程序去侦侧。 

如同一般启动时期所用的格式,它也有 11 个参数之限制,因此每个 reserve 关键词只能指定 5 个保留区域。如果你有异常复杂的需求,可以使用多重 reserve 指定。 


`vga=' 参数

注意,这并不真的是个启动参数。它是由 LILO 解译的选项,与所有其它由核心处理的启动参数并不相同。然而因为它的使用变得如此普遍故值得在此加上一笔。这个选项也可以经由使用 rdev -v 或相同的 vidmode 指令对 vmlinuz 文件作设定。这使得设定程序代码能够在真的启动 Linux 核心之前使用视讯(video)基本输出入系统改变缺省的显示模式。典型的模式是 80x50, 132x44 等等。使用此选项最好的方式是以 vga=ask 启动,如此在启动核心前会有个列表提示你的显示卡可以使用的各种模式。一旦你从上述列表得知你想使用的号码,以后就可以把它放在 `ask' 的位置。更进一步的信息请参阅随附於所有新版核心的 linux/Documentation/svga.txt 文件。 

注意,新的核心(2.1 版以上)有改变显示模式的设定程序代码选项 Video mode selection support,所以如果你想使用这个特性那么你就得打开这个选项。 

4. 小型计算机智能大楼界面(SCSI)周边的启动参数

这一节包含用来传递有关小型计算机智能大楼界面(SCSI)卡(host adapters)及 SCSI 设备之信息的启动参数说明。 


4.1 中层驱动程序的参数 

中层驱动程序处理像磁盘,光盘及磁带等等而不深入接口卡的特性。 


最大侦测逻辑号码(LUN)数(`max_scsi_luns=')

每个 SCSI 设备本身里面都可以包含一个‘子设备’号码。最常见的例子是那些一次可以放好几张片子的新型 SCSI 光驱。每张光盘由指定之设备的‘逻辑号码(Logical Unit Number: LUN)’定址。但大部份的设备,像硬盘驱动器,磁带机等等都是单一个的设备,而逻辑号码设为零。 

只有一个逻辑编号的设备若轫体写得不好就会出问题。某些设计不良的 SCSI 设备(旧的以及就那么巧被你碰上的新设备)无法接受不为零的逻辑编号侦测。它们会挂在那,而且有可能把整个 SCSI 总线(bus)都带著一起陪葬。 

较新的核心有一个配置选项可以让你设定所要侦测之最大逻辑编号。缺省只侦测到逻辑编号零以必免上述问题。 

在启动时指定要侦测的逻辑号码可以键入 `max_scsi_luns=n' 作为启动参数,其中 n 是介於壹到捌的数字。要避免上述问题可以使用 n=1 以避免这些个烂设备不高兴。 


SCSI 磁带驱动程序的参数(`st=')

SCSI 磁带驱动程序的某些启动时期配置可以藉由使用下列参数达成: 



--------------------------------------------------------------------------------

st=buf_size[,write_threshold[,max_bufs]]


--------------------------------------------------------------------------------

前面两个数字的单位是千比特。缺省的 buf_size 是 32kB。最多可以指定为 16384kB,大的荒谬。 write_threshold 缓冲区确认送至磁带的值,缺省为 30kB。最大缓冲区个数视侦测到的装置数量而定,缺省值为二。使用范例如: 



--------------------------------------------------------------------------------

st=32,30,2


--------------------------------------------------------------------------------

完整的细节可以在 README.st 文件中找到,位於核心原始程序代码结构(tree)的 scsi 目录里。 


4.2 SCSI 卡的参数 

本节的常见标记: 

iobase -- SCSI 卡进驻的第一个输出入端口。以十六进制表示法指定,而且通常落在 0x200 到 0x3ff 之间。 

irq -- 接口卡设定使用的硬件中断。其可用的值与接口卡有关,但通常是 5, 7, 9, 10, 11, 12, 以及 15。其它值通常由一般的周边设备使用,像是 IDE 硬盘,软盘,串口等等。 

dma -- 接口卡使用的直接内存存取(Direct Memory Access:DMA)信道。典型只用于具总线主控(bus-mastering)能力的卡。 PCI 及 VLB 接口卡本即具总线主控,且不需要任何 ISA 直接内存存取信道。 

scsi-id -- 在 SCSI 总在线,接口卡用来识别它本身的识别号码。只有某些接口卡允许你改变这个值,大部份则都内定且永久不变。通常缺省值是七,但西捷(Seagate)以及 Future Domain TMC-950 卡使用六。 

parity -- SCSI 接口卡是否期望所连接的设备交换信息时提供同位检查码。指定一表示打开同位检查,零则为关闭。同样地,并非所有的接口卡都支持选用同位检查这个启动参数。 


Adaptec aha151x, aha152x, aic6260, aic6360, SB16-SCSI (`aha152x=')

aha 编号对照卡而 aic 编号对照这些卡上实际的 SCSI 芯片,包含 Soundblaster-16 SCSI。 

侦测这些 SCSI 卡的程序代码寻找从卡上安装进来的基本输出入系统,如果没有,就找不到你的卡。然后你就得使用这种型式的启动参数: 



--------------------------------------------------------------------------------


aha152x=iobase[,irq[,scsi-id[,reconnect[,parity]]]]


--------------------------------------------------------------------------------

注意,如果此驱动程序编译时有打开错误侦测,则可以指定第六个值以设定调试层级。 

所有参数都如本节最前面所述,而 reconnect 值如果不为零则允许设备离线/重新连线。使用范例如下: 



--------------------------------------------------------------------------------

aha152x=0x340,11,7,1


--------------------------------------------------------------------------------

注意,参数必须依序指定,意谓如果你想指定同位检查,那么你也得指定 iobase, irq, scsi-id 以及 reconnect 值。 


Adaptec aha154x (`aha1542=')

这些是 aha154x 系列的卡。 aha1542 系列的卡板子上有一个 i82077 软盘控制器,而 aha1540 系列的卡没有。 

这些卡是总线主控卡,而且有可以设定”公平性”的参数,用来与其它设备共享总线。其启动参数看起来像下面这样。 



--------------------------------------------------------------------------------

aha1542=iobase[,buson,busoff[,dmaspeed]]


--------------------------------------------------------------------------------

可用的 iobase 值通常是: 0x130, 0x134, 0x230, 0x234, 0x330, 0x334 其中之一。仿(Clone)卡可能允许使用其它值。 

buson, busoff 的值是该卡占用工业标准架构(ISA)总线的毫秒数(microsecond)。缺省值是 11us on, and 4us off,如此其它的卡(像是工业标准架构界面的 LANCE 以太网卡)就有机会存取工业标准架构总线。 

dmaspeed 的值是进行直接内存存取的速率(以百万比特每秒为单位)。缺省为 5MB/s。新版的卡可以让你从软件配置(soft-configuration)中选择这个值,较旧的卡则使用跳接(jumpers)。假设你的主机板够力的话可以使用 10MB/s。如果使用 5MB/s 以上的值请小心试验。 


Adaptec aha274x, aha284x, aic7xxx (`aic7xxx=')

这些卡可以接受此种格式的参数。 



--------------------------------------------------------------------------------

aic7xxx=extended,no_reset


--------------------------------------------------------------------------------

如果 extended 的值不为零则表示打开对大容量磁盘的延伸转换(extended translation)。 no_reset 值如果不为零则是告诉驱动程序启动时,设定接口卡的时候不要重置 SCSI 总线。 


AdvanSys SCSI Host Adaptors (`advansys=')

AdvanSys 驱动程序最多能接受四个输出入地址以侦测 AdvanSys SCSI 卡。注意,这些值(若使用的话)完全不会影响 EISA 或是 PCI 的侦测。它们仅用来侦测 ISA 以及 VLB 接口卡。还有,如果此驱动程序编译时有打开错误侦测的话,那么错误侦测的输出输出层级可以藉由加入 0xdeb[0-f] 参数来设定。 


Always IN2000 接口卡 (`in2000=')

跟其它 SCSI 卡的启动参数不同, IN2000 驱动程序使用由美国标准交换码(ASCII) 所组成的前置(prefix)字串代表大部份的整数参数。这是一份支持列表: 

ioport:addr -- 其中 addr 是卡(通常没有只读内存)的输出入地址。 

noreset -- 没有选用的参数。这避免启动时期的 SCSI 总线重置动作。 

nosync:x -- x 是个比特掩码(bitmask),其中前面七个比特对应到七个 SCSI 设备(第零个比特是第零号设备,馀类推)。 

设定其中的比特以避免对该设备进行同步(sync)协商(negotiation)。驱动程序缺省是关闭所有设备之同步。 

period:ns -- ns 是以奈秒(nanoseconds)为单位之最小 SCSI 数据传输时间区段 (period)。缺省为 500; 可接受的值是 250 到 1000。 

disconnect:x -- x = 0 即绝不允许离线,2 即一定可以离线。 x = 1 则为’适当’时可离线,这是缺省值,而且是一般情况的最佳选择。 

debug:x 如果定义了 `DEBUGGING_ON' 则 x 就是设定不同错误侦测输出的比特掩码-参见 in2000.h 中定义的 DB_xxx。 

proc:x -- 如果定义了 `PROC_INTERFACE' 则 x 就是决定 /proc 界面运作方式及功能的比特掩码-参见 in2000.h 中定义的 PR_xxx。 

下面列出一些使用范例: 



--------------------------------------------------------------------------------

in2000=ioport:0x220,noreset
in2000=period:250,disconnect:2,nosync:0x03
in2000=debug:0x1e
in2000=proc:3


--------------------------------------------------------------------------------


使用 AMD AM53C974 的硬件 (`AM53C974=')

与其它驱动程序不同,这一个不使用启动参数来传达输出入端口,硬件中断或直接内存存取信道。(既然 AMD53C974 是个 PCI 设备,其实也不需要作这些设定。)取而代之的是用来传达接口卡与设备间传输模式与传输率的参数。这最好用范例来解释: 



--------------------------------------------------------------------------------

AM53C974=7,2,8,15


--------------------------------------------------------------------------------

这会被解释成这样:‘对于 SCSI-ID 7 的控制器与 SCSI-ID 2 的设备间之通讯,使用最大 8MHz 之同步模式传输率。应协商 15 比特的偏移值。’ 详细数据可在 linux/drivers/scsi/README.AM53C974 文件里找到。 


BusLogic SCSI 接口卡与 v1.2 的核心 (`buslogic=')

在旧版的核心中, buslogic 驱动程序只接受一个参数,就是输出入地址。它能接受下列值:0x130, 0x140, 0x230, 0x234, 0x330, 0x334。 


BusLogic SCSI 接口卡与 v2.x 的核心 (`BusLogic=')

在 v2.x 核心中,BusLogic 驱动程序接受许多参数。(注意上面的大小写;是大写的 B 以及 L!!! )。下面的细节是直接从 v2.0 核心中的 Leonard N. Zubkoff's 驱动程序拿过来的。 

这个 BusLogic 驱动程序的核心命令列是由 "BusLogic" 驱动程序识别字,加上各个以逗号格开的选用性整数序列,后面跟著各个选用性的字串序列所组成。每行命令列都用于一张 BusLogic 卡,在使用多张 BusLogic 卡的系统上可以使用多个命令列来设定。 

第一个整数指定接口卡所在的 I/O 地址。如果不指定则缺省值为零,表示把这个参数设为缺省侦测顺序中找到的第一张 BusLogic 卡。如果在命令列上指定了任何的 I/O 地址参数,缺省侦测顺序就会被忽略。 

第二个整数指定用于支持队列运作(Tagged Queuing)的目标设备之队列深度。队列深度是容许同时送出的 SCSI 指令数。如果没有指定则缺省值为零,表示使用根据接口卡的总队列深度及数目,种类,速度,以及侦测目标设备的能力所自动判断的值。对于需要使用 ISA 错误缓冲区(Bounce Buffers)的接口卡,队列深度自动设为 BusLogic_TaggedQueueDepth_BB 以避免 DMA 错误缓冲内存的过载。不支持队列运作的目标设备使用 BusLogic_UntaggedQueueDepth 定义的队列深度。 

第三个整数指定总线停置(Settle)时间,以秒为单位。这乃是重置接口卡使 SCSI 总线重置到发出 SCSI 指令之间的时间。如果没有指定则缺省值为零,表示使用 BusLogic_DefaultBusSettleTime 的值。 

第四个整数指定区域选项。如果没有指定则缺省值为零。注意,区域选项只用于特定的接口卡。 

第五个整数指定全域选项。如果没有指定,缺省值为零。注意,全域选项应用于所有的接口卡。 

字串选项用来提供对队列运作,错误回复,以及接口卡侦测之控制。 

队列运作的指定以 "TQ:" 开头,可以明确地指定是否允许有此支持的目标设备使用队列运作。下面是可用的指定选项: 

TQ:Default -- 队列运作的允许与否以 BusLogic 卡的轫体版本以及队列深度的值是否允许多重指令作为判断基础。 

TQ:Enable -- 对所有接在这张卡上的目标设备打开队列运作,忽略接口卡轫体版本所加诸的限制。 

TQ:Disable -- 对所有接在这张卡上的目标设备关闭队列运作。 

TQ:<每个目标的设定> -- 各别控置对每个目标设备的队列运作。 <每个目标的设定>是由 "Y", "N", and "X" 字符组成的串行。 "Y" 打开队列运作,"N" 关闭队列运作,而 "X" 接受以轫体版本为基础的缺省值。第一个字符代表目标设备 0,第二个代表设备 1,依此类推;如果 "Y", "N" and "X" 字符串行并未包括所有的目标设备,未指定的字符将被假设为 "X"。 

注意,明确地指定要使用队列运作可能会出问题;这主要是方便用来关闭对某些没能正确具体此功能之目标设备的队列运作。 

错误回复策略的指定以 "ER:" 开头,可以明确地指定因 SCSI 指令失败,无法成功完成而调用 ResetCommand 时执行的错误回复动作。下面是可用的指定选项。 

ER:Default -- 错误回复依 SCSI 子系统的建议选择强制重置(Hard Reset)与总线设备重置其中之一。 

ER:HardReset -- 错误回复将会启始接口卡的强制重置,这也会引起 SCSI 总线的重置。 

ER:BusDeviceReset -- 错误回复将送出总线设备重置讯息给引起错误的目标设备。 

如果该目标设备再次造成错误回复而且送出总线设备重置讯息之后该目标设备没有一次成功完成 SCSI 指令的话,则尝试进行强置重置。 

ER:None -- 错误回复将被冻结。这个选项应该只用于 SCSI 总线重置或总线设备重置会使目标设备无法回复的情况。 

ER:<每个目标的设定> -- 错误回复将对每个目标设备进行各别控制。 <每个目标的设定>是由 "D", "H", "B", and "N" 字符所组成的串行。 "D" 选择缺省值,"H" 选择强置重置,"B" 选择总线设备重置,而 "N"选择不重置。第一个字符代表目标设备 0,第二个代表设备 1,依此类推;如果 "D", "H" , "B" and "N" 字符串行并未包括所有的目标设备,未指定的字符将被假设为 "X"。 

接口卡侦测的指定包含下列字串: 

NoProbe -- 不执行任何一种侦测,因此不会侦测到 BusLogic 接口卡。 

NoProbeISA -- 不侦测标准 ISA I/O 地址,因此只会侦测到 PCI 接口卡。 

NoSortPCI -- 依 PCI BIOS 所提供的顺序列举 PCI 接口卡,忽略任何 AutoSCSI "Use Bus And Device # For PCI Scanning Seq." 选项的设定。 


EATA SCSI 接口卡 (`eata=')

新的 v2.0 核心之 EATA 驱动程序能接受一个启动参数指定所要侦测的输出入地址。格式为: 



--------------------------------------------------------------------------------


eata=iobase1[,iobase2][,iobase3]...[,iobaseN]


--------------------------------------------------------------------------------

此驱动程序会依所列顺序侦测这些地址。 


Future Domain TMC-8xx, TMC-950 (`tmc8xx=')

侦测这些 SCSI 卡的程序代码寻找从卡上安装进来的基本输出入系统,如果没有,就找不到你的卡。或者,如果 BIOS 的签章(signature)字串不被认可那么也会找不到。不管是那一种情况,你都得使用这种型式的启动参数: 



--------------------------------------------------------------------------------

tmc8xx=mem_base,irq


--------------------------------------------------------------------------------

mem_base 的值是接口卡使用的内存对映(memory mapped)输出入区域的值。此值通常会是下列其中之一: 0xc8000, 0xca000, 0xcc000, 0xce000, 0xdc000, 0xde000。 


Future Domain TMC-16xx, TMC-3260, AHA-2920 (`fdomain=')

这个驱动程序根据一份已知基本输出入系统只读内存签章列表侦测这些接口卡。完整的列表请参见 linux/drivers/scsi/fdomain.c,该档前面有许多信息。如果此驱动程序不认得你的基本输出入系统,你可以使用这种格式切换: 



--------------------------------------------------------------------------------

fdomain=iobase,irq[,scsi_id]


--------------------------------------------------------------------------------


IOMEGA Parallel Port / ZIP drive (`ppa=')

这个驱动程序用于 IOMEGA ZIP 磁盘附的 IOMEGA 并口 SCSI 卡。它也可以配合原先的 IOMEGA PPA3 设备使用。此驱动程序的启动参数格式为: 



--------------------------------------------------------------------------------

ppa=iobase,speed_high,speed_low,nybble


--------------------------------------------------------------------------------

除了 iobase 之外其余皆为选用值。如果你想改变这三个选用参数中的任何一个,建议你读读 linux/drivers/scsi/README.ppa 中有关它们控制些什么的细节。 


NCR5380 based controllers (`ncr5380=')

跟你的接口卡有关, 5380 的型式可以是输出入对应或内存对应。(低於 0x400 的地址意谓著输出入对应,但 PCI 以及 EISA 硬件使用 0x3ff 以上的输出入地址。)不管是那一种情况,你都是指定地址,硬件中断以及直接内存存取信道的值。输出入对应接口卡的范例像是: ncr5380=0x350,5,3。如果该卡不使用中断,那么 255(0xff)这个硬件中断值会关闭中断的使用。 254 这个应体中断值表自动侦测。更细节的信息可以在 linux/drivers/scsi/README.g_NCR5380 这个文件里找到。 


NCR53c400 based controllers (`ncr53c400=')

标准 53c400 的支持是由与上述标准 5380 之支持相同的驱动程序所提供。启动参数与上述完全相同,除了 53c400 不使用直接内存存取之外。 


NCR53c406a based controllers (`ncr53c406a=')

此驱动程序使用这种格式的启动参数: 



--------------------------------------------------------------------------------

ncr53c406a=PORTBASE,IRQ,FASTPIO


--------------------------------------------------------------------------------

其中 IRQ 以及 FASTPIO 参数为选用项。中断值零关闭中断之使用。使用一与 FASTPIO 参数启用 insl 以及 outsl 指令以取代一个比特的 inb 以及 outb 指令。此驱动程序也可以由编译时期选项设定使用直接内存存取。 


Pro Audio Spectrum (`pas16=')

PAS16 使用 NCR5380 SCSI 芯片,新款还支持无跳接配置。启动参数的格式为: 



--------------------------------------------------------------------------------

pas16=iobase,irq


--------------------------------------------------------------------------------

唯一的不同是你可以指定 255 这个硬件中断值,这会告诉驱动程序不要使用中断,然效能会降低。 iobase 通常是 0x388。 


Seagate ST-0x (`st0x=')

侦测这些 SCSI 卡的程序代码寻找从卡上安装进来的基本输出入系统,如果没有,就找不到你的卡。或者,如果 BIOS 的签章字串不被认可那么也会找不到。不管是那一种情况,你都得使用这种型式的启动参数: 



--------------------------------------------------------------------------------

st0x=mem_base,irq


--------------------------------------------------------------------------------

mem_base 的值是接口卡使用的内存对映(memory mapped)输出入区域的值。此值通常会是下列其中之一: 0xc8000, 0xca000, 0xcc000, 0xce000, 0xdc000, 0xde000。 


Trantor T128 (`t128=')

这些接口卡也是以 NCR5380 芯片为基础,接受下列选项: 



--------------------------------------------------------------------------------

t128=mem_base,irq


--------------------------------------------------------------------------------

The valid values for mem_base are as follows: 0xcc000, 0xc8000, 0xdc000, 0xd8000. 可用于 mem_base 的值如下: 0xcc000, 0xc8000, 0xdc000, 0xd8000。 


Ultrastor SCSI cards (`u14-34f=')

注意,此卡有两个互相独立的驱动程序,名为 CONFIG_SCSI_U14_34F 者使用 u14-34f.c 而 CONFIG_SCSI_ULTRASTORE 使用 ultrastor.c。 u14-34f 这一个(新的 v2.0 核心用它)接受一个格式如下的启动参数: 



--------------------------------------------------------------------------------


u14-34f=iobase1[,iobase2][,iobase3]...[,iobaseN]


--------------------------------------------------------------------------------

此驱动程序会依所列顺序侦测这些地址。 


Western Digital WD7000 cards (`wd7000=')

这个驱动程序寻找它所知道的基本输出入系统只读内存字串来侦测 wd7000 并且知道数个标准的配置设定。如果它没能用正确的值动起来,或不认得你的基本输出入系统版本,那么你可以使用这种格式的启动参数。 



--------------------------------------------------------------------------------

wd7000=irq,dma,iobase


--------------------------------------------------------------------------------



4.3 不接受启动参数的 SCSI 卡 

目前为止,下列 SCSI 接口卡不使用任何启动时期参数。在某些情况下,你可以直接编辑驱动程序本身把值写死(hard-wire)进去,如果真的必要的话。 


Adaptec aha1740 (EISA probing),
NCR53c7xx,8xx (PCI, both drivers)
Qlogic Fast (0x230, 0x330)
Qlogic ISP (PCI)

5. 硬盘驱动器

这一节列出所有与标准 MFM/RLL, ST-506, XT, 以及 IDE 磁盘机相关的启动参数。注意,IDE 以及先前的 ST-506 硬盘驱动程序都接受 `hd=' 选项。 


5.1 IDE 磁盘/光盘驱动程序参数 

IDE 驱动程序接受几个参数,包括范围从磁盘规格(geometry)到先进或不良之控制器的支持。底下是所有可用之启动参数的摘要。要知道完整的细节,你真的应该去查阅在 linux/Documentation 目录下的 ide.txt 档,这个摘要是从中摘录出来的。 



--------------------------------------------------------------------------------


"hdx=" 从 "a" 到 "h" 所有的 "x" 都承认,像是 "hdc" 。
"idex=" 从 "0" 到 "3" 所有的 "x" 都承认,像是 "ide1"。

"hdx=noprobe" : 也许的确有个磁盘在那儿,但不要去侦测
"hdx=none" : 这里没有磁盘,忽略 cmos 且不要去侦测
"hdx=nowerr" : 忽略这个磁盘的 WRERR_STAT 比特
"hdx=cdrom" : 这里有个磁盘,而且是个光驱
"hdx=cyl,head,sect" : 这里有个磁盘,并指定磁盘规格
"hdx=autotune" : 驱动程序将试著把界面速度调到支持之
最快可程序化输出入(PIO) 模式
,此磁盘能接受才行。并非所有
芯片组种类都有完整支持,并且
很可能使旧的/奇怪的 IDE 磁
碟出问题。
"idex=noprobe" : 不要尝试存取/使用这个界面
"idex=base" : 在指定的地址侦测界面,其中 "base"
通常是 0x1f0 或是 0x170 且
假设 "ctl" 是 "base"+0x206
"idex=base,ctl" : 指定 base 以及 ctl
"idex=base,ctl,irq" : 指定 base, ctl, 以及 irq 数值
"idex=autotune" : 驱动程序将试著把界面速度调到支持之
最快可程序化输出入(PIO) 模式
,此磁盘能接受才行。并非所有
芯片组种类都有完整支持,并且
很可能使旧的/奇怪的 IDE 磁
碟出问题。
"idex=noautotune" : 驱动程序将不会试著调整界面速度。除
了 cmd640 之外,这是大部份晶
片组的缺省值。
"idex=serialize" : 不重叠对(overlap) idex 及 ide(x^1)
的操作


--------------------------------------------------------------------------------

下列参数只允许用于 ide0,且缺省的 base, ctl 以及 ports 不能修改。 



--------------------------------------------------------------------------------


"ide0=dtc2278" : 侦测/支持 DTC2278 界面
"ide0=ht6560b" : 侦测/支持 HT6560B 界面
"ide0=cmd640_vlb" : 使用 CMD640 芯片的 VLB 接口卡
*必须*加入这个参数(PCI 的则
不必 -- 自动侦测)
"ide0=qd6580" : 侦测/支持 qd580 界面
"ide0=ali14xx" : 侦测/支持 ali14xx 芯片组 (ALI M1439/M1445)
"ide0=umc8672" : 侦测/支持 umc8672 芯片组


--------------------------------------------------------------------------------

使用任何其它的东东都会被拒绝并得到一个 "BAD OPTION" 讯息。 


5.2 标准 ST-506 磁盘驱动程序选项(`hd=') 

标准磁盘驱动程序可以接受磁盘逻辑规格参数,这与 IDE 驱动程序相似。注意,无论如何它只希望接受三个值 (C/H/S) -- 过多或过少它都会默默地忽略掉。同时它只接受 `hd=' 参数,像 `hda', `hdb=' 这类的在此都不被允许。其格式如下: 



--------------------------------------------------------------------------------

hd=cyls,heads,sects


--------------------------------------------------------------------------------

如果装有两个磁盘,就使用第二颗磁盘的规格重覆上述指令。 


5.3 XT Disk Driver Options (`xd=') 

如果你不幸到得要使用这些旧的、8 比特、以惊人的 125kb/s 速度搬移数据的接口卡那么这节是你的独门解药。侦测这些卡的程序代码寻找从卡上安装进来的基本输出入系统,如果没有,就找不到你的卡。或者,如果 BIOS 的签章字串不被认可那么也会找不到。不管是那一种情况,你都得使用这种型式的启动参数: 



--------------------------------------------------------------------------------

xd=type,irq,iobase,dma_chan


--------------------------------------------------------------------------------

其中 type 值指示该接口卡的制造商,如下: 0=generic; 1=DTC; 2,3,4=Western Digital, 5,6,7=Seagate; 8=OMTI。同一家制造商种类之间的不同仅止於用来侦测的基本输出入系统字串,这个东东若指定 type 就会不使用。 

这些值 xd_setup() 函数不会去检查,并且假设你输入所有共四个值。别让它失望。这儿有个范例使用 WD1002 控制器并关闭/拔掉基本输出入系统,使用‘缺省的’XT 控制器参数: 



--------------------------------------------------------------------------------

xd=2,5,0x320,3

6. 光驱 (Non-SCSI/ATAPI/IDE)

这一节列出属於光盘设备所有可能的启动参数。注意,这不包含 SCSI 或是 IDE/ATAPI 光驱。这些光驱请参阅其它适当的章节。 

注意,大部份光驱都有些文件值得一读,而且它们都放在一个很容易取得的地方:linux/Documentation/cdrom。 


6.1 Aztech 界面 (`aztcd=') 

这种接口卡的语法是: 



--------------------------------------------------------------------------------

aztcd=iobase[,magic_number]


--------------------------------------------------------------------------------

如果你将 magic_number 设为 0x79 那么此驱动程序不管三七二十一都会试著在未知的轫体版本上跑。所有其它的值都会被忽略。 


6.2 CDU-31A 以及 CDU-33A Sony 界面 (`cdu31a=') 

此光驱界面出现在部份 Pro Audio Spectrum 音效卡以及其它 Sony 出产的接口卡上。语法如下: 



--------------------------------------------------------------------------------

cdu31a=iobase,[irq[,is_pas_card]]


--------------------------------------------------------------------------------

指定零作为 IRQ 值告诉此驱动程序不支持植件中断(某些 PAS 的卡)。如果你的卡支持中断,应该使用之以降低此驱动程序的中央处理器使用率。 

如果使用 Pro Audio Spectrum 的接口卡则 `is_pas_card' 栏应该输入 `PAS',若否就不应该使用。 


6.3 CDU-535 Sony 界面 (`sonycd535=') 

这种光驱接口卡的语法是: 



--------------------------------------------------------------------------------

sonycd535=iobase[,irq]


--------------------------------------------------------------------------------

如果你想指定 IRQ 值,输出入地址可以填入零来占位置(placeholder)。 


6.4 GoldStar 界面 (`gscd=') 

这种光驱接口卡的语法是: 



--------------------------------------------------------------------------------

gscd=iobase


--------------------------------------------------------------------------------


6.5 ISP16 界面 (`isp16=') 

这种光驱接口卡的语法是: 



--------------------------------------------------------------------------------


isp16=[port[,irq[,dma]]][[,]drive_type]


--------------------------------------------------------------------------------

使用零作为 irq or dma 表示不使用该功能。可用于 drive_type 的值是 noisp16, Sanyo, Pansonic, Sony, and Mitsumi。使用 noisp16 会彻底关掉这个驱动程序。 


6.6 Mitsumi 标准界面 (`mcd=') 

这种光驱接口卡的语法是: 



--------------------------------------------------------------------------------

mcd=iobase,[irq[,wait_value]]


--------------------------------------------------------------------------------

其中 wait_value 是作为内部的逾时设定,用在那些不听话的机子上,这个功能是否有具体是依编译时期的定义值而定。 


6.7 Mitsumi XA/MultiSession 界面 (`mcdx=') 

目前为止,此‘实验性’的驱动程序有个设定函数,但并未具体任何参数(as of 1.3.15)。它用于与上述驱动程序相同的硬件,但此驱动程序具有更多功能。 


6.8 Optics Storage 界面 (`optcd=') 

这种接口卡的语法是: 



--------------------------------------------------------------------------------

optcd=iobase


--------------------------------------------------------------------------------


6.9 Phillips CM206 界面 (`cm206=') 

这种接口卡的语法是: 



--------------------------------------------------------------------------------

cm206=[iobase][,irq]


--------------------------------------------------------------------------------

这个驱动程序假设介於 3 到 11 之间数字是 IRQ 值,而 0x300 到 0x370 之间的数字则是输出入端口,所以你可以只指定一个值或二个都指定,顺序随意。它也接受 `cm206=auto' 以打开自动侦测。 


6.10 Sanyo 界面 (`sjcd=') 

这种接口卡的语法是: 



--------------------------------------------------------------------------------

sjcd=iobase[,irq[,dma_channel]]


--------------------------------------------------------------------------------


6.11 SoundBlaster Pro 界面 (`sbpcd=') 

这种接口卡的语法是: 



--------------------------------------------------------------------------------

sbpcd=iobase,type


--------------------------------------------------------------------------------

其中的 type 是下列之字串一(大小写有差): `SoundBlaster', `LaserMate', or `SPEA'。输出入地址是光驱的输出入地址,不是该卡音效部份的输出入地址。 
7. 其它硬件设备

其它任何不适合放在上面分类中的设备都堆在这里。 


7.1 以太网络设备 (`ether=') 

不同的驱动程序使用不同的参数,但它们至少都共享 IRQ, I/O 端口地址值以及域名。最标准的格式看起来像: 



--------------------------------------------------------------------------------


ether=irq,iobase[,param_1[,param_2,...param_8]]],name


--------------------------------------------------------------------------------

第一个不是数字的参数被当作域名。param_n 的值(如果配得起来)对每张不同的接口卡/驱动程序通常都代表不同的意义。典型的 param_n 值是用来指定像共享内存地址,界面的选择, DMA 信道等等诸如此类的东东。 

此参数最常见的用法是在缺省值仅侦测到一张网卡的时候强制侦测第二张以太网卡。可以用这个简单的指令达成: 



--------------------------------------------------------------------------------

ether=0,0,eth1


--------------------------------------------------------------------------------

注意,上述范例中 IRQ 与 I/O 地址零告诉驱动程序自动去侦测。 

模组使用者者请注意:如果驱动程序作为执行期间可载入模组(不编译到核心里)使用则上述指令不会强制侦测第二张接口卡。大部份的 Linux 发行套件都使用一个基本的核心配合许许多多做成模组的驱动程序。此 ether= 参数只对直接编译在核心里的驱动程序有效。 

在以太网络说明(Ethernet-HowTo)中对使用多张网卡以及 param_n 值的使用场合,网卡/驱动程序对这些值的具体等等有更完整、更广泛的文件。有兴趣的读者应该参考该文件中有关自己网卡的章节。 Ethernet-HowTo


7.2 软盘驱动程序 (`floppy=') 

软盘驱动程序有许多选项,全部都列在 linux/drivers/block 里的 README.fd 中。这是直接从该档取得的信息。 

floppy=mask,allowed_drive_mask 

设定允许使用之磁盘机比特掩码为 mask 。依缺省,只允许每个软盘控制器的第零及第一个单元。这样做是因为有些非标准的硬件(华硕的 PCI 主机板)在存取第二或第三个单元时会当掉键盘。此选项差不多已经被 cmos 选项给取代了。 

floppy=all_drives 

设定允许使用之磁盘机比特掩码为所有磁盘机。如果你在软盘控制器上接了两个以上的磁盘机的话可以使用。 

floppy=asus_pci 

设定比特掩码为只允许第零及第一个单元。(缺省值) 

floppy=daring 

告诉软盘驱动程序你有个行为良好的软盘控制器。这样运作上会比较有效率、比较平顺,但有些控制器可能无法使用。这可以加速某些部份的运作。 

floppy=0,daring 

告诉软盘驱动程序你的软盘控制器得小心看管。 

floppy=one_fdc 

告诉软盘驱动程序你只有一个软盘控制器。(缺省值) 

floppy=two_fdc or floppy=address,two_fdc 

告诉软盘驱动程序你有两个软盘控制器。第二个软盘控制器假设位於 address 指定的地方。如果没有给 address,假设为 0x370 。 

floppy=thinkpad 

告诉软盘驱动程序你有一台 Thinkpad。 Thinkpads 的磁盘切换侦测线路(disk change line)之使用与一般相反。 

floppy=0,thinkpad 

告诉软盘驱动程序你没有 Thinkpad。 

floppy=drive,type,cmos 

设定 drive 的 cmos 类型为 type。条件是,这个磁盘机在比特掩码中必须是可用的。如果你有两个以上的磁盘机(实体 cmos 只能指定两个)或是你的基本输出入系统使用非标准的 CMOS 类型那这就有用了。把前两个磁盘机的 cmos 设为 0(缺省值)会使得软盘驱动程序为这些磁盘机读取实体 cmos。 

floppy=unexpected_interrupts 

接收到非预期之中断时印出警告讯息(缺省) 

floppy=no_unexpected_interrupts or floppy=L40SX 

接收到非预期之中断时不印出警告讯息。 IBM L40SX 膝上型计算机在某些显示模式下需要它。(这看来是图像与软盘之间的某种相互关系。此非预期之中断只会影响效能,可以安全地忽略。) 


7.3 音效驱动程序 (`sound=') 

音效驱动程序也可以接受启动参数以切换编译时的值。不过并不建议这样做,因为这样会更复杂。相关说明放在(曾经?)Readme.Linux 中,位於 linux/drivers/sound 里。它接受这种型式的参数: 



--------------------------------------------------------------------------------


sound=device1[,device2[,device3...[,device11]]]


--------------------------------------------------------------------------------

其中每个 deviceN 值的格式为下列的 0xTaaaId 而每个比特的使用如下: 

T - 设备种类: 1=FM, 2=SB, 3=PAS, 4=GUS, 5=MPU401, 6=SB16, 7=SB16-MPU401 

aaa - 十六进位的输出入地址。 

I - 十六进位之中断线 (i.e 10=a, 11=b, ...) 

d - 内存直接存取信道。 

如你所见,这相当杂乱,建议你最好把自己设备的值编译进去。使用启动参数 `sound=0' 将会玩全关闭音效驱动程序。 


7.4 总线鼠标驱动程序 (`bmouse=') 

总线鼠标驱动程序只接受一个参数,就是硬件所使用的 IRQ 值。 


7.5 微软总线鼠标驱动程序 (`msmouse=') 

微软鼠标驱动程序只接受一个参数,就是硬件所使用的 IRQ 值。 


7.6 打印机驱动程序 (`lp=') 

在高於 1.3.75 以上的核心上你可以告诉打印机驱动程序使用那个端口以及不使用那个端口。如果你不想让打印机驱动程序拿到所有可用的并口那么後者很方便,这样其它的驱动程序(e.g. PLIP, PPA)就可以使用它们。 

这个参数的格式是多个 i/o, IRQ 的组合。例如, lp=0x3bc,0,0x378,7 会以不需 IRQ(polling) 的模式使用位於 0x3bc 的端口,并且对位於 0x378 的端口使用 IRQ 7。位於 0x278 的端口(如果有的话)将不会被侦测到,因为自动侦测只用于没有 `lp=' 参数的情况下。可以使用 lp=0 关闭整个打印机驱动程序。 


7.7 ICN 整体服务数字网络(ISDN)驱动程序 (`icn=') 

这个整体服务数字网络驱动参数的启动参数格式为: 



--------------------------------------------------------------------------------

icn=iobase,membase,icn_id1,icn_id2


--------------------------------------------------------------------------------

其中 iobase 是该卡的输出入端口地址, membase 是该卡的共享内存基底地址,而那两个 icn_id 是唯一识别的 ASCII 辨识字串。 


7.8 PCBIT ISDN 驱动程序 (`pcbit=') 

这个启动参数格式使用一对整数参数: 



--------------------------------------------------------------------------------

pcbit=membase1,irq1[,membase2,irq2]


--------------------------------------------------------------------------------

其中 membaseN 是第 N 张卡的共享内存基底,而 irqN 是第 N 张卡的中断设定。缺省值是 IRQ 5 以及 membase 0xD000。 


7.9 Teles ISDN 驱动程序 (`teles=') 

这个 ISDN 驱动程序的启动参数格式为: 



--------------------------------------------------------------------------------

teles=iobase,irq,membase,protocol,teles_id


--------------------------------------------------------------------------------

其中 iobase 是该卡的 i/o 端口地址, membase 是该卡的共享内存基底地址,irq 是该卡使用的中断,而 teles_id 是唯一识别的 ASCII 辨识字串。 


7.10 DigiBoard 驱动程序 (`digi=') 

DigiBoard 驱动程序接受由六个逗号隔开之的辨识字串或整数。六个值依序为: 


打开/关闭该卡
卡的种类: PC/Xi(0), PC/Xe(1), PC/Xeve(2), PC/Xem(3)
打开/关闭其它针脚排列(alternate pin arrangement)
该卡上的端口数
该卡设定的输出入端口(如果以字串指定则为十六进位)
记忆窗的基底(如果以字串指定则为十六进位)

正确的启动参数之范例(字串以及整数格式)如: 



--------------------------------------------------------------------------------

digi=E,PC/Xi,D,16,200,D0000
digi=1,0,0,16,512,851968


--------------------------------------------------------------------------------

注意,这个驱动程序若无 digi= 启动参数其缺省输出入为 0x200 ,共享内存基底为 0xD0000 。不执行自动侦测。更进一步的细节可以在 linux/Documentation/digiboard.txt 文件里找到。 


7.11 RISCom/8 多口串行卡驱动程序 (`riscom8=') 

Up to four boards can be supported by supplying four unique i/o port values for each individual board installed. Other details can be found in the file linux/Documentation/riscom8.txt. 

可以支持达四张卡,须提供四个唯一的输出入端口给每张卡。其余细节可以在 linux/Documentation/riscom8.txt 文件里找到。 


7.12 Baycom 串行/并列无线调制解调器 (`baycom=') 

这些设备的启动参数格式如下。 



--------------------------------------------------------------------------------

baycom=modem,io,irq,options[,modem,io,irq,options]


--------------------------------------------------------------------------------

使用 modem=1 表示你有 ser12 设备,modem=2 表示你有 par96 设备。使用 options=0 表示使用硬件 DCD,options=1 则表示使用软件 DCD。 io 以及 irq 跟往常一样是输出入端口以及中断设定。在 /linux/drivers/char/ 目录下的 README.baycom 文件里有更多的细节。