bootparam(7) Miscellaneous Information Manual bootparam(7) NOMBRE bootparam - introduccion a los parametros de arranque del nucleo de Linux DESCRIPCION El nucleo Linux acepta ciertas 'opciones de la linea de orden' o 'parametros de arranque' cuando se carga. En general esto sirve para suministrar al nucleo informacion sobre parametros del equipo que el nucleo es incapaz de determinar por si mismo, o para evitar o cambiar los valores que el nucleo detectaria. Cuando la BIOS inicia directamente el nucleo, no es posible especificar ningun parametro, para emplear esta posibilidad debe utilizarse un cargador de inicio capaz de pasar parametros (por ejemplo GRUB). La lista de argumentos La linea de ordenes del nucleo se analiza y divide en una lista de cadenas de caracteres (argumentos del arranque) separadas por espacios. La mayoria de argumentos de arranque toman la forma: nombre[=valor_1][,valor_2]...[,valor_10] donde 'nombre' es una palabra reservada unica que se emplea para identificar a que parte del nucleo se va a dar los valores (si hay alguno) asociados. Observe que el limite de 10 es real, puesto que el codigo actual solo maneja 10 parametros separados por coma por cada palabra reservada. Sin embargo, se puede reutilizar la misma palabra con hasta 10 parametros adicionales mas en situaciones inusualmente complicadas, suponiendo que la funcion setup ---vea un par de parrafos mas adelante--- incluya soporte para ello. La mayor parte de la gestion esta codificada en el archivo del nucleo de linux /init/main.c. Primero el nucleo mira a ver si el argumento es uno de los especiales 'root=', 'nfsroot=', 'nfsaddrs=', 'ro', 'rw', 'debug' o 'init'. El significado de estos argumentos especiales se describe mas adelante. Luego recorre una lista de funciones setup para ver si la cadena del argumento especificado (como 'fu') ha sido asociada con una funcion setup ('fu_setup()') para un dispositivo particular o parte del nucleo. Si se le pasa al nucleo la linea fu=3,4,5,6 entonces el nucleo buscara en el vector bootsetups si 'fu' ha sido registrada. Si lo ha sido, entonces llamara a la funcion setup asociada con 'fu' (fu_setup()) y le pasara los argumentos 3, 4, 5 y 6 tal como se dieron en la linea de ordenes del nucleo. Cualquier cosa de la forma 'fu=bar' que no se acepte como una funcion setup tal como se ha descrito arriba se interpreta entonces como una variable de entorno que toma un valor. Un (?inutil?) ejemplo seria poner 'TERM=vt100' como un argumento de arranque. Cualquier argumento restante que no han sido tomados por el nucleo ni han sido interpretados como variables de entorno se pasan entonces al PID 1, que normalmente es el programa init(1). El mas usual de ellos es la palabra 'single', que ordena a init arrancar el sistema en modo monousuario, sin lanzar los demonios usuales. Eche un vistazo a la pagina del manual de la version de init() instalada en su sistema para ver que argumentos acepta. Opciones de inicio no especificas de ningun dispositivo 'init=...' Esto indica el programa inicial que ejecutara el nucleo. Si no se establece o no se puede encontrar, el nucleo intentara ejecutar /sbin/init, luego /etc/init, despues /bin/init, mas tarde /bin/sh y acabara dando un mensaje de panico (y con razon) si todo esto falla. 'nfsaddrs=...' Esto pone la direccion de arranque de NFS con la cadena dada. Esta direccion de arranque se emplea en caso de un arranque remoto, por red. 'nfsroot=...' Esto pone el nombre de la raiz de NFS con la cadena dada. Si esta cadena no empieza con '/' ni ',' ni un digito, entonces se le anade el prefijo '/tftpboot/'. Este nombre de raiz se emplea en caso de un arranque remoto. 'root=...' Este argumento le dice al nucleo que dispositivo se va a emplear como el sistema de archivos raiz al arrancar. El valor predeterminado de este valor se pone en tiempo de compilacion, usualmente como el dispositivo raiz del sistema donde se construyo el nucleo. Para tomar otro valor, y seleccionar por ejemplo la segunda disquetera como el dispositivo raiz, uno utilizaria 'root=/dev/fd1'. El dispositivo raiz se puede definir simbolica o numericamente. Una definicion simbolica tiene el formato: dev/XXYN donde XX denota el tipo de dispositivo (por ejemplo 'hd' para ST-506 compatibles con un disco duro, siendo Y 'a'-'d'; 'sd' definiria un disco compatible SCSI siendo Y a'-'e'), Y representa una letra o cifra del driver y N el numero (en formato decimal) de particion del dispositivo Observe que esto no tiene nada que ver con la designacion de estos dispositivos en el sistema de archivos. La parte '/dev/' es puramente convencional. La especificacion numerica, mas fea y menos transportable, de los posibles dispositivos raiz de arriba en formato mayor/menor, se acepta tambien. (Por ejemplo, /dev/sda3 tiene de numero mayor 8 y de menor 3, asi que se podria poner 'root=0x803' de forma alternativa.) 'rootdelay=' Este parametro define el tiempo de latencia (en segundos) antes de intentar montar el sistema de archivos raiz. 'rootflags=...' Este parametro define las opciones de montaje para el sistema de archivos raiz. Consulte fstab(5). 'rootfstype=...' La opcion 'rootfstype' indica al nucleo que el sistema de archivo raiz debe montarse como estuviese en el formato indicado. Un ejemplo de la utilidad de esta opcion seria montar un sistema de archivos ext3 como si fuese ext2 eliminando asi la parte transaccional migrando asi de ext3 a ext2 directamente, sin necesidad de hacerlo desde un medio externo. 'ro' y 'rw' La opcion 'ro' le dice al nucleo que monte el sistema de archivos raiz como 'de lectura exclusiva', de modo que el programa de comprobacion de consistencia del sistema de archivos (fsck) pueda hacer su trabajo en un sistema de archivos sin actividad. Ningun proceso puede escribir en archivos del sistema de archivos en cuestion hasta que este se remonte con permisos para lectura y escritura, por ejemplo mediante 'mount -w -n -o remount /'. (Vea tambien mount(8).) La opcion 'rw' le dice al nucleo que monte el sistema de archivos raiz para lectura y escritura. Esto es lo que ocurre por defecto. 'resume=...' Indica al nucleo la localizacion de toda la informacion para la reanudacion despues de hibernar. Suele coincidir con el archivo o particion swap. Por ejemplo: resume=/dev/hda2 'reserve=...' Se emplea para proteger regiones de E/S de pruebas. La forma de la orden es: reserve=baseE/S,extension[,baseE/S,extension]... En algunos equipos puede ser necesario evitar que ciertos controladores de perifericos comprueben la existencia de estos (auto-pruebas) en una region especifica. Esto puede ser porque algun dispositivo emite un error en la prueba, o porque algun otro se identifique erroneamente, o simplemente porque no queremos que el nucleo inicialice cierto hardware. El argumento de arranque reserve especifica una region de un puerto de E/S que no debe ser probado. Un controlador no probara una region reservada, a menos que otro argumento de arranque explicitamente le especifique que lo haga. Por ejemplo, la linea de arranque reserve=0x300,32 blah=0x300 hace que ningun controlador pruebe la region 0x300--0x31f excepto el de 'blah'. 'panic=N' Por omision el nucleo no se reiniciara tras un error de panico, esta opcion hara que el nucleo rearranque tras N segundos (si N es mayor que cero). Este tiempo de latencia tambien se puede definir con echo N > /proc/sys/kernel/panic 'reboot=[warm|cold][,[bios|hard]]' Desde la version Linux 2.0.22 un rearranque es por omision un rearranque en frio. Uno obtiene el comportamiento antiguo con 'reboot=warm'. (Un rearranque en frio puede ser necesario para inicializar cierto hardware, pero puede destruir datos no escritos aun en un cache de disco. Un rearranque en caliente puede ser mas rapido.) 'nosmp' y 'maxcpus=N' (Solo cuando se defina __SMP__ .) Una opcion de linea de orden como 'nosmp' o 'maxcpus=0' deshabilitara por completo MPS (multiproceso simetrico); una opcion como 'maxcpus=N' limita el numero maximo de UCPs activados en el modo MPS a N. Argumentos de arranque para uso de los desarrolladores del nucleo 'debug' Los mensajes del nucleo son gestionados por el demonio de registro del nucleo (por ejemplo klogd(8) o similar) de modo que pueden ser registrados en disco. Los mensajes con una prioridad mayor que console_loglevel tambien se muestran en la consola. (Para estos niveles, consulte syslog(2).) Por defecto console_loglevel esta puesta de modo que registre cualquier cosa mas importante que mensajes KERN_DEBUG. El nivel de registro de la consola se puede establecer tambien en tiempo de ejecucion mediante el archivo /proc/sys/kernel/printk (descrito en syslog(2)), la operacion de syslog(2) SYSLOG_ACTION_CONSOLE_LEVEL o bien dmesg(8). 'profile=N' Es posible habilitar una funcion de perfil del nucleo, si uno desea saber donde esta el nucleo gastando sus ciclos de CPU. El perfil se habilita poniendo la variable prof_shift a un valor distinto de cero. Esto se hace bien especificando CONFIG_PROFILE en la compilacion, o mediante la opcion 'profile='. Ahora el valor que tendra prof_shift sera N, cuando se de, o CONFIG_PROFILE_SHIFT, cuando se haya dado este, o 2, el valor predeterminado. La significancia de esta variable es que da la granularidad del perfil: para cada pulso del reloj, si el sistema esta ejecutando codigo del nucleo, se incrementa un contador: profile[address >> prof_shift]++; La informacion de perfil, sin procesar, puede verse directamente en /proc/profile aunque es preferible emplear una herramienta como readpropfile.c para verla mejor. Escribir en /proc/profile limpiara los contadores. Argumentos de arranque para uso de disco en memoria (Solo si el nucleo ha sido compilado con CONFIG_BLK_DEV_RAM.) En general es una mala idea emplear un disco RAM en Linux; el sistema utilizara la memoria disponible mas eficientemente sin el. Pero durante el arranque es util a menudo cargar los contenidos del disquete en un disco RAM. Uno tambien podria tener un sistema en el cual deban cargarse primero algunos modulos (de sistemas de archivos o perifericos) antes de que se pueda acceder al disco principal. En Linux 1.3.48 se cambio radicalmente el manejo de discos RAM. Anteriormente, la memoria se asignaba estaticamente, y habia un parametro 'ramdisk=N' para indicar su tamano (que tambien podia establecerse en la imagen del nucleo al compilarlo). Actualmente los discos RAM emplean el bufer cache, y crecen dinamicamente. Para mas informacion sobre esto puede leer el archivo Documentation/blockdev/ramdisk.txt (Documentation/ramdisk.txt en nucleos mas antiguos). Hay cuatro parametros, dos booleanos y dos enteros. 'load_ramdisk=N' Si N=1, carga un disco RAM. Si N=0, no se carga. (Este es el comportamiento predeterminado.) 'prompt_ramdisk=N' Si N=1, pide la insercion del disquete. (Este es el comportamiento predeterminado.) Si N=0, no se pregunta; por tanto, este parametro nunca se necesita. 'ramdisk_size=N' o (anticuado) 'ramdisk=N' Pone el tamano maximo del disco RAM (o de los discos) a N kB. El valor predeterminado es 4096 (esto es, 4 MB). 'ramdisk_start=N' Pone el numero del bloque inicial (el desplazamiento desde el principio en el disquete donde empieza el disco RAM) a N. Esto es necesario si el disco RAM esta tras una imagen del nucleo. 'noinitrd' (Solo si el nucleo fue compilado con CONFIG_BLK_DEV_RAM y con CONFIG_BLK_DEV_INITRD.) Actualmente es posible compilar el nucleo de forma que emplee initrd. Cuando se habilita esta caracteristica, el proceso de arranque cargara el nucleo y un disco RAM inicial; entonces el nucleo convierte initrd a un disco RAM "normal", que se monta para lectura y escritura como el dispositivo raiz; luego se ejecuta /linuxrc; despues de eso se monta el sistema de archivos raiz "de verdad", y el sistema de archivos initrd se mueve sobre /initrd; finalmente tiene lugar la secuencia de arranque habitual (o sea, la llamada a /sbin/init). Para una descripcion detallada de initrd, lea el archivo del codigo de Linux Documentation/admin-guide/initrd.rst o Documentation/initrd.txt en versiones anteriores a 4.10. La opcion 'noinitrd' le dice al nucleo que aunque haya sido compilado para la operacion con initrd, no debe seguir los pasos anteriores, sino dejar los datos de initrd bajo /dev/initrd. (Este dispositivo solo puede emplearse una vez; los datos son liberados tan pronto como el ultimo proceso que lo haya utilizado cierre /dev/initrd.) Argumentos de arranque para dispositivos SCSI Notacion general para esta seccion: iobase -- el primer puerto de E/S que ocupa el anfitrion SCSI. Se especifica en notacion hexadecimal y normalmente cae en el rango de 0x200 a 0x3ff. irq -- la interrupcion de hardware a la que la tarjeta esta configurada. Los valores validos dependen de la tarjeta en cuestion, pero normalmente son 5, 7, 9, 10, 11, 12 y 15. Los otros valores se emplean normalmente para perifericos comunes como discos duros IDE, disquetes, puertos serie, etc. scsi-id -- La ID (identificacion) que emplea el adaptador anfitrion para identificarse en el bus SCSI. Solo algunos permiten que se cambie este valor, puesto que la mayoria lo tiene especificado de modo permanente e interno. El valor predeterminado mas usual es 7, pero las tarjetas Seagate y Future Domain emplean el 6. paridad -- si el adaptador anfitrion SCSI espera que los dispositivos acoplados a el suministren un valor de paridad con todos los intercambios de informacion. El valor 1 indica que el control de paridad esta activo, y el 0 que no. De nuevo, no todos los adaptadores admiten la seleccion del comportamiento de la paridad como argumento de arranque. 'max_scsi_luns=...' Un dispositivo SCSI puede tener un numero de 'sub-dispositivos' contenidos en el mismo. El ejemplo mas comun es uno de los nuevos CD-ROMs SCSI que manejan mas de un disco a la vez. Cada CD se direcciona con un 'Numero Logico de Unidad' (NLU, o LUN) de ese dispositivo particular. Pero la mayoria de dispositivos, como discos duros, unidades de cinta magnetica y otros por el estilo son dispositivos unicos, y tendran el LUN 0. Algunos dispositivos SCSI pobremente disenados no pueden admitir que se compruebe la existencia de otros LUNs distintos del 0. Por lo tanto, si la opcion de compilacion CONFIG_SCSI_MULTI_LUN no esta puesta, los nucleos nuevos solo probaran de forma predeterminada el LUN 0. Para especificar el numero de LUNs probados en el arranque, uno introduce 'max_scsi_luns=n' como un argumento del arranque, siendo n un numero entre 1 y 8. Para evitar problemas como los descritos anteriormente, uno deberia emplear n=1 para evitar problemas con los dispositivos del parrafo anterior. Configuracion de unidades de cinta magnetica SCSI Algo de la configuracion en tiempo de arranque del controlador de cinta magnetica SCSI puede hacerse mediante lo siguiente: st=tam_buf[,write_threshold[,bufs_max]] Los primeros dos numeros se especifican en unidades de kB. El valor predeterminado de tam_buf es 32 kB, y el tamano maximo que puede especificarse es de 16384 ridiculos kB. write_threshold es el valor al cual el bufer es volcado a la cinta, siendo el predeterminado 30 kB. El maximo numero de buferes varia con el de unidades detectadas, y el valor predeterminado es 2. Un ejemplo del modo de empleo seria st=32,30,2 Los detalles pueden encontrarse en el archivo Documentation/scsi/st.txt o drivers/scsi/README.st en nucleos anteriores) del codigo fuente del nucleo. Discos duros Parametros del Controlador de Disco/CD-ROM IDE El controlador IDE acepta una serie de parametros, que van desde especificaciones de la geometria del disco, a soporte para chips controladores deficientes. Opciones especificas de una unidad se dan como 'hdX=', con X en el rango 'a'-'h'. Las opciones no especificas de una unidad se dan con el prefijo 'hd='. Observe que emplear un prefijo especifico de unidad para una opcion no especifica de unidad, todavia funcionara, y la opcion sera aplicada simplemente como se espera. Observe tambien que 'hd=' puede emplearse para referirse a la siguiente unidad no especificada de la secuencia (a, ..., h). Para las discusiones que siguen, se citara la opcion 'hd=' por brevedad. Consulte el archivo Documentation/ide/ide.txt (o Documentation/ide.txt en anteriores versiones. En las versiones mas antiguas deberia consultar drivers/block/README.ide del codigo fuente del nucleo. Las opciones 'hd=cils,cabezas,sectores[,pcomes[,irq]]' Estas opciones se emplean para especificar la geometria fisica del disco. Solo son obligatorios los tres primeros valores. Los valores de cilindros/cabezas/sectores seran los empleados por fdisk. El valor de precompensacion de escritura no se tiene en cuenta para discos IDE. El valor de IRQ especificado sera el empleado para la interfaz donde resida la unidad, y no es realmente un parametro especifico de la unidad. La opcion 'hd=serialize' La interfaz IDE dual con el chip CMD-640 esta mal disenada pues cuando se emplean unidades en la interfaz secundaria al mismo tiempo que en la primaria, se corromperan datos. Con esta opcion se le dice al controlador que se asegure de que nunca se usan a la vez ambas interfaces. La opcion 'hd=noprobe' No comprobar la existencia de esta unidad. Por ejemplo, hdb=noprobe hdb=1166,7,17 inhabilitara las pruebas de existencia, pero al especificar la geometria de la unidad se registrara esta como un dispositivo de bloque valido, y por tanto utilizable. La opcion 'hd=nowerr' Algunas unidades tienen aparentemente el bit WRERR_STAT permanentemente encendido. Esto activa una solucion para estos aparatos con este fallo. La opcion 'hd=cdrom' Esto le dice al controlador IDE que hay un CD-ROM compatible ATAPI puesto en el lugar de un disco duro IDE normal. En la mayoria de los casos el CD-ROM se identifica automaticamente, pero si no ocurre asi, esto puede ayudar. Opciones del Controlador de Disco Estandar ST-506 ('hd=') El controlador estandar de disco puede aceptar argumentos de geometria para los discos, similar al controlador IDE. Observe sin embargo que solo espera tres valores (C/CZ/S) -- mas o menos de tres y sin decir nada no se tendra en cuenta ninguno. Ademas, solo acepta 'hd=' como argumento; o sea, nada de 'hda=' ni nada por el estilo. El formato es como sigue: hd=cils,cabezas,sects Si hay dos discos instalados, lo de arriba se repetira con los parametros de geometria del segundo disco. Dispositivos de red Ethernet Controladores diferentes hacen uso de parametros diferentes, pero todos comparten al menos un IRQ, un valor de direccion base del puerto de E/S, y un nombre. En su forma mas generica, el aspecto es el siguiente: ether=irq,iobase[,param_1[,...param_8]],nombre El primer argumento no numerico se toma como el nombre. Los valores de los param_i (cuando sean de aplicacion) normalmente tienen significados diferentes para cada controlador/tarjeta. Usualmente se emplean para especificar cosas como direcciones de memoria compartida, seleccion de interfaz, canal DMA y cosas asi. El empleo mas comun de este parametro es el forzar la autocomprobacion de una segunda tarjeta de red, puesto que por omision solo se prueba una. Esto se puede hacer simplemente con: ether=0,0,eth1 Observe que los valores de cero para el IRQ y la direccion base de E/S en el ejemplo anterior le dicen al controlador o controladores que prueben la existencia de la(s) tarjeta(s). El documento 'Ethernet-Howto' tiene documentacion extensa sobre como usar varias tarjetas de red y sobre los valores de los parametros param_i especificos a cada tarjeta/controlador donde haya que emplearlos. Los lectores interesados deberan irse a la seccion de su tarjeta particular en ese documento. El controlador de disquetera Existe multitud de opciones para el controlador de la disquetera, todas ellas listadas en Documentation/blockdev/floppy.txt (o Documentation/floppy.txt en nucleos mas antiguos; incluso drivers/block/README.fd en los realmente antiguos). Consulte este archivo para mas detalles. El controlador de sonido El controlador de sonido tambien puede aceptar argumentos durante el inicio para sobreescribir los valores con los que ha sido compilado. Esto no se recomienda, pues es bastante complejo. Se describe en el archivo Documentation/sound/oss/README.OSS (drivers/sound/Readme.linux en nucleos realmente antiguos). Dichos argumentos deben ser de la siguiente forma: sound=dispositivo1[,dispositivo2[,dispositivo3...[,dispositivo10]]] donde cada valor dispositivoN esta en el formato: 0xTaaaId y los bytes se emplean como sigue: T - tipo de dispositivo: 1=FM, 2=SB, 3=PAS, 4=GUS, 5=MPU401, 6=SB16, 7=SB16-MPU401 aaa - direccion de E/S en hexadecimal. I - linea de interrupcion en hexadecimal (i.e. 10=a, 11=b, ...) d - canal DMA. Como puede ver es bastante lioso, y lo mejor que puede hacer es compilar el controlador con los valores deseados como se recomienda. Un argumento de arranque como 'sound=0' anulara el controlador de sonido completamente. El controlador de la impresora de linea 'lp=' Sintaxis: lp=0 lp=auto lp=reset lp=port[,port...] Es posible indicarle al controlador de la impresora que puertos usar y que puertos no usar. Esto ultimo puede ser util si no quiere que el controlador de impresora reclame todos los puertos paralelos disponibles, con el fin de que otros controladores (p.e. PLIP, PPA) puedan usarlos. El formato para el argumento es de varios nombres de puerto. Por ejemplo, lp=none,parport0 usaria el primer puerto paralelo para lp1, y deshabilitaria lp0. Para deshabilitar el controlador de impresora por completo, puede usar lp=0. VEASE TAMBIEN klogd(8), mount(8) Consulte la informacion mas actualizada en el siguiente archivo del codigo fuente del nucleo: Documentation/admin-guide/kernel-parameters.txt. TRADUCCION La traduccion al espanol de esta pagina del manual fue creada por Gerardo Aburruzaga Garcia , Miguel Perez Ibars y Marcos Fouces Esta traduccion es documentacion libre; lea la GNU General Public License Version 3 o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD. Si encuentra algun error en la traduccion de esta pagina del manual, envie un correo electronico a . Paginas de manual de Linux 6.06 31 Octubre 2023 bootparam(7)