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的页表,这要在内核配置时申明。

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!