在路上...

The development of life
我们一直都在努力,有您的支持,将走得更远...

站内搜索: Google

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
一般无关设备特性的启动参数

 

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

 

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 存取。

 

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

 

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

 

`ramdisk_start=' 参数

 

为了使核心映像能够与压缩的内存磁盘映像放在一张软盘内, 所以加入这个 `ramdisk_start=<offset>' 指令。 核心不能够放在压缩过的内存磁盘之文件系统映像里, 因为它得从最开始的第零磁区开始放置, 如此基本输出入系统(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。 此外,最新版的 LILOLOADLIN 应该会包含其它有用的信息。

 

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=98304kmem=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 里面的东西。

 

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

 

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

 

`nfsroot=' 参数

 

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

 


nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]

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

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

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

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

 

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=<my-ip>:<serv-ip>:<gw-ip>:<netmask>:<name>:<dev>:<auto>

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

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

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

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

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

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

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

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

 

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, 所以如果你想使用这个特性那么你就得打开这个选项。

posted on 2009-08-31 20:52  palam  阅读(833)  评论(0编辑  收藏  举报