BOOTPARAM(7)

NOMBRE
bootparam - Introducción a los parámetros de arranque del núcleo de Linux

DESCRIPCIÓN
El núcleo Linux acepta ciertas `opciones de la línea de orden' o `parámetros de arranque' cuando se carga. En general esto sirve para suministrar al núcleo información sobre parámetros del equipo que el núcleo es incapaz de determinar por sí mismo, o para evitar o cambiar los valores que el núcleo detectaría.

Cuando es la BIOS quien arranca directamente el núcleo (por ejemplo desde un disquete donde Ud. copió el núcleo mediante `cp zImage /dev/fd0'), Ud. no tiene oportunidad de especificar ningún parámetro. Así que para aprovechar esta posibilidad Ud. debe emplear algún programa capaz de pasar parámetros, como LILO o LOADLIN. Para algunos pocos parámetros, uno puede también modificar la propia imagen del núcleo, empleando rdev, vea rdev(8) para más detalles.

El programa LILO (LInux LOader, cargador de Linux), escrito por Werner Almesberger, es el más empleado comúnmente. Tiene la capacidad de arrancar varios núcleos, y guarda la información de configuración en un fichero de texto plano. (Vea lilo(8) y lilo.conf(5).) LILO puede arrancar también DOS, OS/2, Linux, FreeBSD, UnixWare, etc., y es bastante flexible.

El otro cargador de Linux empleado comúnmente es `LoadLin', que es un programa de DOS con la capacidad de lanzar un núcleo Linux desde la línea de órdenes del DOS (con argumentos de arranque), suponiendo que se dispone de ciertos recursos. Esto está bien para la gente que quiera lanzar Linux desde DOS.

También es muy útil si Ud. posee cierto hardware que confía en el controlador suministrado para DOS para poner el equipo en un estado determinado. Un ejemplo muy común es el de las tarjetas de sonido `Compatibles con SoundBlaster' que necesitan el controlador para DOS para hacer no se sabe qué con unos pocos misteriosos registros a fin de poner la tarjeta en modo compatible con SB. Arrancar DOS con el controlador de marras y cargar luego Linux desde el indicador del DOS mediante Loadlin evita la inicialización de la tarjeta que tendría lugar si se rearrancara el sistema.

LA LISTA DE ARGUMENTOS

La línea de órdenes del núcleo se analiza y divide en una lista de cadenas de caracteres (argumentos del arranque) separadas por espacios. La mayoría de argumentos de arranque toman la forma:

    nombre[=valor_1][,valor_2]...[,valor_10]

donde `nombre' es una palabra reservada única que se emplea para identificar a qué parte del núcleo se va a dar los valores (si hay alguno) asociados. Observe que el límite de 10 es real, puesto que el código actual sólo maneja 10 parámetros separados por coma por cada palabra reservada. (Sin embargo, se puede reutilizar la misma palabra con hasta 10 parámetros adicionales más en situaciones inusualmente complicadas, suponiendo que la función setup ---vea un par de párrafos más adelante--- lo aguante.)

La mayor parte del manejo de los argumentos ocurre en linux/init/main.c. Primero el núcleo 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 más adelante.

Luego recorre una lista de funciones setup (contenidas en el vector bootsetups) para ver si la cadena del argumento especificado (como `fu') ha sido asociada con una función setup (`fu_setup()') para un dispositivo particular o parte del núcleo. Si se le pasa al núcleo la línea fu=3,4,5,6 entonces el núcleo buscará en el vector bootsetups si `fu' ha sido registrada. Si lo ha sido, entonces llamará a la función setup asociada con `fu' (fu_setup()) y le pasará los argumentos 3, 4, 5 y 6 tal como se dieron en la línea de órdenes del núcleo.

Cualquier cosa de la forma `fu=bar' que no se acepte como una función setup tal como se ha descrito arriba se interpreta entonces como una variable de entorno que toma un valor. Un (¿inútil?) ejemplo sería poner `TERM=vt100' como un argumento de arranque.

Cualesquiera argumentos restantes que no han sido tomados por el núcleo ni han sido interpretados como variables de entorno se pasan entonces al proceso 1, que normalmente es el programa init. El más 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 página del manual de la versión de init instalada en su sistema para ver qué argumentos acepta.

ARGS. DE ARRANQUE GENERALES, NO ESPECÍFICOS DE NINGÚN DISPOSITIVO

  `init=...'

Esto indica el programa inicial que ejecutará el núcleo. Si no se establece o no se puede encontrar, el núcleo intentará ejecutar /etc/init, luego /bin/init, después /sbin/init, más tarde /bin/sh y acabará dando un mensaje de pánico (y con razón) si todo esto falla.

  `nfsaddrs=...'

Esto pone la dirección de arranque de NFS con la cadena dada. Esta dirección de arranque se emplea en caso de un arranque remoto, por red.

  `nfsroot=...'

Esto pone el nombre de la raíz de NFS con la cadena dada. Si esta cadena no empieza con '/' ni ',' ni un dígito, entonces se le añade el prefijo `/tftpboot/'. Este nombre de raíz se emplea en caso de un arranque remoto.

  `no387'

(Sólo cuando se ha definido CONFIG_BUGi386.) Algunos chips del coprocesador i387 tienen fallos que se ponen de relieve cuando se emplean en modo protegido de 32 bits. Por ejemplo, algunos de los primeros chips ULSI-387 podían causar bloqueos durante cálculos en coma flotante. El argumento de arranque `no387' hace que Linux no utilice el coprocesador matemático aunque se disponga de uno. ¡Por supuesto, el núcleo debe haber sido compilado con emulación del coprocesador matemático!

  `no-hlt'

(Sólo cuando se ha definido CONFIG_BUGi386.) Algunos de los primeros chips i486DX/100 tenían un pequeño problema con la instrucción `hlt', y es que no podían confiablemente volver al modo operativo normal tras utilizarse esta instrucción. Mediante el argumento `no-hlt' se le dice a Linux que ejecute un bucle infinito cuando no haya nada mejor que hacer, en vez de parar la UCP. Esto permite que la gente con estos chips defectuosos pueda usar Linux.

  `root=...'

Este argumento le dice al núcleo qué dispositivo se va a emplear como el sistema de ficheros raíz al arrancar. El valor predeterminado de este valor se pone en tiempo de compilación, usualmente como el dispositivo raíz del sistema donde se construyó el núcleo. Para tomar otro valor, y seleccionar por ejemplo la segunda disquetera como el dispositivo raíz, uno utilizaría `root=/dev/fd1'. (El dispositivo raíz también se pude poner empleando rdev(8).)

El dispositivo raíz puede especificarse simbólica o numéricamente. Una especificación simbólica tiene la forma /dev/XXYN, donde XX designa el tipo de dispositivo (`hd' para discos duros compatibles con ST-506, con Y en el rango `a'--`d'; `sd' para discos duros compatibles con SCSI, con Y en el rango `a'--`e'; `ad' para discos duros Atari ACSI, con Y en el rango `a'--`e'; `ez' para una unidad portátil enchufable en puerto paralelo Syquest EZ135, con Y=`a'; `xd' para discos duros compatibles XT, con Y `a' o `b'; `fd' para disquetes, siendo Y el número de la unidad --- fd0 sería la unidad de DOS `A:' y fd1 sería la `B:'), Y la letra o número de la unidad, y N el número (en base diez) de la partición en este dispositivo (ausente en el caso de disquetes). Núcleos recientes admiten otros muchos tipos, mayormente de CD-ROMs: nfs, ram, scd, mcd, cdu535, aztcd, cm206cd, gscd, sbpcd, sonycd, bpcd, optcd. (El tipo `nfs' especifica un arranque remoto; `ram' se refiere a un disco en memoria RAM.)

Observe que esto no tiene nada que ver con la designación de estos dispositivos en el sistema de ficheros. La parte `/dev/' es puramente convencional.

La especificación numérica, más fea y menos transportable, de los posibles dispositivos raíz de arriba en formato mayor/menor, se acepta también. (Por ejemplo, /dev/sda3 tiene de número mayor 8 y de menor 3, así que se podría poner `root=0x803' de forma alternativa.)

  `ro' y `rw'

La opción `ro' le dice al núcleo que monte el sistema de ficheros raíz como `de lectura exclusiva', de modo que el programa de comprobación de consistencia del sistema de ficheros (fsck) pueda hacer su trabajo en un sistema de ficheros sin actividad. Ningún proceso puede escribir en ficheros del sistema de ficheros en cuestión hasta que éste se `re-monte' como capaz para lectura y escritura, por ejemplo mediante `mount -w -n -o remount /'. (Vea también mount(8).)

La opción `rw' le dice al núcleo que monte el sistema de ficheros raíz para lectura y escritura. Esto es lo que ocurre normalmente si no se pone nada.

La elección entre lectura exclusiva y lectura/escritura también puede hacerse empleando rdev(8).

  `reserve=...'

Esto se emplea para proteger regiones de E/S de pruebas. La forma de la orden es:

    reserve=baseE/S,extensión[,baseE/S,extensión]...

En algunas máquinas puede ser necesario evitar que ciertos controladores de periféricos comprueben la existencia de éstos (auto-pruebas) en una región específica. Esto puede ser porque algún dispositivo reaccione malamente a la prueba, o porque algún otro se identifique erróneamente, o simplemente porque no queremos que el núcleo inicialice cierto hardware.

El argumento de arranque reserve especifica una región de un puerto de E/S que no debe ser probado. Un controlador no probará una región reservada, a menos que otro argumento de arranque explícitamente le especifique que lo haga.

Por ejemplo, la línea de arranque

    reserve=0x300,32 bla=0x300

hace que ningún controlador pruebe la región 0x300--0x31f excepto el de `bla'.

  `mem=...'

La llamada a la BIOS definida en la especificación del PC que debe devolver la cantidad de memoria instalada fue diseñada de modo que solamente es capaz de informar de hasta 64 MB. Linux emplea esta llamada a la BIOS en el arranque para determinar cuánta memoria hay. Si Ud. tiene más de 64 MB de RAM instalada, puede emplear este argumento de arranque para decirle a Linux cuánta memoria tiene. El valor es en base diez o dieciséis (prefijo 0x), y pueden emplearse los sufijos `k' (kilo, × 1024) o `M' (mega, × 1048576). Lo siguiente es un párrafo de Linus sobre el empleo del parámetro `mem='.

``El núcleo aceptará cualquier parámetro `mem=xx' que se le dé, y si se le engaña, más pronto o más tarde fallará estrepitosamente. El parámetro indica la dirección RAM más alta direccionable, así que `mem=0x1000000' significa que Ud. tiene 16 MB de memoria, por ejemplo. Para una máquina con 96 MB sería `mem=0x6000000'.

NOTA NOTA NOTA: algunas máquinas pueden emplear la parte de arriba de la memoria para antememoria de la BIOS o para otra cosa, así que Ud. no tendría realmente hasta el límite de 96 MB direccionables. Lo inverso también es verdad: algunos chipsets harán corresponder la memoria física cubierta por el área de la BIOS al área justo por encima del límite de la memoria, así que el tope-de-memoria sería realmente 96 MB + 384 kB por ejemplo. Si Ud. le dice a Linux que tiene más memoria que la que realmente tiene, cosas malas acontecerán: puede ser que no de momento, pero con seguridad alguna vez.''

  `panic=N'
Por omisión el núcleo no rearrancará tras un pánico, pero esta opción hará que el núcleo rearranque tras N segundos (si N > 0). Este tiempo de retardo también se puede poner con "echo N > /proc/sys/kernel/panic".

  `reboot=[warm|cold][,[bios|hard]]'
(Sólo cuando se ha definido CONFIG_BUGi386.) Desde la versión 2.0.22 un rearranque es por omisión un rearranque en frío. Uno obtiene el comportamiento antiguo con `reboot=warm'. (Un rearranque en frío puede ser necesario para inicializar cierto hardware, pero puede destruir datos no escritos aún en un caché de disco. Un rearranque en caliente puede ser más rápido.)

Por omisión un rearranque es duro, pidiendo al controlador de teclado pulsar la línea de puesta a cero baja, pero hay al menos un tipo de placa madre donde esto no funciona. La opción `reboot=bios', en lugar de eso saltará a través de la BIOS.

  `nosmp' y `maxcpus=N'
(Sólo cuando se defina __SMP__ .) Una opción de línea de orden como `nosmp' o `maxcpus=0' deshabilitará por completo MPS (multiproceso simétrico); una opción como `maxcpus=N' limita el número máximo de UCPs activados en el modo MPS a N.

ARGUMENTOS DE ARRANQUE PARA USO DE LOS DESARROLLADORES DEL NÚCLEO

  `debug'

Los mensajes del núcleo son manejados por el demonio de registro del núcleo klogd de modo que pueden ser registrados en disco. Los mensajes con una prioridad mayor que console_loglevel también se muestran en la consola. (Para estos niveles, consulte <linux/kernel.h>.) Por omisión esta variable está puesta de modo que registre cualquier cosa más importante que mensajes de depuración. Este argumento de arranque hace que el núcleo también muestre los mensajes de prioridad DEBUG. El nivel de registro de la consola se puede establecer también en tiempo de ejecución mediante una opción de klogd. Consulte klogd(8).

  `profile=N'

Es posible habilitar una función de perfil del núcleo, si uno desea saber dónde está el núcleo gastando sus ciclos de UCP. El perfil se habilita poniendo la variable prof_shift a un valor distinto de cero. Esto se hace bien especificando CONFIG_PROFILE en la compilación, o mediante la opción `profile='. Ahora el valor que tendrá prof_shift será N, cuando se dé, o CONFIG_PROFILE_SHIFT, cuando se haya dado éste, ó 2, el valor predeterminado. La significancia de esta variable es que da la granularidad del perfil: para cada pulso del reloj, si el sistema está ejecutando código del núcleo, se incrementa un contador:

    profile[address >> prof_shift]++;

La información de perfil, sin procesar, puede leerse de /proc/profile. Probablemente sea mejor idea emplear una herramienta como readpropfile.c para verla mejor. Escribir en /proc/profile limpiará los contadores.

  `swap=N1,N2,N3,N4,N5,N6,N7,N8'

Da valores a los 8 parámetros max_page_age, page_advance, page_decline, page_initial_age, age_cluster_fract, age_cluster_min, pageout_weight, bufferout_weight que controlan el algoritmo de trasiego del núcleo. Sólo para los afinadores del núcleo.

  `buff=N1,N2,N3,N4,N5,N6'
Da valores a los 6 parámetros max_buff_age, buff_advance, buff_decline, buff_initial_age, bufferout_weight, buffermem_grace que controlan el manejo de memoria de búfer del núcleo. Sólo para los afinadores.

ARGUMENTOS DE ARRANQUE PARA USO DE DISCO EN MEMORIA

(Sólo si el núcleo ha sido compilado con CONFIG_BLK_DEV_RAM.) En general es una mala idea emplear un disco RAM en Linux; el sistema utilizará la memoria disponible más eficientemente sin él. Pero durante el arranque (o cuando se construyen disquetes de arranque) es útil a menudo cargar los contenidos del disquete en un disco RAM. Uno también podría tener un sistema en el cual deban cargarse primero algunos módulos (de sistemas de ficheros o periféricos) antes de que se pueda acceder al disco principal.

En Linux 1.3.48 se cambió radicalmente el manejo de discos RAM. Anteriormente, la memoria se asignaba estáticamente, y había un parámetro `ramdisk=N' para dar su tamaño. (Esto también podía establecerse en la imagen del núcleo al compilarlo, o mediante rdev(8).)

Hogaño los discos RAM emplean el búfer caché, y crecen dinámicamente. Para obtener mucha más información sobre esto (como por ejemplo, cómo usar rdev(8) en conjunción con la nueva disposición de discos RAM), lea /usr/src/linux/Documentation/ramdisk.txt.

Hay cuatro parámetros, dos booleanos y dos enteros.

  `load_ramdisk=N'
Si N=1, cárguese un disco RAM. Si N=0, no se cargue. (Éste es el comportamiento predeterminado.)

  `prompt_ramdisk=N'
Si N=1, pídase la inserción del disquete. (Éste es el comportamiento predeterminado.) Si N=0, no se pregunte. (Por tanto, este parámetro no sirve para nada.)

  `ramdisk_size=N' o (anticuado) `ramdisk=N'
Pone el tamaño máximo del disco RAM (o de los discos) a N kB. El valor predeterminado es 4096 (esto es, 4 MB).

  `ramdisk_start=N'
Pone el número 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 está tras una imagen del núcleo.

  `noinitrd'
(Sólo si el núcleo fue compilado con CONFIG_BLK_DEV_RAM y con CONFIG_BLK_DEV_INITRD.) Actualmente es posible compilar el núcleo de forma que emplee initrd. Cuando se habilita esta característica, el proceso de arranque cargará el núcleo y un disco RAM inicial; entonces el núcleo convierte initrd a un disco RAM "normal", que se monta para lectura y escritura como el dispositivo raíz; luego se ejecuta /linuxrc; después de eso se monta el sistema de ficheros raíz "de verdad", y el sistema de ficheros initrd se mueve sobre /initrd; finalmente tiene lugar la secuencia de arranque habitual (o sea, la llamada a /sbin/init).

Para una descripción detallada de lo de initrd, lea /usr/src/linux/Documentation/initrd.txt.

La opción `noinitrd' le dice al núcleo que aunque haya sido compilado para la operación con initrd, no debe seguir los pasos anteriores, sino dejar los datos de initrd bajo /dev/initrd. (Este dispositivo sólo puede emplearse una vez; los datos son liberados tan pronto como el último proceso que lo haya utilizado cierre /dev/initrd.)

ARGUMENTOS DE ARRANQUE PARA DISPOSITIVOS SCSI

Notación general para esta sección:

iobase -- el primer puerto de E/S que ocupa el anfitrión SCSI. Se especifica en notación hexadecimal y normalmente cae en el rango de 0x200 a 0x3ff.

irq -- la interrupción de hardware a la que la tarjeta está configurada. Los valores válidos dependen de la tarjeta en cuestión, pero normalmente son 5, 7, 9, 10, 11, 12 y 15. Los otros valores se emplean normalmente para periféricos comunes como discos duros IDE, disquetes, puertos serie, etc.

scsi-id -- La ID (identificación) que emplea el adaptador anfitrión para identificarse en el bus SCSI. Sólo algunos permiten que se cambie este valor, puesto que la mayoría lo tiene especificado de modo permanente e interno. El valor predeterminado más usual es 7, pero las tarjetas Seagate y Future Domain emplean el 6.

paridad -- si el adaptador anfitrión SCSI espera que los dispositivos acoplados a él suministren un valor de paridad con todos los intercambios de información. El valor 1 indica que el control de paridad está activo, y el 0 que no. De nuevo, no todos los adaptadores admiten la selección del comportamiento de la paridad como argumento de arranque.

  `max_scsi_luns=...'

Un dispositivo SCSI puede tener un número de `sub-dispositivos' contenidos en él mismo. El ejemplo más común es uno de los nuevos CD-ROMs SCSI que manejan más de un disco a la vez. Cada CD se direcciona con un `Número Lógico de Unidad' (NLU, o LUN) de ese dispositivo particular. Pero la mayoría de dispositivos, como discos duros, unidades de cinta magnética y otros por el estilo son dispositivos únicos, y tendrán el LUN 0.

Algunos dispositivos SCSI pobremente diseñados no pueden admitir que se compruebe la existencia de otros LUNs distintos del 0. Por lo tanto, si la opción de compilación CONFIG_SCSI_MULTI_LUN no está puesta, los núcleos nuevos sólo probarán de forma predeterminada el LUN 0.

Para especificar el número de LUNs probados en el arranque, uno introduce `max_scsi_luns=n' como un argumento del arranque, siendo n un número entre 1 y 8. Para evitar problemas como los descritos anteriormente, uno debería emplear n=1 para evitar problemas con los dispositivos del párrafo anterior.

  Configuración de unidades de cinta magnética SCSI

Algo de la configuración en tiempo de arranque del controlador de cinta magnética SCSI puede hacerse mediante lo siguiente:

    st=tam_buf[,write_threshold[,bufs_max]]

Los primeros dos números se especifican en unidades de kB. El valor predeterminado de tam_buf es 32 kB, y el tamaño máximo que puede especificarse es de 16384 ridículos kB. write_threshold es el valor al cual el búfer es volcado a la cinta, siendo el predeterminado 30 kB. El máximo número de búferes varía con el de unidades detectadas, y el valor predeterminado es 2. Un ejemplo del modo de empleo sería

    st=32,30,2

Los detalles pueden encontrarse en el fichero README.st que está en el directorio scsi del árbol de directorios de los fuentes del núcleo.

  Configuración de las Adaptec aha151x, aha152x, aic6260, aic6360, SB16-SCSI

Los números del AHA se refiere a las tarjetas y los números del AIC se refieren al chip SCSI que hay en estos tipos de tarjetas, incluyendo la Soundblaster-16 SCSI.

El código probatorio de estos anfitriones SCSI busca un BIOS instalado, y si no lo hay, la tarjeta no será reconocida. Entonces Ud. tendrá que dar un arg. de arranque de la forma:

    aha152x=iobase[,irq[,scsi-id[,reconexión[,paridad]]]]

Si el controlador se compiló con la depuración habilitada, se puede dar un 6º valor para el nivel de depuración.

Todos los parámetros son como se describieron al inicio de esta sección, y el valor de reconexión permitirá la des/re-conexión del dispositivo si se emplea un valor distinto de cero. Un ejemplo del modo de empleo es como sigue:

    aha152x=0x340,11,7,1

Observe que los parámetros deben darse en su orden, de forma que si Ud. quiere especificar un valor para la paridad, también deberá especificar cada uno de los anteriores: iobase, irq, scsi-id y reconexión.

  Configuración de la Adaptec aha154x

Las tarjetas de las series AHA1542 tienen un controlador de disquete i82077 en la placa, mientras que las AHA1540 no lo tienen. Estas tarjetas son de bus maestro, y poseen parámetros para establecer la ``generosidad'' que emplean para compartir el bus con otros periféricos. Los args. de arranque son como sigue.

    aha1542=iobase[,buson,busoff[,dmaspeed]]

Los valores válidos para iobase son normalmente uno de: 0x130, 0x134, 0x230, 0x234, 0x330, 0x334. Tarjetas clónicas pueden permitir otros valores.

Los valores de buson, busoff se refieren al número de microsegundos que la tarjeta domina el bus ISA. Los valores predeterminados son 11 µs sí y 4 µs no, de modo que otras tarjetas (como una tarjeta Ethernet ISA LANCE) tienen una oportunidad de acceder al bus ISA.

El valor de dmaspeed se refiere a la velocidad (en MB/s) a la cual procede la transferencia DMA (Acceso Directo a Memoria, Direct Memory Access). El valor predeterminado es 5 MB/s. Las tarjetas de revisión más nueva permiten seleccionar este valor como parte de la configuración por programa; tarjetas más antiguas emplean conmutadores en la propia placa. Se pueden utilizar valores de hasta 10 MB/s suponiendo que la placa madre sea capaz de aguantarlo. Experimente con precaución para valores superiores a 5 MB/s.

  Configuración de las Adaptec aha274x, aha284x, aic7xxx

Estas tarjetas pueden aceptar un argumento de la forma:

    aic7xxx=extendido,no_reset

El valor extendido , si no es cero, indica que se habilita la traducción extendida para discos grandes. El valor no_reset , si no es cero, le dice al controlador que no reinicialice el bus SCSI cuando inicialice el adaptador anfitrión en el arranque.

  Configuración de los anfitriones AdvanSys SCSI (`advansys=')

El controlador AdvanSys puede aceptar hasta 4 direcciones de E/S que se emplearán para las pruebas de reconocimiento de una tarjeta SCSI AdvanSys. Observe que estos valores (si se emplean) no tienen efecto sobre las pruebas de EISA ni PCI de ninguna forma. Sólo se emplean para probar tarjetas ISA y VLB. Además, si el controlador ha sido compilado con la opción de depuración habilitada, el nivel de salida de mensajes de depuración puede ponerse añadiendo un parámetro 0xdep[0-f]. El 0-f permite poner el nivel a uno de los 16 que hay.

  AM53C974

    AM53C974=host-scsi-id,target-scsi-id,max-rate,max-offset

  Configuración de anfitriones BusLogic SCSI (`BusLogic=')

    BusLogic=N1,N2,N3,N4,N5,S1,S2,...

Para una discusión exhaustiva de los parámetros de línea de órdenes de las tarjetas BusLogic, mire /usr/src/linux/drivers/scsi/BusLogic.c (líneas 4350 a 4496 en la versión 2.0.30 que estoy usando). El texto siguiente es un extracto muy abreviado.

Los parámetros N1 a N5 son enteros. Los parámetros S1, ... son cadenas de caracteres. N1 es la Dirección de E/S donde se encuentra el Adaptador Anfitrión. N2 es la Profundidad de Cola Etiquetada para emplear con Dispositivos que admitan Cola Etiquetada. N3 es el Tiempo de Ajuste del Bus en segundos. Esto es la cantidad de tiempo que hay que esperar entre una Iniciación Dura del Adaptador Anfitrión que principia una Iniciación del Bus SCSI y el lanzamiento de cualesquiera órdenes SCSI. N4 corresponde a las Opciones Locales (para un Adaptador Anfitrión). N5 corresponde a las Opciones Globales (para todos los Adaptadores Anfitriones).

Las opciones de cadena se emplean para proporcionar control sobre la Cola Etiquetada (TQ:Default, TQ:Enable, TQ:Disable, TQ:<Espec-Por-Dispos>), sobre Recuperación en caso de Errores (ER:Default, ER:HardReset, ER:BusDeviceReset, ER:None, ER:<Espec-Por-Dispos>), y sobre Probar el Adaptador Anfitrión (NoProbe, NoProbeISA, NoSortPCI).

  Configuración de la EATA/DMA
La lista predeterminada de puertos de E/S que deben comprobarse pude cambiarse con

    eata=iobase,iobase,....

  Configuración de la Future Domain TMC-16x0

    fdomain=iobase,irq[,id_adaptador]

  Configuración del controlador SCSI de Great Valley Products (GVP)

    gvp11=máscara_de_bits_de_transferencia_dma

  Configuración de las Future Domain TMC-8xx, TMC-950

    tmc8xx=mem_base,irq

El valor de mem_base es el de la región de E/S con correspondencia en memoria que emplea la tarjeta. Normalmente será uno de los valores siguientes: 0xc8000, 0xca000, 0xcc000, 0xce000, 0xdc000, 0xde000.

  Configuración de la IN2000

    in2000=S

donde S es una cadena de elementos de la forma palabra_reservada[:valor] separados por comas. Palabras reservadas reconocidas (con posible valor) son: ioport:addr, noreset, nosync:x, period:ns, disconnect:x, debug:x, proc:x. Para la funcionalidad de estos parámetros, vea /usr/src/linux/drivers/scsi/in2000.c.

  Configuración de las NCR5380 y NCR53C400
El arg. de arranque es de la forma

    ncr5380=iobase,irq,dma

o

    ncr53c400=iobase,irq

Si la tarjeta no emplea interrupciones, entonces un valor de 255 (0xff) para IRQ, deshabilitará las interrupciones. Una valor de IRQ de 254 significa autocomprobar. Más detalles en el fichero /usr/src/linux/drivers/scsi/README.g_NCR5380.

  Configuración de las NCR53C8xx

    ncr53c8xx=S

donde S es una cadena de elementos de la forma palabra_reservada:valor separados por comas. Palabras reservadas reconocidas son: mpar (master_parity), spar (scsi_parity), disc (disconnection), specf (special_features), ultra (ultra_scsi), fsn (force_sync_nego), tags (default_tags), sync (default_sync), verb (verbose), debug (debug), burst (burst_max). Para la función de los valores asignados, vea /usr/src/linux/drivers/scsi/ncr53c8xx.c.

  Configuración de la NCR53c406a

    ncr53c406a=iobase[,irq[,fastpio]]

Especifique irq = 0 para el modo no dirigido por interrupciones. Ponga fastpio = 1 para el modo rápido de entrada/salida programada, ó 0 para el modo lento.

  Configuración de la Pro Audio Spectrum

La PAS16 utiliza un chip SCSI NC5380, y los modelos más nuevos admiten configuración sin interruptores. El argumento de arranque es de la forma:

    pas16=iobase,irq

La única diferencia es que se puede especificar un valor de IRQ de 255, que le dirá al controlador que trabaje sin emplear interrupciones, si bien con alguna pérdida de rendimiento. Normalmente iobase es 0x388.

  Configuración de la Seagate ST-0x

Si su tarjeta no es detectada en el arranque, deberá emplear un argumento de la forma:

    st0x=mem_base,irq

El valor de mem_base es el de la región de E/S con correspondencia en memoria que emplea la tarjeta. Normalmente será uno de los valores siguientes: 0xc8000, 0xca000, 0xcc000, 0xce000, 0xdc000, 0xde000.

  Configuración de la Trantor T128

Estas tarjetas también están basadas en el chip NCR5380, y admiten las siguientes opciones:

    t128=mem_base,irq

Los valores válidos para mem_base son los siguientes: 0xcc000, 0xc8000, 0xdc000, 0xd8000.

  Configuración de la UltraStor 14F/34F
La lista predeterminada de puertos de E/S que se comprobarán puede cambiarse con

    eata=iobase,iobase,....

  Configuración de la WD7000

    wd7000=irq,dma,iobase

  Configuración del controlador SCSI del Commodore Amiga A2091/590

    wd33c93=S

donde S es una cadena de opciones separadas por comas. Las opciones reconocidas son nosync:bitmask, nodma:x, period:ns, disconnect:x, debug:x, clock:x, next. Para los detalles, vea /usr/src/linux/drivers/scsi/wd33c93.c.

DISCOS DUROS

  Parámetros del Controlador de Disco/CD-ROM IDE

El controlador IDE acepta una serie de parámetros, que van desde especificaciones de la geometría del disco, a soporte para chips controladores no muy bien hechos. Opciones específicas de una unidad se dan como `hdX=', con X en el rango `a'--`h'.

Las opciones no específicas de una unidad se dan con el prefijo `hd='. Observe que emplear un prefijo específico de unidad para una opción no específica de unidad, todavía funcionará, y la opción será aplicada simplemente como se espera.

Observe también que `hd=' puede emplearse para referirse a la siguiente unidad no especificada de la secuencia (a, ..., h). Para las discusiones que siguen, se citará la opción `hd=' por brevedad. Vea el fichero README.ide en linux/drivers/block para más detalles.

  Las opciones `hd=cils,cabezas,sectores[,pcomes[,irq]]'

Estas opciones se emplean para especificar la geometría física del disco. Sólo son obligatorios los tres primeros valores. Los valores de cilindros/cabezas/sectores serán los empleados por fdisk. El valor de precompensación de escritura no se tiene en cuenta para discos IDE. El valor de IRQ especificado será el empleado para la interfaz donde resida la unidad, y no es realmente un parámetro específico de la unidad.

  La opción `hd=serialize'

La interfaz IDE dual con el chip CMD-640 está mal diseñada pues cuando se emplean unidades en la interfaz secundaria al mismo tiempo que en la primaria, se corromperán datos. Con esta opción se le dice al controlador que se asegure de que nunca se usan a la vez ambas interfaces.

  La opción `hd=dtc2278'

Esta opción le dice al controlador que tenemos una interfaz IDE DTC-2278D. Entonces el controlador intenta hacer operaciones específicas del DTC para habilitar la segunda interfaz y modos de transferencia más rápidos.

  La opción `hd=noprobe'

No comprobar la existencia de esta unidad. Por ejemplo,

    hdb=noprobe hdb=1166,7,17

inhabilitará las pruebas de existencia, pero al especificar la geometría de la unidad se registrará ésta como un dispositivo de bloque válido, y por tanto utilizable.

  La opción `hd=nowerr'

Algunas unidades tienen aparentemente el bit WRERR_STAT permanentemente encendido. Esto activa una solución para estos aparatos con este fallo.

  La opción `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 mayoría de los casos el CD-ROM se identifica automáticamente, pero si no ocurre así, esto puede ayudar.

  Opciones del Controlador de Disco Estándar ST-506 (`hd=')

El controlador estándar de disco puede aceptar argumentos de geometría para los discos, similar al controlador IDE. Observe sin embargo que sólo espera tres valores (C/CZ/S) -- más o menos de tres y sin decir nada no se tendrá en cuenta ninguno. Además, sólo 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 repetirá con los parámetros de geometría del segundo disco.

  Opciones del Controlador de Disco XT (`xd=')

Si Ud. es tan infortunado como para estar utilizando una de estas viejas tarjetas de 8 bits que mueven los datos a la asombrosa velocidad de 125 kB/s, aquí está lo que necesita. Si la tarjeta no es reconocida, deberá dar un arg. de arranque de la forma:

    xd=tipo,irq,iobase,canal_dma

El valor de tipo especifica el fabricante particular de la tarjeta, sobreescribiendo la autodetección. Los tipos que pueden usarse pueden ser consultados en el fichero fuente drivers/block/xd.c del núcleo que esté usando. El tipo es un índice en la lista xd_sigs y en el transcurso del tiempo los tipos han sido añadidos o eliminados de la mitad de la lista, cambiando todos los números de tipo. Hoy en día (Linux 2.5.0) los tipos son 0=generic; 1=DTC 5150cx; 2,3=DTC 5150x; 4,5=Western Digital; 6,7,8=Seagate; 9=Omti; 10=XEBEC, y donde varios tipos se dan con la misma designación, son equivalentes.

La función xd_setup() no comprueba los valores, y supone que Ud. ha introducido los 4 valores. No la defraude. Aquí hay un ejemplo del modo de empleo para un controlador WD1002 con la BIOS inhabilitada o quitada, empleando los parámetros `predeterminados' del controlador XT:

    xd=2,5,0x320,3

  Discos desmontables EZ* de Syquest

    ez=iobase[,irq[,rep[,nybble]]]

DISPOSITIVOS IBM PARA EL BUS MCA
Lea también /usr/src/linux/Documentation/mca.txt.

  Discos duros PS/2 ESDI
Es posible especificar la geometría deseada en el arranque:

    ed=cils,cabezas,sectores.

Para un ThinkPad-720, añada la opción

    tp720=1.

  Configuración del Subsistema SCSI IBM Microchannel

    ibmmcascsi=N

donde N es el pun (ID. SCSI) del subsistema.

CD-ROMs (No SCSI/ATAPI/IDE)

  La Interfaz Aztech

La sintaxis para este tipo de tarjeta es:

    aztcd=iobase[,número_mágico]

Si pone el número_mágico a 0x79 entonces el controlador intentará trabajar de todas formas aunque no conozca la versión del firmware. Todos los demás valores no son tenidos en cuenta.

  Unidades de CD-ROM de puerto paralelo
Sintaxis:

    pcd.driveN=prt,pro,uni,mod,slv,dly
    pcd.nice=nice

donde `prt' es la dirección base, `pro' es el número de protocolo, `uni' es el selector de unidad (para dispositivos en cadena), `mod' es el modo (o -1 para escoger el mejor automáticamente), `slv' es 1 si debería ser esclavo, y `dly' es un pequeño entero para demorar los accesos al puerto. El parámetro `nice' controla el uso del tiempo idle de la CPU por parte de la unidad, a cambio de algo de velocidad.

  La Interfaz CDU-31A y CDU-33A de Sony

Esta interfaz de CD-ROM se encuentra en algunas de las tarjetas de sonido Pro Audio Spectrum, y otras tarjetas de interfaz de Sony. La sintaxis es como sigue:

    cdu31a=iobase,[irq[,es_pas]]

Un IRQ 0 indica al controlador que no se admiten interrupciones por hardware (como en algunas tarjetas PAS). Si su tarjeta admite interrupciones, debería emplearlas puesto que mejora el empleo de la UCP por parte del controlador.

La opción es_pas debe ponerse como `PAS' si se emplea una tarjeta Pro Audio Spectrum; en otro caso no debe especificarse en absoluto.

  La Interfaz CDU-535 de Sony

La sintaxis para esta interfaz de CD-ROM es:

    sonycd535=iobase[,irq]

Se puede emplear un cero para la dirección base de E/S si se desea solamente especificar un valor de IRQ.

  La Interfaz de GoldStar

La sintaxis para esta interfaz de CD-ROM es:

    gscd=iobase

  La Interfaz del CD-ROM ISP16
Sintaxis:

    isp16=[iobase[,irq[,dma[,tipo]]]]

(tres enteros y una cadena). Si el tipo es `noisp16', la interfaz no será configurada. Otros tipos reconocidos son: `Sanyo', `Sony', `Panasonic' y `Mitsumi'.

  La Interfaz Estándar de Mitsumi

La sintaxis para esta interfaz de CD-ROM es:

    mcd=iobase,[irq[,valor_espera]]

El valor_espera se emplea como un valor de retardo interno para gente que tiene problemas con su unidad, y puede estar implementada o no, dependiendo de una macro del preprocesador cuando se hubo compilado el controlador.

El Mitsumi FX400 es un CD-ROM IDE/ATAPI y por tanto no emplea el controlador mcd.

  La Interfaz de Mitsumi XA/MultiSession

Esto es para el mismo equipo que antes, sólo que el controlador tiene más características. Sintaxis:

    mcdx=iobase[,irq]

  La Interfaz de Optics Storage

La sintaxis para este tipo de tarjeta (Dolphin 8000AT) es:

    optcd=iobase

  La Interfaz de Phillips CM206

La sintaxis para este tipo de tarjeta es:

    cm206=[iobase][,irq]

El controlador supone que números entre 3 y 11 son valores de IRQ, y que entre 0x300 y 0x370 son puertos de E/S, así que se puede especificar uno o ambos números, en culquuier orden. También acepta `cm206=auto' para habilitar la autocomprobación.

  La Interfaz de Sanyo

La sintaxis para este tipo de tarjeta es:

    sjcd=iobase[,irq[,canal_dma]]

  La Interfaz SoundBlaster Pro

La sintaxis para este tipo de tarjeta es:

    sbpcd=iobase,tipo

donde el tipo es una de las cadenas de caracteres (sensibles a mayúsculas/minúsculas) siguientes: `SoundBlaster', `LaserMate', o `SPEA'. La dirección base de E/S es la de la interfaz del CD-ROM, no la de la parte de sonido de la tarjeta.

DISPOSITIVOS DE RED ETHERNET

Controladores diferentes hacen uso de parámetros diferentes, pero todos comparten al menos un IRQ, un valor de dirección base del puerto de E/S, y un nombre. En su forma más genérica, el aspecto es el siguiente:

    ether=irq,iobase[,parám_1[,...parám_8]],nombre

El primer argumento no numérico se toma como el nombre. Los valores de los parám_i (cuando sean de aplicación) normalmente tienen significados diferentes para cada controlador/tarjeta. Usualmente se emplean para especificar cosas como direcciones de memoria compartida, selección de interfaz, canal DMA y cosas así.

El empleo más común de este parámetro es el forzar la autocomprobación de una segunda tarjeta de red, puesto que por omisión sólo se prueba una. Esto se puede hacer simplemente con:

    ether=0,0,eth1

Observe que los valores de cero para el IRQ y la dirección 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 documentación extensa sobre cómo usar varias tarjetas de red y sobre los valores de los parámetros parám_i específicos a cada tarjeta/controlador donde haya que emplearlos. Los lectores interesados deberán irse a la sección de su tarjeta particular en ese documento.

EL CONTROLADOR DE DISQUETERA

Hay muchas opciones para el controlador de disquetera, y todas están relacionadas en el fichero README.fd que se encuentra en linux/drivers/block. Esta información está tomada directamente de ese fichero.

  floppy=máscara,máscara_de_unidad_permitida

Pone a `máscara' la máscara de bits de los controladores permitidos. Por omisión sólo se permiten las unidades 0 y 1 de cada controladora de disquete. Esto se hace porque cierto hardware no estándar (placas madre ASUS PCI) lían al teclado cuando se accede a las unidades 2 ó 3. Esta opción está de todas formas anticuada debido a la opción `cmos'.

  floppy=all_drives

Pone la máscara de bits de las unidades permitidas a todas las unidades. Emplee esto si tiene más de dos unidades conectadas a un controlador de disquete.

  floppy=asus_pci

Pone la máscara de bits de modo que permita solamente las unidades 0 y 1 (esto es el comportamiento predeterminado).

  floppy=daring

Le dice al controlador de disquete que se posee un controlador de disquetera que se comporta correctamente. Esto permite una operación más eficiente y mejor, pero puede fallar en ciertos controladores. Esto puede acelerar ciertas operaciones.

  floppy=0,daring

Le dice al controlador de disquete que el controlador de disquetera debe utilizarse con cuidado.

  floppy=one_fdc

Le dice al controlador de disquete que sólo tenemos un controlador de disquetera (lo normal).

  floppy=two_fdc o floppy=dirección,two_fdc

Le dice al controlador de disquete que tenemos dos controladores de disquetera. El segundo se supone que está en `dirección'. Si no se da, se supone 0x370.

  floppy=thinkpad

Le dice al controlador de disquete que se tiene un ThinkPad. Los ThinkPads emplean un convenio invertido para la línea de cambio de disco.

  floppy=0,thinkpad

Le dice al controlador de disquete que no tenemos un ThinkPad.

  floppy=unidad,tipo,cmos

Pone el tipo `cmos' de la `unidad' a `tipo'. Adicionalmente, esta unidad se permite en la máscara de bits. Esto es útil si se tiene más de dos disqueteras (sólo se pueden describir dos en la CMOS física), o si la BIOS emplea tipos CMOS no estándar. Poner la CMOS a 0 para las dos primeras disqueteras (predeterminado) hace que el controlador de disquete lea la CMOS física para esas unidades.

  floppy=unexpected_interrupts

Muestra un mensaje de aviso cuando se recibe una interrupción inesperada (éste es el comportamiento predeterminado).

  floppy=no_unexpected_interrupts o floppy=L40SX

No se imprima un mensaje cuando se reciba una interrupción inesperada. Esto se necesita en los ordenadores portátiles de bolsillo IBM L40SX en ciertos modos de vídeo. (Esto parece ser una interacción entre el vídeo y la disquetera. Las interrupciones inesperadas sólo afectan al rendimiento, y pueden ser no tenidas en consideración sin problemas.)

EL CONTROLADOR DE SONIDO

El controlador de sonido también puede aceptar args. de arranque para sobreescribir los valores con los que ha sido compilado. Esto no se recomienda, pues es bastante complejo. Se describe en el fichero Readme.Linux, en el directorio linux/drivers/sound. Acepta un arg. de arranque de la forma:

    sound=dispositivo1[,dispositivo2[,dispositivo3...[,dispositivo10]]]

donde cada valor dispositivoN está 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 - dirección de E/S en hexadecimal.

I - línea de interrupción 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' anulará el controlador de sonido completamente.

CONTROLADORES ISDN

  El controlador ISDN ICN
Sintaxis:

    icn=iobase,membase,icn_id1,icn_id2

donde icn_id1,icn_id2 son dos cadenas empleadas para identificar la tarjeta en mensajes del núcleo.

  El controlador ISDN PCBIT
Sintaxis:

    pcbit=membase1,irq1[,membase2,irq2]

donde membaseN es la base de la memoria compartida de la N-sima tarjeta, e irqN es el número de interrupción de la tarjeta N-sima. Los valores predeterminados son IRQ 5 y membase 0xD0000.

  El controlador ISDN Teles
Sintaxis:

    teles=iobase,irq,membase,protocolo,teles_id

donde iobase es la dirección del puerto de E/S de la tarjeta, membase es la dirección base de la memoria compartida de la tarjeta, irq es el canal de interrupción que la tarjeta emplea, y teles_id es el identificador de cadena de caracteres único.

CONTROLADORES DE PUERTO SERIE

  El Controlador Serie RISCom/8 Multipuerto (`riscom8=')
Sintaxis:

    riscom=iobase1[,iobase2[,iobase3[,iobase4]]]

Más detalles pueden encontrarse en /usr/src/linux/Documentation/riscom8.txt.

  El Controlador de DigiBoard (`digi=')
Si se emplea esta opción, debe tener seis parámetros, ni más ni menos. Sintaxis:

    digi=status,tipo,altpin,numports,iobase,membase

Los parámetros se pueden dar como enteros o como cadenas de caracteres. Si se emplean cadenas, iobase y membase deben darse en hexadecimal. Los argumentos enteros (se pueden dar menos) son en orden: status (Enable [activar](1) o Disable [desactivar](0) esta tarjeta), tipo (PC/Xi(0), PC/Xe(1), PC/Xeve(2), PC/Xem(3)), altpin (Enable [activar](1) o Disable [desactivar](0) arreglo alterno de los pines), numports (número de puertos en esta tarjeta), iobase (Puerto de E/S donde se configura esta tarjeta (en HEX.)), membase (base de la ventana de memoria (en HEX.)). Así, los dos siguientes argumentos de arranque son equivalentes:

    digi=E,PC/Xi,D,16,200,D0000
    digi=1,0,0,16,0x200,851968

Pueden encontrarse más detalles en /usr/src/linux/Documentation/digiboard.txt.

  El Módem Serie/Paralelo Radio de Baycom
Sintaxis:

    baycom=iobase,irq,modem

Hay exactamente 3 parámetros; para varias tarjetas, dé varias órdenes `baycom='. El parámetro modem es una cadena que puede tomar uno de los valores ser12, ser12*, par96, par96*. Aquí el * denota que se va a utilizar DCD por software, y ser12/par96 escoge entre los tipos de módem admitidos. Para más detalles, lea /usr/src/linux/drivers/net/README.baycom.

  Controlador de la Tarjeta de sonido radio modem
Sintaxis:

    soundmodem=iobase,irq,dma[,dma2[,serio[,pario]]],0,modo

Todos los parámetros son enteros salvo el último; el 0 fijo es necesario debido a un fallo del código de puesta a punto (setup). El parámetro modo es una cadena con la sintaxis hw:modem donde hw es uno de sbc, wss, wssfdx y modem es uno de afsk1200, fsk9600.

EL CONTROLADOR DE LA IMPRESORA DE LÍNEA

  `lp='
Sintaxis:

    lp=0
    lp=auto
    lp=reset
    lp=port[,port...]

Es posible indicarle al controlador de la impresora qué puertos usar y qué puertos no usar. Esto último puede ser útil 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 usaría el primer puerto paralelo para lp1, y deshabilitaría lp0. Para deshabilitar el controlador de impresora por completo, puede usar lp=0.

  Controlador WDT500/501
Sintaxis:

    wdt=io,irq

CONTROLADORES DE RATÓN

  `bmouse=irq'
El controlador de ratón busmouse sólo acepta un parámetro, que es el valor de IRQ hardware que se va a emplear.

  `msmouse=irq'
Y justamente lo mismo es verdad para el controlador msmouse.

  Configuración del ratón ATARI

    Si sólo se da un argumento, se emplea para umbral-x y umbral-y. Si no, el primero es el umbral-x y el segundo el umbral-y. Estos valores deben caer entre 1 y 20 (incluidos); el valor predeterminado es 2.

HARDWARE DE VÍDEO

  `no-scroll'
Esta opción le dice al controlador de consola que no use rodamiento por hardware (donde la rodadura tiene lugar moviendo el origen de la pantalla en memoria de vídeo, en vez de moviendo los datos). El empleo de esto es necesario en algunas máquinas Braille.

AUTORES
Linus Benedictus Torvalds (y muchos otros).

VÉASE TAMBIÉN
klogd(8), lilo.conf(5), lilo(8), mount(8), rdev(8)

Grandes partes de esta página del Manual se derivan del Boot Parameter HOWTO (version 1.0.1) escrito por Paul Gortmaker. Se puede encontrar más de información en este (u otro más reciente) HOWTO (`CÓMO').