| .\" Copyright (c) 1995,1997 Paul Gortmaker and Andries Brouwer |
| .\" |
| .\" %%%LICENSE_START(GPLv2+_DOC_FULL) |
| .\" This is free documentation; you can redistribute it and/or |
| .\" modify it under the terms of the GNU General Public License as |
| .\" published by the Free Software Foundation; either version 2 of |
| .\" the License, or (at your option) any later version. |
| .\" |
| .\" The GNU General Public License's references to "object code" |
| .\" and "executables" are to be interpreted as the output of any |
| .\" document formatting or typesetting system, including |
| .\" intermediate and printed output. |
| .\" |
| .\" This manual is distributed in the hope that it will be useful, |
| .\" but WITHOUT ANY WARRANTY; without even the implied warranty of |
| .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| .\" GNU General Public License for more details. |
| .\" |
| .\" You should have received a copy of the GNU General Public |
| .\" License along with this manual; if not, see |
| .\" <http://www.gnu.org/licenses/>. |
| .\" %%%LICENSE_END |
| .\" |
| .\" This man page written 950814 by aeb, based on Paul Gortmaker's HOWTO |
| .\" (dated v1.0.1, 15/08/95). |
| .\" Major update, aeb, 970114. |
| .\" |
| .TH BOOTPARAM 7 2021-03-22 "Linux" "Linux Programmer's Manual" |
| .SH NAME |
| bootparam \- introduction to boot time parameters of the Linux kernel |
| .SH DESCRIPTION |
| The Linux kernel accepts certain 'command-line options' or 'boot time |
| parameters' at the moment it is started. |
| In general, this is used to |
| supply the kernel with information about hardware parameters that |
| the kernel would not be able to determine on its own, or to avoid/override |
| the values that the kernel would otherwise detect. |
| .PP |
| When the kernel is booted directly by the BIOS, |
| you have no opportunity to specify any parameters. |
| So, in order to take advantage of this possibility you have to |
| use a boot loader that is able to pass parameters, such as GRUB. |
| .SS The argument list |
| The kernel command line is parsed into a list of strings |
| (boot arguments) separated by spaces. |
| Most of the boot arguments have the form: |
| .PP |
| .in +4n |
| .EX |
| name[=value_1][,value_2]...[,value_10] |
| .EE |
| .in |
| .PP |
| where 'name' is a unique keyword that is used to identify what part of |
| the kernel the associated values (if any) are to be given to. |
| Note the limit of 10 is real, as the present code handles only 10 comma |
| separated parameters per keyword. |
| (However, you can reuse the same |
| keyword with up to an additional 10 parameters in unusually |
| complicated situations, assuming the setup function supports it.) |
| .PP |
| Most of the sorting is coded in the kernel source file |
| .IR init/main.c . |
| First, the kernel |
| checks to see if the argument is any of the special arguments 'root=', |
| \&'nfsroot=', 'nfsaddrs=', 'ro', 'rw', 'debug', or 'init'. |
| The meaning of these special arguments is described below. |
| .PP |
| Then it walks a list of setup functions |
| to see if the specified argument string (such as 'foo') has |
| been associated with a setup function ('foo_setup()') for a particular |
| device or part of the kernel. |
| If you passed the kernel the line |
| foo=3,4,5,6 then the kernel would search the bootsetups array to see |
| if 'foo' was registered. |
| If it was, then it would call the setup |
| function associated with 'foo' (foo_setup()) and hand it the arguments |
| 3, 4, 5, and 6 as given on the kernel command line. |
| .PP |
| Anything of the form 'foo=bar' that is not accepted as a setup function |
| as described above is then interpreted as an environment variable to |
| be set. |
| A (useless?) example would be to use 'TERM=vt100' as a boot |
| argument. |
| .PP |
| Any remaining arguments that were not picked up by the kernel and were |
| not interpreted as environment variables are then passed onto PID 1, |
| which is usually the |
| .BR init (1) |
| program. |
| The most common argument that |
| is passed to the |
| .I init |
| process is the word 'single' which instructs it |
| to boot the computer in single user mode, and not launch all the usual |
| daemons. |
| Check the manual page for the version of |
| .BR init (1) |
| installed on |
| your system to see what arguments it accepts. |
| .SS General non-device-specific boot arguments |
| .TP |
| .B "'init=...'" |
| This sets the initial command to be executed by the kernel. |
| If this is not set, or cannot be found, the kernel will try |
| .IR /sbin/init , |
| then |
| .IR /etc/init , |
| then |
| .IR /bin/init , |
| then |
| .I /bin/sh |
| and panic if all of this fails. |
| .TP |
| .B "'nfsaddrs=...'" |
| This sets the NFS boot address to the given string. |
| This boot address is used in case of a net boot. |
| .TP |
| .B "'nfsroot=...'" |
| This sets the NFS root name to the given string. |
| If this string |
| does not begin with '/' or ',' or a digit, then it is prefixed by |
| \&'/tftpboot/'. |
| This root name is used in case of a net boot. |
| .TP |
| .B "'root=...'" |
| This argument tells the kernel what device is to be used as the root |
| filesystem while booting. |
| The default of this setting is determined |
| at compile time, and usually is the value of the root device of the |
| system that the kernel was built on. |
| To override this value, and |
| select the second floppy drive as the root device, one would |
| use 'root=/dev/fd1'. |
| .IP |
| The root device can be specified symbolically or numerically. |
| A symbolic specification has the form |
| .IR /dev/XXYN , |
| where XX designates |
| the device type (e.g., 'hd' for ST-506 compatible hard disk, with Y in |
| \&'a'\(en'd'; 'sd' for SCSI compatible disk, with Y in 'a'\(en'e'), |
| Y the driver letter or |
| number, and N the number (in decimal) of the partition on this device. |
| .IP |
| Note that this has nothing to do with the designation of these |
| devices on your filesystem. |
| The '/dev/' part is purely conventional. |
| .IP |
| The more awkward and less portable numeric specification of the above |
| possible root devices in major/minor format is also accepted. |
| (For example, |
| .I /dev/sda3 |
| is major 8, minor 3, so you could use 'root=0x803' as an |
| alternative.) |
| .TP |
| .BR "'rootdelay='" |
| This parameter sets the delay (in seconds) to pause before attempting |
| to mount the root filesystem. |
| .TP |
| .BR "'rootflags=...'" |
| This parameter sets the mount option string for the root filesystem |
| (see also |
| .BR fstab (5)). |
| .TP |
| .BR "'rootfstype=...'" |
| The 'rootfstype' option tells the kernel to mount the root filesystem as |
| if it where of the type specified. |
| This can be useful (for example) to |
| mount an ext3 filesystem as ext2 and then remove the journal in the root |
| filesystem, in fact reverting its format from ext3 to ext2 without the |
| need to boot the box from alternate media. |
| .TP |
| .BR 'ro' " and " 'rw' |
| The 'ro' option tells the kernel to mount the root filesystem |
| as 'read-only' so that filesystem consistency check programs (fsck) |
| can do their work on a quiescent filesystem. |
| No processes can |
| write to files on the filesystem in question until it is 'remounted' |
| as read/write capable, for example, by 'mount \-w \-n \-o remount /'. |
| (See also |
| .BR mount (8).) |
| .IP |
| The 'rw' option tells the kernel to mount the root filesystem read/write. |
| This is the default. |
| .TP |
| .B "'resume=...'" |
| This tells the kernel the location of the suspend-to-disk data that you want the machine to resume from after hibernation. |
| Usually, it is the same as your swap partition or file. |
| Example: |
| .IP |
| .in +4n |
| .EX |
| resume=/dev/hda2 |
| .EE |
| .in |
| .TP |
| .B "'reserve=...'" |
| This is used to protect I/O port regions from probes. |
| The form of the command is: |
| .IP |
| .in +4n |
| .EX |
| .BI reserve= iobase,extent[,iobase,extent]... |
| .EE |
| .in |
| .IP |
| In some machines it may be necessary to prevent device drivers from |
| checking for devices (auto-probing) in a specific region. |
| This may be |
| because of hardware that reacts badly to the probing, or hardware |
| that would be mistakenly identified, or merely |
| hardware you don't want the kernel to initialize. |
| .IP |
| The reserve boot-time argument specifies an I/O port region that |
| shouldn't be probed. |
| A device driver will not probe a reserved region, |
| unless another boot argument explicitly specifies that it do so. |
| .IP |
| For example, the boot line |
| .IP |
| .in +4n |
| .EX |
| reserve=0x300,32 blah=0x300 |
| .EE |
| .in |
| .IP |
| keeps all device drivers except the driver for 'blah' from probing |
| 0x300\-0x31f. |
| .TP |
| .B "'panic=N'" |
| By default, the kernel will not reboot after a panic, but this option |
| will cause a kernel reboot after N seconds (if N is greater than zero). |
| This panic timeout can also be set by |
| .IP |
| .in +4n |
| .EX |
| echo N > /proc/sys/kernel/panic |
| .EE |
| .in |
| .TP |
| .B "'reboot=[warm|cold][,[bios|hard]]'" |
| Since Linux 2.0.22, a reboot is by default a cold reboot. |
| One asks for the old default with 'reboot=warm'. |
| (A cold reboot may be required to reset certain hardware, |
| but might destroy not yet written data in a disk cache. |
| A warm reboot may be faster.) |
| By default, a reboot is hard, by asking the keyboard controller |
| to pulse the reset line low, but there is at least one type |
| of motherboard where that doesn't work. |
| The option 'reboot=bios' will |
| instead jump through the BIOS. |
| .TP |
| .BR 'nosmp' " and " 'maxcpus=N' |
| (Only when __SMP__ is defined.) |
| A command-line option of 'nosmp' or 'maxcpus=0' will disable SMP |
| activation entirely; an option 'maxcpus=N' limits the maximum number |
| of CPUs activated in SMP mode to N. |
| .SS Boot arguments for use by kernel developers |
| .TP |
| .B "'debug'" |
| Kernel messages are handed off to a daemon (e.g., |
| .BR klogd (8) |
| or similar) so that they may be logged to disk. |
| Messages with a priority above |
| .I console_loglevel |
| are also printed on the console. |
| (For a discussion of log levels, see |
| .BR syslog (2).) |
| By default, |
| .I console_loglevel |
| is set to log messages at levels higher than |
| .BR KERN_DEBUG . |
| This boot argument will cause the kernel to also |
| print messages logged at level |
| .BR KERN_DEBUG . |
| The console loglevel can also be set on a booted system via the |
| .IR /proc/sys/kernel/printk |
| file (described in |
| .BR syslog (2)), |
| the |
| .BR syslog (2) |
| .B SYSLOG_ACTION_CONSOLE_LEVEL |
| operation, or |
| .BR dmesg (8). |
| .TP |
| .B "'profile=N'" |
| It is possible to enable a kernel profiling function, |
| if one wishes to find out where the kernel is spending its CPU cycles. |
| Profiling is enabled by setting the variable |
| .I prof_shift |
| to a nonzero value. |
| This is done either by specifying |
| .B CONFIG_PROFILE |
| at compile time, or by giving the 'profile=' option. |
| Now the value that |
| .I prof_shift |
| gets will be N, when given, or |
| .BR CONFIG_PROFILE_SHIFT , |
| when that is given, or 2, the default. |
| The significance of this variable is that it |
| gives the granularity of the profiling: each clock tick, if the |
| system was executing kernel code, a counter is incremented: |
| .IP |
| .in +4n |
| .EX |
| profile[address >> prof_shift]++; |
| .EE |
| .in |
| .IP |
| The raw profiling information can be read from |
| .IR /proc/profile . |
| Probably you'll want to use a tool such as readprofile.c to digest it. |
| Writing to |
| .I /proc/profile |
| will clear the counters. |
| .SS Boot arguments for ramdisk use |
| (Only if the kernel was compiled with |
| .BR CONFIG_BLK_DEV_RAM .) |
| In general it is a bad idea to use a ramdisk under Linux\(emthe |
| system will use available memory more efficiently itself. |
| But while booting, |
| it is often useful to load the floppy contents into a |
| ramdisk. |
| One might also have a system in which first |
| some modules (for filesystem or hardware) must be loaded |
| before the main disk can be accessed. |
| .IP |
| In Linux 1.3.48, ramdisk handling was changed drastically. |
| Earlier, the memory was allocated statically, and there was |
| a 'ramdisk=N' parameter to tell its size. |
| (This could also be set in the kernel image at compile time.) |
| These days ram disks use the buffer cache, and grow dynamically. |
| For a lot of information on the current ramdisk |
| setup, see the kernel source file |
| .IR Documentation/blockdev/ramdisk.txt |
| .RI ( Documentation/ramdisk.txt |
| in older kernels). |
| .IP |
| There are four parameters, two boolean and two integral. |
| .TP |
| .B "'load_ramdisk=N'" |
| If N=1, do load a ramdisk. |
| If N=0, do not load a ramdisk. |
| (This is the default.) |
| .TP |
| .B "'prompt_ramdisk=N'" |
| If N=1, do prompt for insertion of the floppy. |
| (This is the default.) |
| If N=0, do not prompt. |
| (Thus, this parameter is never needed.) |
| .TP |
| .BR 'ramdisk_size=N' " or (obsolete) " 'ramdisk=N' |
| Set the maximal size of the ramdisk(s) to N kB. |
| The default is 4096 (4\ MB). |
| .TP |
| .B "'ramdisk_start=N'" |
| Sets the starting block number (the offset on the floppy where |
| the ramdisk starts) to N. |
| This is needed in case the ramdisk follows a kernel image. |
| .TP |
| .B "'noinitrd'" |
| (Only if the kernel was compiled with |
| .B CONFIG_BLK_DEV_RAM |
| and |
| .BR CONFIG_BLK_DEV_INITRD .) |
| These days it is possible to compile the kernel to use initrd. |
| When this feature is enabled, the boot process will load the kernel |
| and an initial ramdisk; then the kernel converts initrd into |
| a "normal" ramdisk, which is mounted read-write as root device; |
| then |
| .I /linuxrc |
| is executed; afterward the "real" root filesystem is mounted, |
| and the initrd filesystem is moved over to |
| .IR /initrd ; |
| finally |
| the usual boot sequence (e.g., invocation of |
| .IR /sbin/init ) |
| is performed. |
| .IP |
| For a detailed description of the initrd feature, see the kernel source file |
| .I Documentation/admin\-guide/initrd.rst |
| .\" commit 9d85025b0418163fae079c9ba8f8445212de8568 |
| (or |
| .I Documentation/initrd.txt |
| before Linux 4.10). |
| .IP |
| The 'noinitrd' option tells the kernel that although it was compiled for |
| operation with initrd, it should not go through the above steps, but |
| leave the initrd data under |
| .IR /dev/initrd . |
| (This device can be used only once: the data is freed as soon as |
| the last process that used it has closed |
| .IR /dev/initrd .) |
| .SS Boot arguments for SCSI devices |
| General notation for this section: |
| .PP |
| .I iobase |
| -- the first I/O port that the SCSI host occupies. |
| These are specified in hexadecimal notation, |
| and usually lie in the range from 0x200 to 0x3ff. |
| .PP |
| .I irq |
| -- the hardware interrupt that the card is configured to use. |
| Valid values will be dependent on the card in question, but will |
| usually be 5, 7, 9, 10, 11, 12, and 15. |
| The other values are usually |
| used for common peripherals like IDE hard disks, floppies, serial |
| ports, and so on. |
| .PP |
| .I scsi\-id |
| -- the ID that the host adapter uses to identify itself on the |
| SCSI bus. |
| Only some host adapters allow you to change this value, as |
| most have it permanently specified internally. |
| The usual default value |
| is 7, but the Seagate and Future Domain TMC-950 boards use 6. |
| .PP |
| .I parity |
| -- whether the SCSI host adapter expects the attached devices |
| to supply a parity value with all information exchanges. |
| Specifying a one indicates parity checking is enabled, |
| and a zero disables parity checking. |
| Again, not all adapters will support selection of parity |
| behavior as a boot argument. |
| .TP |
| .B "'max_scsi_luns=...'" |
| A SCSI device can have a number of 'subdevices' contained within |
| itself. |
| The most common example is one of the new SCSI CD-ROMs that |
| handle more than one disk at a time. |
| Each CD is addressed as a |
| \&'Logical Unit Number' (LUN) of that particular device. |
| But most |
| devices, such as hard disks, tape drives, and such are only one device, |
| and will be assigned to LUN zero. |
| .IP |
| Some poorly designed SCSI devices cannot handle being probed for |
| LUNs not equal to zero. |
| Therefore, if the compile-time flag |
| .B CONFIG_SCSI_MULTI_LUN |
| is not set, newer kernels will by default probe only LUN zero. |
| .IP |
| To specify the number of probed LUNs at boot, one enters |
| \&'max_scsi_luns=n' as a boot arg, where n is a number between one and |
| eight. |
| To avoid problems as described above, one would use n=1 to |
| avoid upsetting such broken devices. |
| .TP |
| .B "SCSI tape configuration" |
| Some boot time configuration of the SCSI tape driver can be achieved |
| by using the following: |
| .IP |
| .in +4n |
| .EX |
| .BI st= buf_size[,write_threshold[,max_bufs]] |
| .EE |
| .in |
| .IP |
| The first two numbers are specified in units of kB. |
| The default |
| .I buf_size |
| is 32k\ B, and the maximum size that can be specified is a |
| ridiculous 16384\ kB. |
| The |
| .I write_threshold |
| is the value at which the buffer is committed to tape, with a |
| default value of 30\ kB. |
| The maximum number of buffers varies |
| with the number of drives detected, and has a default of two. |
| An example usage would be: |
| .IP |
| .in +4n |
| .EX |
| st=32,30,2 |
| .EE |
| .in |
| .IP |
| Full details can be found in the file |
| .I Documentation/scsi/st.txt |
| (or |
| .I drivers/scsi/README.st |
| for older kernels) in the Linux kernel source. |
| .SS Hard disks |
| .TP |
| .B "IDE Disk/CD-ROM Driver Parameters" |
| The IDE driver accepts a number of parameters, which range from disk |
| geometry specifications, to support for broken controller chips. |
| Drive-specific options are specified by using 'hdX=' with X in 'a'\(en'h'. |
| .IP |
| Non-drive-specific options are specified with the prefix 'hd='. |
| Note that using a drive-specific prefix for a non-drive-specific option |
| will still work, and the option will just be applied as expected. |
| .IP |
| Also note that 'hd=' can be used to refer to the next unspecified |
| drive in the (a, ..., h) sequence. |
| For the following discussions, |
| the 'hd=' option will be cited for brevity. |
| See the file |
| .I Documentation/ide/ide.txt |
| (or |
| .I Documentation/ide.txt |
| .\" Linux 2.0, 2.2, 2.4 |
| in older kernels, or |
| .I drivers/block/README.ide |
| in ancient kernels) in the Linux kernel source for more details. |
| .TP |
| .B "The 'hd=cyls,heads,sects[,wpcom[,irq]]' options" |
| These options are used to specify the physical geometry of the disk. |
| Only the first three values are required. |
| The cylinder/head/sectors |
| values will be those used by fdisk. |
| The write precompensation value |
| is ignored for IDE disks. |
| The IRQ value specified will be the IRQ |
| used for the interface that the drive resides on, and is not really a |
| drive-specific parameter. |
| .TP |
| .B "The 'hd=serialize' option" |
| The dual IDE interface CMD-640 chip is broken as designed such that |
| when drives on the secondary interface are used at the same time as |
| drives on the primary interface, it will corrupt your data. |
| Using this |
| option tells the driver to make sure that both interfaces are never |
| used at the same time. |
| .TP |
| .B "The 'hd=noprobe' option" |
| Do not probe for this drive. |
| For example, |
| .IP |
| .in +4n |
| .EX |
| hdb=noprobe hdb=1166,7,17 |
| .EE |
| .in |
| .IP |
| would disable the probe, but still specify the drive geometry so |
| that it would be registered as a valid block device, and hence |
| usable. |
| .TP |
| .B "The 'hd=nowerr' option" |
| Some drives apparently have the |
| .B WRERR_STAT |
| bit stuck on permanently. |
| This enables a work-around for these broken devices. |
| .TP |
| .B "The 'hd=cdrom' option" |
| This tells the IDE driver that there is an ATAPI compatible CD-ROM |
| attached in place of a normal IDE hard disk. |
| In most cases the CD-ROM |
| is identified automatically, but if it isn't then this may help. |
| .TP |
| .B "Standard ST-506 Disk Driver Options ('hd=')" |
| The standard disk driver can accept geometry arguments for the disks |
| similar to the IDE driver. |
| Note however that it expects only three |
| values (C/H/S); any more or any less and it will silently ignore you. |
| Also, it accepts only 'hd=' as an argument, that is, 'hda=' |
| and so on are not valid here. |
| The format is as follows: |
| .IP |
| .in +4n |
| .EX |
| hd=cyls,heads,sects |
| .EE |
| .in |
| .IP |
| If there are two disks installed, the above is repeated with the |
| geometry parameters of the second disk. |
| .SS Ethernet devices |
| Different drivers make use of different parameters, but they all at |
| least share having an IRQ, an I/O port base value, and a name. |
| In its most generic form, it looks something like this: |
| .PP |
| .in +4n |
| .EX |
| ether=irq,iobase[,param_1[,...param_8]],name |
| .EE |
| .in |
| .PP |
| The first nonnumeric argument is taken as the name. |
| The param_n values (if applicable) usually have different meanings for each |
| different card/driver. |
| Typical param_n values are used to specify |
| things like shared memory address, interface selection, DMA channel |
| and the like. |
| .PP |
| The most common use of this parameter is to force probing for a second |
| ethercard, as the default is to probe only for one. |
| This can be accomplished with a simple: |
| .PP |
| .in +4n |
| .EX |
| ether=0,0,eth1 |
| .EE |
| .in |
| .PP |
| Note that the values of zero for the IRQ and I/O base in the above |
| example tell the driver(s) to autoprobe. |
| .PP |
| The Ethernet-HowTo has extensive documentation on using multiple |
| cards and on the card/driver-specific implementation |
| of the param_n values where used. |
| Interested readers should refer to |
| the section in that document on their particular card. |
| .SS The floppy disk driver |
| There are many floppy driver options, and they are all listed in |
| .I Documentation/blockdev/floppy.txt |
| (or |
| .I Documentation/floppy.txt |
| in older kernels, or |
| .I drivers/block/README.fd |
| for ancient kernels) in the Linux kernel source. |
| See that file for the details. |
| .SS The sound driver |
| The sound driver can also accept boot arguments to override the compiled-in |
| values. |
| This is not recommended, as it is rather complex. |
| It is described in the Linux kernel source file |
| .IR Documentation/sound/oss/README.OSS |
| .RI ( drivers/sound/Readme.linux |
| in older kernel versions). |
| It accepts |
| a boot argument of the form: |
| .PP |
| .in +4n |
| .EX |
| sound=device1[,device2[,device3...[,device10]]] |
| .EE |
| .in |
| .PP |
| where each deviceN value is of the following format 0xTaaaId and the |
| bytes are used as follows: |
| .PP |
| T \- device type: 1=FM, 2=SB, 3=PAS, 4=GUS, 5=MPU401, 6=SB16, |
| 7=SB16-MPU401 |
| .PP |
| aaa \- I/O address in hex. |
| .PP |
| I \- interrupt line in hex (i.e., 10=a, 11=b, ...) |
| .PP |
| d \- DMA channel. |
| .PP |
| As you can see, it gets pretty messy, and you are better off to compile |
| in your own personal values as recommended. |
| Using a boot argument of |
| \&'sound=0' will disable the sound driver entirely. |
| .SS The line printer driver |
| .TP |
| .B "'lp='" |
| .br |
| Syntax: |
| .IP |
| .in +4n |
| .EX |
| lp=0 |
| lp=auto |
| lp=reset |
| lp=port[,port...] |
| .EE |
| .in |
| .IP |
| You can tell the printer driver what ports to use and what ports not |
| to use. |
| The latter comes in handy if you don't want the printer driver |
| to claim all available parallel ports, so that other drivers |
| (e.g., PLIP, PPA) can use them instead. |
| .IP |
| The format of the argument is multiple port names. |
| For example, |
| lp=none,parport0 would use the first parallel port for lp1, and |
| disable lp0. |
| To disable the printer driver entirely, one can use |
| lp=0. |
| .\" .SH AUTHORS |
| .\" Linus Torvalds (and many others) |
| .SH SEE ALSO |
| .BR klogd (8), |
| .BR mount (8) |
| .PP |
| For up-to-date information, see the kernel source file |
| .IR Documentation/admin\-guide/kernel\-parameters.txt . |