BOOTPARAM - Linux手册页
Linux程序员手册 第7部分
更新日期: 2017-09-15
名称
bootparam-Linux内核的启动时间参数简介
说明
Linux内核在启动时就接受某些"命令行选项"或"启动时间参数"。通常,它用于向内核提供有关内核无法自行确定的硬件参数的信息,或用于避免/覆盖内核否则会检测到的值。
当BIOS直接引导内核时,您没有机会指定任何参数。因此,为了利用这种可能性,您必须使用能够传递参数的引导加载程序,例如GRUB。
The argument list
内核命令行被解析为由空格分隔的字符串(引导参数)列表。大多数引导参数的格式如下:
name[=value_1][,value_2]...[,value_10]
其中,"名称"是唯一的关键字,用于标识要赋予关联值(如果有)的内核部分。请注意,限制为10是真实的,因为当前代码每个关键字只能处理10个逗号分隔的参数。 (但是,在异常复杂的情况下,假设安装程序功能支持,则您可以重复使用同一关键字,最多可以再使用10个参数。)
大多数排序都编码在内核源文件init / main.c中。首先,内核检查参数是否为特殊参数'root =','nfsroot =','nfsaddrs =','ro','rw','debug'或'init'中的任何一个。这些特殊参数的含义如下所述。
然后,它遍历安装函数的列表,以查看指定的参数字符串(例如'foo')是否已与特定设备或内核部分的安装函数('foo_setup()')相关联。如果您在内核行foo = 3,4,5,6中传递了内核,则内核将搜索bootsetups数组以查看是否已注册'foo'。如果是的话,它将调用与'foo'相关联的安装函数(foo_setup()),并将其参数3、4、5和6传递给内核命令行。
如上所述,任何形式'foo = bar'未被接受为设置函数的内容,都将被解释为要设置的环境变量。一个(无用的?)示例将使用'TERM = vt100'作为引导参数。
然后,将所有未被内核吸收且未被解释为环境变量的剩余参数传递给PID 1,该参数通常是init(1)程序。传递给init进程的最常见参数是"单"一词,该词指示其以单用户模式启动计算机,而不启动所有常用的守护程序。在手册页上查看系统上安装的init(1)的版本,以查看它接受哪些参数。
General non-device-specific boot arguments
- 'init=...'
- 这将设置要由内核执行的初始命令。如果未设置或无法找到,则内核将尝试/ sbin / init,然后/ etc / init,然后/ bin / init,然后/ bin / sh,如果所有操作均失败,则执行panic。
- 'nfsaddrs=...'
- 这会将NFS引导地址设置为给定的字符串。如果是网络引导,则使用该引导地址。
- 'nfsroot=...'
- 这会将NFS根名称设置为给定的字符串。如果该字符串不是以" /"或","或数字开头,则以" / tftpboot /"作为前缀。如果是网络引导,则使用此根名称。
- 'root=...'
- 此参数告诉内核引导时将哪个设备用作根文件系统。此设置的默认值是在编译时确定的,通常是构建内核的系统的根设备的值。要覆盖此值,并选择第二个软盘驱动器作为根设备,可以使用" root = / dev / fd1"。
- 根设备可以用符号或数字指定。符号规范的格式为/ dev / XXYN,其中XX表示设备类型(例如,对于ST-506兼容硬盘为" hd",在" a'-'d"中带有Y;对于SCSI兼容磁盘为" sd", Y在" a'-'e"中),Y是驱动程序字母或数字,而N是此设备上分区的编号(十进制)。
- 请注意,这与文件系统上这些设备的名称无关。 " / dev /"部分纯粹是常规的。
- 也可以接受上述主要/次要格式的可能的根设备的更笨拙和更不便于移植的数字规范。 (例如,/ dev / sda3为主要8,次要3,因此您可以使用'root = 0x803'作为替代。)
- 'rootdelay='
- 此参数将尝试挂载根文件系统之前的延迟(以秒为单位)设置为暂停。
- 'rootflags=...'
- 此参数设置根文件系统的安装选项字符串(另请参见fstab(5))。
- 'rootfstype=...'
- 'rootfstype'选项告诉内核安装根文件系统,就好像它位于指定类型的位置一样。例如,这对于将ext3文件系统挂载为ext2然后在根文件系统中删除日志很有用,实际上无需将其从备用介质启动即可将其格式从ext3还原为ext2。
- 'ro'and 'rw'
- " ro"选项告诉内核将根文件系统安装为"只读",以便文件系统一致性检查程序(fsck)可以在静态文件系统上工作。直到例如通过" mount -w -n -o remount /"将其"挂载"为具有读/写能力的进程,任何进程都无法写入该文件系统上的文件。 (另请参见mount(8)。)
- 'rw'选项告诉内核以读/写方式挂载根文件系统。这是默认值。
- 'resume=...'
- 这告诉内核您希望计算机在休眠后从中恢复的磁盘暂挂数据的位置。通常,它与交换分区或文件相同。例:
resume=/dev/hda2
- 'reserve=...'
- 这用于保护I / O端口区域免受探针的侵害。该命令的形式为:
reserve=iobase,extent[,iobase,extent]...
- 在某些机器中,可能有必要阻止设备驱动程序检查特定区域中的设备(自动探测)。这可能是由于对探测做出不良反应的硬件,或者将被错误识别的硬件,或者仅仅是您不希望内核初始化的硬件。
- reserve boot-time参数指定不应探查的I / O端口区域。设备驱动程序将不会探查保留区域,除非另一个引导参数明确指定要这样做。
- 例如,启动行
reserve=0x300,32 blah=0x300
- 保留" blah"驱动程序以外的所有设备驱动程序探测0x300-0x31f。
- 'panic=N'
- 默认情况下,内核不会在出现紧急情况后重新启动,但是此选项将在N秒后(如果N大于零)导致内核重新启动。也可以通过以下方式设置此紧急超时
echo N > /proc/sys/kernel/panic
- 'reboot=[warm|cold][,[bios|hard]]'
- 从Linux 2.0.22开始,默认情况下,重启是冷重启。一个要求使用'reboot = warm'的旧默认值。 (可能需要冷重启才能重置某些硬件,但可能会破坏磁盘缓存中尚未写入的数据。热重启可能会更快。)默认情况下,通过要求键盘控制器向重置线发出脉冲,很难进行重启。低,但至少有一种类型的主板不起作用。选项'reboot = bios'将改为通过BIOS跳转。
- 'nosmp'and 'maxcpus=N'
- (仅当定义了__SMP__时。)命令行选项'nosmp'或'maxcpus = 0'将完全禁用SMP激活。选项'maxcpus = N'将在SMP模式下激活的最大CPU数量限制为N。
Boot arguments for use by kernel developers
- 'debug'
- 内核消息会移交给守护程序(例如klogd(8)或类似程序),以便可以将它们记录到磁盘上。优先级高于console_loglevel的消息也会打印在控制台上。 (有关日志级别的讨论,请参见syslog(2)。)默认情况下,console_loglevel设置为以高于KERN_DEBUG的级别记录消息。该引导参数将使内核也打印在KERN_DEBUG级别记录的消息。也可以通过/ proc / sys / kernel / printk文件(在syslog(2)中进行描述),syslog(2)SYSLOG_ACTION_CONSOLE_LEVEL操作或dmesg(8)在启动的系统上设置控制台日志级别。
- 'profile=N'
- 如果希望发现内核在哪里花费其CPU周期,则可以启用内核分析功能。通过将变量prof_shift设置为非零值来启用分析。这可以通过在编译时指定CONFIG_PROFILE或通过提供'profile ='选项来完成。现在,如果给定了prof_shift的值,则将为N;如果给定,则值为CONFIG_PROFILE_SHIFT;或者,默认值为2。此变量的意义在于,它提供了性能分析的粒度:每个时钟滴答,如果系统正在执行内核代码,则将增加一个计数器:
profile[address >> prof_shift]++;
- 可以从/ proc / profile中读取原始配置文件信息。可能需要使用readprofile.c之类的工具来消化它。写入/ proc / profile将清除计数器。
Boot arguments for ramdisk use
(仅当内核是使用CONFIG_BLK_DEV_RAM编译的。)通常,在Linux下使用ramdisk是一个坏主意-系统将更有效地使用可用内存。但是在引导时,将软盘内容加载到ramdisk中通常很有用。可能还有一个系统,在该系统中,必须先加载一些模块(用于文件系统或硬件),然后才能访问主磁盘。
- 在Linux 1.3.48中,大大改变了ramdisk的处理方式。之前,内存是静态分配的,并且有一个" ramdisk = N"参数来说明其大小。 (这也可以在编译时在内核映像中设置。)如今,ram磁盘使用缓冲区高速缓存并动态增长。有关当前ramdisk设置的大量信息,请参阅内核源文件Documentation / blockdev / ramdisk.txt(在旧内核中为Documentation / ramdisk.txt)。
- 有四个参数,两个布尔值和两个整数。
- 'load_ramdisk=N'
- 如果N = 1,请加载虚拟磁盘。如果N = 0,则不加载虚拟磁盘。 (这是默认设置。)
- 'prompt_ramdisk=N'
- 如果N = 1,则提示插入软盘。 (这是默认设置。)如果N = 0,则不提示。 (因此,永远不需要此参数。)
- 'ramdisk_size=N'or (obsolete) 'ramdisk=N'
- 将虚拟磁盘的最大大小设置为N kB。默认值为4096(4 MB)。
- 'ramdisk_start=N'
- 将起始块号(虚拟磁盘开始的软盘上的偏移量)设置为N。如果虚拟磁盘遵循内核映像,则需要此代码。
- 'noinitrd'
- (只有内核是使用CONFIG_BLK_DEV_RAM和CONFIG_BLK_DEV_INITRD编译的。)这些天,可以编译内核以使用initrd。启用此功能后,引导过程将加载内核和初始虚拟磁盘。然后内核将initrd转换为一个"正常"的ramdisk,该ramdisk作为根设备读写安装。然后执行/ linuxrc;之后,安装"真实的"根文件系统,并将initrd文件系统移至/ initrd;最后执行通常的启动顺序(例如,/ sbin / init的调用)。
- 有关initrd功能的详细说明,请参见内核源文件Documentation / admin-guide / initrd.rst(或Linux 4.10之前的Documentation / initrd.txt)。
- " noinitrd"选项告诉内核,尽管它是为使用initrd操作而编译的,但不应执行上述步骤,而应将initrd数据保留在/ dev / initrd下。 (该设备只能使用一次:使用它的最后一个进程关闭/ dev / initrd后,数据将被释放。)
Boot arguments for SCSI devices
本节的一般符号:
iobase-SCSI主机占用的第一个I / O端口。这些以十六进制表示法指定,通常在0x200至0x3ff的范围内。
irq-卡配置为使用的硬件中断。有效值取决于所使用的卡,但通常为5、7、9、10、11、12和15。其他值通常用于通用外围设备,例如IDE硬盘,软盘,串行端口和以此类推。
scsi-id-主机适配器用于在SCSI总线上标识自身的ID。仅某些主机适配器允许您更改此值,因为大多数适配器是在内部永久指定的。通常的默认值为7,但是Seagate和Future Domain TMC-950板使用6。
奇偶校验-SCSI主机适配器是否希望连接的设备在所有信息交换中提供奇偶校验值。指定1表示启用了奇偶校验,而指定零则禁用奇偶校验。同样,并非所有适配器都支持选择奇偶校验行为作为引导参数。
- 'max_scsi_luns=...'
- SCSI设备可以在其内部包含多个"子设备"。最常见的示例是一次可以处理多个磁盘的新SCSI CD-ROM。每个CD都以该特定设备的"逻辑单元号"(LUN)寻址。但是大多数设备(例如硬盘,磁带驱动器等)只是一台设备,并且将被分配给LUN零。
- 一些设计欠佳的SCSI设备无法处理被探查的不等于零的LUN。因此,如果未设置编译时标志CONFIG_SCSI_MULTI_LUN,则默认情况下,较新的内核将仅探测LUN零。
- 要指定引导时检测到的LUN的数量,请输入" max_scsi_luns = n"作为引导参数,其中n是介于1到8之间的数字。为了避免上述问题,可以使用n = 1来避免损坏此类损坏的设备。
- SCSI tape configuration
- 可以使用以下方法来完成SCSI磁带驱动程序的某些引导时间配置:
st=buf_size[,write_threshold[,max_bufs]]
- 前两个数字以kB为单位指定。默认的buf_size为32kB,可以指定的最大大小为16384kB。 write_threshold是将缓冲区提交到磁带的值,默认值为30 kB。缓冲区的最大数量随检测到的驱动器的数量而变化,默认值为2。一个示例用法是:
st=32,30,2
- 可以在Linux内核源代码中的文档Documentation / scsi / st.txt(或对于较早版本的内核,为drivers / scsi / README.st)中找到完整的详细信息。
Hard disks
- IDE Disk/CD-ROM Driver Parameters
- IDE驱动程序接受许多参数,范围从磁盘几何规格到支持损坏的控制器芯片。通过将'hdX ='与X的'a'-'h'一起使用来指定特定于驱动器的选项。
- 非特定于驱动器的选项以前缀" hd ="指定。请注意,为非特定于驱动器的选项使用特定于驱动器的前缀仍然可以使用,并且该选项将仅按预期应用。
- 还要注意," hd ="可用于引用(a,...,h)序列中的下一个未指定的驱动器。对于以下讨论,为简便起见,将引用" hd ="选项。有关更多详细信息,请参阅Linux内核源文件中的文件Documentation / ide / ide.txt(或在较早版本的内核中为Documentation / ide.txt,或在较早版本的内核中为drivers / block / README.ide)。
- The 'hd=cyls,heads,sects[,wpcom[,irq]]' options
- 这些选项用于指定磁盘的物理几何形状。仅需要前三个值。柱面/头/扇区值将是fdisk使用的值。 IDE磁盘将忽略写预补偿值。指定的IRQ值将是驱动器所驻留的接口所使用的IRQ,实际上不是驱动器特定的参数。
- The 'hd=serialize' option
- 双IDE接口CMD-640芯片按设计要求损坏,因此,如果在辅助接口上使用驱动器与在主接口上同时使用驱动器,则会损坏您的数据。使用此选项可以告诉驱动程序确保两个接口都不能同时使用。
- The 'hd=noprobe' option
- 不要探测该驱动器。例如,
hdb=noprobe hdb=1166,7,17
- 将禁用探针,但仍指定驱动器的几何形状,以便将其注册为有效的块设备,因此可用。
- The 'hd=nowerr' option
- 某些驱动器显然具有永久固定的WRERR_STAT位。这样可以解决这些损坏的设备。
- The 'hd=cdrom' option
- 这告诉IDE驱动程序附带有一个ATAPI兼容CD-ROM来代替普通的IDE硬盘。在大多数情况下,会自动识别CD-ROM,但如果不是这样,则可能会有所帮助。
- Standard ST-506 Disk Driver Options ('hd=')
- 与IDE驱动程序类似,标准磁盘驱动程序可以接受磁盘的几何参数。但是请注意,它只期望三个值(C / H / S);或多或少,它将默默地忽略您。此外,它仅接受" hd ="作为参数,即" hda ="等在此处无效。格式如下:
hd=cyls,heads,sects
- 如果安装了两个磁盘,则对第二个磁盘的几何参数重复以上操作。
Ethernet devices
不同的驱动程序使用不同的参数,但是它们至少共享一个IRQ,一个I / O端口基本值和一个名称。以其最通用的形式,它看起来像这样:
ether=irq,iobase[,param_1[,...param_8]],name
第一个非数字参数用作名称。对于每个不同的卡/驱动程序,param_n值(如果适用)通常具有不同的含义。典型的param_n值用于指定诸如共享内存地址,接口选择,DMA通道等内容。
此参数最常见的用途是强制探测第二个以太网卡,因为默认设置仅探测一个。这可以通过简单的方法来完成:
ether=0,0,eth1
请注意,上例中IRQ和I / O基的零值告诉驱动程序自动探测。
关于如何使用多个卡以及使用的卡/驱动程序特定的param_n值实现,Ethernet-HowTo有大量文档。有兴趣的读者应参阅其特定卡上该文档中的部分。
The floppy disk driver
软盘驱动程序选项很多,它们都列在Linux内核源代码中的Documentation / blockdev / floppy.txt(或在较早版本的内核中为Documentation / floppy.txt,对于较早的内核为driver / block / README.fd)中。有关详细信息,请参见该文件。
The sound driver
声音驱动程序还可以接受引导参数以覆盖已编译的值。不建议这样做,因为它很复杂。在Linux内核源文件Documentation / sound / oss / README.OSS(旧内核版本中为drivers / sound / Readme.linux)中对此进行了描述。它接受以下形式的引导参数:
sound=device1[,device2[,device3...[,device10]]]
其中每个deviceN值的格式都为0xTaaaId,其字节使用方式如下:
T-设备类型:1 = FM,2 = SB,3 = PAS,4 = GUS,5 = MPU401、6 = SB16、7 = SB16-MPU401
aaa-十六进制的I / O地址。
I-以十六进制表示的中断行(即10 = a,11 = b,...)
d-DMA通道。
如您所见,它变得非常凌乱,建议您按照自己的个人价值观进行编译。使用引导参数'sound = 0'将完全禁用声音驱动程序。
The line printer driver
- 'lp='
- 句法:
lp=0 lp=auto lp=reset lp=port[,port...]
- 您可以告诉打印机驱动程序要使用哪些端口以及不使用哪些端口。如果您不希望打印机驱动程序声明所有可用的并行端口,则后者会派上用场,以便其他驱动程序(例如PLIP,PPA)可以代替使用它们。
- 参数的格式为多个端口名。例如,lp = none,parport0将对lp1使用第一个并行端口,并禁用lp0。要完全禁用打印机驱动程序,可以使用lp = 0。
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。