Kernel Linux

De WikiEtl
Saltar a: navegación, buscar
Kernel_Map

Compilación del kernel

Primero veremos los pasos a seguir para compilar el kernel. Existe un método "tradicional" para compilarlo, pero aquí vamos a usar la manera "Debian" y haremos un paquete .deb con nuestro nuevo kernel compilado.


1º- Necesitamos descargarnos los archivos fuente del kernel, de la página Kernel.org. En nuestro caso usamos: 2.6.28


2º- Remontamos las particiones que vamos a modificar:

sudo mount -o remount,rw /usr
sudo mount -o remount,rw /boot


3º- Descomprimes el .tar en /usr/src en una carpeta llamada "linux-2.6.28".

sudo tar -xjvf linux-2.6.28.tar.bz2


4º- Dentro de dicha carpeta, ejecutamos los siguientes pasos:

sudo make clean                              //Limpia archivos y modulos previos (pero mantiene la configuración; el "mrproper" borra todo)
sudo make menuconfig                         //Usando el interfaz "ncurses", podemos crear el fichero config-2.6.28 (opciones de compilación). 
sudo make-kpkg clean                         //Limpia archivos de otras compilaciones.
sudo make-kpkg kernel_image kernel_headers   //Crea un paquete .deb con el nuevo kernel compilado y otro con los headers; en el directorio superior. 


5º- Desde /usr/src, tendremos que instalar ambos paquetes .deb con nuestro nuevo kernel:

sudo dpkg -i linux-image-2.6.28_2.6.28-10.00.Custom_i386.deb
sudo dpkg -i linux-headers-2.6.28_2.6.28-10.00.Custom_i386.deb
  • Comprueba que en /boot se han creado los ficheros: vmlinuz, System.map y config de tu nuevo kernel; asi que los modulos correspondientes en /lib/modules. Para mirar la versión del kernel actual: uname -r


6º- Ahora comprobamos que el fichero /etc/lilo.conf tenga la siguiente configuración:

#miguelb 2/02/09: de 2.6.26 -> 2.6.28
default = "Linux(2.6.28)"
# Linux Debian bootable partition config begins
image = /boot/vmlinuz-2.6.28
root =/dev/sda6         # Linux 2.6.28 (Debian)
	label = "Linux(2.6.28)"
    	read-only
# Linux Debian bootable partition config ends

Se comentan los anteriores kernels y se guardan los cambios. Despues desde raíz "/", ejecutamos "sudo lilo" para que nos reconozca el nuevo kernel.

miguelb@it016:/$ sudo lilo
Warning: CHANGE AUTOMATIC assumed after "other=/dev/hda1"
Added Win2KPro
Added Linux(2.6.28) *
One warning was issued.


[ Compilación de sólo los módulos ]

sudo mount -o remount,rw /usr
sudo mount -o remount,rw /boot
cd  /usr/src/linux-2.6.28
sudo make menuconfig        //Cambiar configuración de los modulos.	
sudo make modules           //Compila sólo los módulos.
sudo make modules_install   //Instala los nuevos modulos compilados.
sudo depmod -a              //Notifica la existencia de nuevos modulos.


[ Distribución del nuevo kernel "modo Goyesco" ]

Básicamente consiste en hacer un .tar con los ficheros ya compilados del nuevo kernel y luego distribuir este fichero por el resto de clientes (usando el DOIT). Para crear el TGZ que necesitamos, seguimos los siguientes pasos (se presupone que se hace en un equipo con el nuevo kernel ya instalado):


1º- Necesitas copiar en un directorio, la siguiente jerarquía de directorios y ficheros:

.
|-- boot
|   |-- System.map-2.6.28
|   |-- config-2.6.28
|   `-- vmlinuz-2.6.28
|-- etc
|   |-- lilo.hda   //Versión de lilo para discos PATA (/dev/hda).
|   `-- lilo.sda   //Versión de lilo para discos SATA (/dev/sda).
|-- lib
|   |-- firmwares
|   |   `-- pca200e.bin  //Necesario para que funcione ATM correctamente (explicado en Soporte ATM).
|   `-- modules
|       `-- 2.6.28  //Aqui van todos los módulos del kernel (/lib/modules/2.6.28)

2º- Desde el directorio donde esta la anterior jerarquía:

tar czvf linux-2.6.28.tgz etc/ boot/ lib/

3º- Ya sólo quedaría usar un script con el DOIT para distribuirlo. Necesitamos copiar el .tar creado a /usr/dist/clientes/common/newKernel/. Ejemplo del script que usamos para este kernel:

cp -f /usr/dist/clientes/common/newKernel/linux-2.6.28.tgz /
mount -o remount,rw /usr
mount -o remount,rw /boot
cd /
tar -xvf linux-2.6.28.tgz
#Averiguamos si el equipo es PATA o SATA
if [ `head -4 /etc/fstab | tail -1 | cut -c6-8` == 'sda' ] ; then
cp -f /etc/lilo.sda /etc/lilo.conf
rm /etc/lilo.sda
fi
if [ `head -4 /etc/fstab | tail -1 | cut -c6-8` == 'hda' ] ; then
cp -f /etc/lilo.hda /etc/lilo.conf
rm /etc/lilo.hda
fi
lilo

> Ficheros LILO.conf utilizados (NOTA: faltan las contraseñas [XXXXXXX]):

lilo.hda

# LILO configuration file
# NOT generated by 'liloconfig' :-)
#
# Start LILO global section
boot = /dev/hda
append = "panic=30 irqpoll"
lba32
prompt
timeout = 100
#message = /etc/lilo.msg
# passwd and resticted options by ptb 15/5/00 (NB this file doesn't count!)
password = XXXXXXXX
restricted
#default changed to 2.2.10 from 2.0.25 ptb 5/8/99
#default = 1
#default changed to 2.2.15 from 2.2.10 ptb 25/3/01
#default = 1
#default changed to 2.4.17 from 2.2.15 ptb 13/2/02
#default = "Linux(2.4.25)"
# almo 10/05/06: default changed to 2.6.13 from 2.4.17
#default = "Linux(2.6.15)"
#default = "Linux(2.6.21)"
#Celeste 23/06/08 changed to 2.6.21 from 2.6.26
#default = "Linux(2.6.26)"
#miguelb 2/02/09: de 2.6.26 -> 2.6.28
default = "Linux(2.6.28)"

# End LILO global section

# WIN-NT 4.0  bootable partition config begins
  other = /dev/hda1
  label = "Win2KPro"
  table = /dev/hda        # WIN-NT 4.0
# WIN-NT 4.0 bootable partition config ends

# Linux Debian bootable partition config begins
#image = /boot/vmlinuz-2.6.21-mh1-mISDN
#  root =/dev/hda6         # Linux 2.6.21-mh1-mISDN (Debian)
#  label = "Linux(2.6.21M)"
#  read-only
# Linux Debian bootable partition config ends

# Linux Debian bootable partition config begins
#image = /boot/vmlinuz-2.6.21-mh1-misdn
#   root =/dev/sda6         # Linux 2.6.21-mh1-mISDN (Debian)
#   label = "Linux(2.6.21)"
#   read-only
# Linux Debian bootable partition config ends

# Linux Debian bootable partition config begins
#image = /boot/vmlinuz-2.6.26
#  root =/dev/hda6         # Linux 2.6.26 (Debian)
#  label = "Linux(2.6.26)"
#  read-only
# Linux Debian bootable partition config ends

# Linux Debian bootable partition config begins
image = /boot/vmlinuz-2.6.28
  root =/dev/hda6         # Linux 2.6.28 (Debian)
  label = "Linux(2.6.28)"
  read-only
# Linux Debian bootable partition config ends


lilo.sda

# LILO configuration file
# NOT generated by 'liloconfig' :-)
#
# Start LILO global section
boot = /dev/sda
append = "panic=30 irqpoll"
lba32
prompt
timeout = 100
#message = /etc/lilo.msg
# passwd and resticted options by ptb 15/5/00 (NB this file doesn't count!)
password = XXXXXXXX
restricted
#default changed to 2.2.10 from 2.0.25 ptb 5/8/99
#default = 1
#default changed to 2.2.15 from 2.2.10 ptb 25/3/01
#default = 1
#default changed to 2.4.17 from 2.2.15 ptb 13/2/02
#default = "Linux(2.4.25)"
# almo 10/05/06: default changed to 2.6.13 from 2.4.17
#default = "Linux(2.6.15)"
#default = "Linux(2.6.21)"
#Celeste 23/06/08 changed to 2.6.21 from 2.6.26
#default = "Linux(2.6.26)"
#miguelb 2/02/09: de 2.6.26 -> 2.6.28
default = "Linux(2.6.28)"

# End LILO global section

# WIN-NT 4.0  bootable partition config begins
  other = /dev/sda1
  label = "Win2KPro"
  table = /dev/sda        # WIN-NT 4.0
# WIN-NT 4.0 bootable partition config ends

# Linux Debian bootable partition config begins
#image = /boot/vmlinuz-2.6.21-mh1-mISDN
#  root =/dev/sda6         # Linux 2.6.21-mh1-mISDN (Debian)
#  label = "Linux(2.6.21M)"
#  read-only
# Linux Debian bootable partition config ends

# Linux Debian bootable partition config begins
#image = /boot/vmlinuz-2.6.21-mh1-misdn
#   root =/dev/sda6         # Linux 2.6.21-mh1-mISDN (Debian)
#   label = "Linux(2.6.21)"
#   read-only
# Linux Debian bootable partition config ends

# Linux Debian bootable partition config begins
#image = /boot/vmlinuz-2.6.26
#  root =/dev/sda6         # Linux 2.6.26 (Debian)
#  label = "Linux(2.6.26)"
#  read-only
# Linux Debian bootable partition config ends

# Linux Debian bootable partition config begins
image = /boot/vmlinuz-2.6.28
  root =/dev/sda6         # Linux 2.6.28 (Debian)
  label = "Linux(2.6.28)"
  read-only
# Linux Debian bootable partition config ends


Configuración y problemas conocidos

Permisos

Si al compilar obtenemos el siguiente error de permisos:

dpkg-deb: construyendo el paquete `linux-image-2.6.28' en `../linux-image-2.6.28_2.6.28-10.00.Custom_i386.deb'.
dpkg-deb: el directorio de control tiene permisos erróneos 2755
(debe ser >=0755 y <=0775)
make[1]: *** [debian/linux-image-2.6.28] Error 2
make[1]: se sale del directorio `/usr/src/linux-2.6.28'
make: *** [binary/linux-image-2.6.28] Error 2


Tendremos que cambiar los permisos del directorio desde donde compilamos:

sudo chmod -R a-s /usr/src


Instalación desde .DEB

Si al instalar un kernel desde un .deb (de una versión ya instalada previamente), nos sale el siguiente error:

root@it016:/usr/src# dpkg -i linux-image-2.6.28_2.6.28-10.00.Custom_i386.deb
(Leyendo la base de datos ...
272314 ficheros y directorios instalados actualmente.)
Preparando para reemplazar linux-image-2.6.28 2.6.28-10.00.Custom (usando linux-image-2.6.28_2.6.28-10.00.Custom_i386.deb) ...
Ok, aborting, since modules for this image already exist.
dpkg: error al procesar linux-image-2.6.28_2.6.28-10.00.Custom_i386.deb (--install):
 el subproceso pre-installation script devolvió el código de salida de error 1
Se encontraron errores al procesar:
 linux-image-2.6.28_2.6.28-10.00.Custom_i386.deb

Simplemente ocurre que el dpkg detecta módulos de esa versión ya instalados, así con solo borrarlos (los de la misma versión) se soluciona:

sudo rm -r /lib/modules/2.6.28/


Automontaje de dispositivos USB

Si al conectar un pendrive USB por ejemplo, vemos como en los logs se detecta correctamente:

Jan 14 13:12:23 it006 kernel: usb 5-5: new high speed USB device using ehci_hcd and address 2
Jan 14 13:12:23 it006 kernel: usb 5-5: configuration #1 chosen from 1 choice
Jan 14 13:12:23 it006 kernel: Initializing USB Mass Storage driver...
Jan 14 13:12:23 it006 kernel: scsi2 : SCSI emulation for USB Mass Storage devices
Jan 14 13:12:23 it006 kernel: usbcore: registered new interface driver usb-storage
Jan 14 13:12:23 it006 kernel: USB Mass Storage support registered.
Jan 14 13:12:23 it006 kernel: usb-storage: device found at 2
Jan 14 13:12:23 it006 kernel: usb-storage: waiting for device to settle before scanning
Jan 14 13:12:28 it006 kernel: scsi 2:0:0:0: Direct-Access     USB 2.0  Flash Drive      1.00 PQ: 0 ANSI: 2
Jan 14 13:12:28 it006 kernel: sd 2:0:0:0: [sdb] 1012492 512-byte hardware sectors: (518 MB/494 MiB)
Jan 14 13:12:28 it006 kernel: sd 2:0:0:0: [sdb] Write Protect is off
Jan 14 13:12:28 it006 kernel: sd 2:0:0:0: [sdb] Mode Sense: 23 00 00 00
Jan 14 13:12:28 it006 kernel: sd 2:0:0:0: [sdb] Assuming drive cache: write through
Jan 14 13:12:28 it006 kernel: sd 2:0:0:0: [sdb] 1012492 512-byte hardware sectors: (518 MB/494 MiB)
Jan 14 13:12:28 it006 kernel: sd 2:0:0:0: [sdb] Write Protect is off
Jan 14 13:12:28 it006 kernel: sd 2:0:0:0: [sdb] Mode Sense: 23 00 00 00
Jan 14 13:12:28 it006 kernel: sd 2:0:0:0: [sdb] Assuming drive cache: write through
Jan 14 13:12:29 it006 kernel:  sdb: sdb1
Jan 14 13:12:29 it006 kernel: sd 2:0:0:0: [sdb] Attached SCSI removable disk
Jan 14 13:12:29 it006 kernel: usb-storage: device scan complete	

Pero desde el entorno gráfico GNOME nos sale el siguiente error:

Error org.freedesktop.DBus.Error.AccessDenied.
REJECTED MESSAFE had interface "org.freedesktop.Hal.Device.VOlume" member "MOunt" error name "(unset)" destination "org.freedesktop.Hal2

Se trata de un problema de permisos del comando interno "gnome-mount" que utiliza el propio GNOME para automontar los USB. Para permitir que el resto de usuarios a parte del root, puede automontar USB's, le damos más privilegios a dicho comando ("ñapa" patrocinada por Rafa):

sudo chmod +s /usr/bin/gnome-mount
ls -las /usr/bin/gnome-mount
    72 -rwsr-sr-x 1 root root 68896 ene 11  2008 /usr/bin/gnome-mount

Soporte para tarjetas PCI Wireless Atheros

Para poder dar soporte a las tarjetas Wifi Atheros, es necesario compilar los módulos a parte. Los archivos fuente de los módulos puedes descargarlos de la página web del proyecto MadWifi o vía repositorios (como hacemos nosotros a continuación). Los pasos para conseguir construir con un paquete .deb con los modulos ya compilados son los siguientes (manual de la cosecha propia de Celeste ;-) ):

1º- Remontamos las particiones con las que vamos a trabajar:

sudo mount -o remount,rw /usr

2º- Conseguimos los archivos fuente de los repositorios y descomprimimos el .tar:

sudo apt-get install madwifi-source
cd /usr/src
sudo tar jxvf madwifi.tar.bz2

3º- Compilamos los módulos de Atheros para el nuevo kernel:

cd linux-2.6.28
sudo make-kpkg --added-modules madwifi modules

4º- El comando anterior crea un paquete .deb en /usr/src con los módulos compilados y listos para instalarse:

sudo dpkg -i madwifi-modules-2.6.28_0.9.4+r3772.20080716-1+2.6.28-10.00.Custom_i386.deb

5º- Comprobamos que todo se ha instalado correctamente en /lib/modules/2.6.28/kernel/drivers/net (buscar módulo "ath_pci").

6º- Ahora sólo falta notificar a Linux la existencia de los nuevos módulos:

sudo depmod -a

7º- Para comprobar que todo ha ido bien:

sudo modprobe ath_pci
sudo ifconfig ath0 up
ath0      Link encap:Ethernet  HWaddr 00:14:6c:2c:6b:dd  
         inet6 addr: fe80::214:6cff:fe2c:6bdd/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:0 errors:0 dropped:0 overruns:0 frame:0
         TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0 
         RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
[...]
wifi0     Link encap:UNSPEC  HWaddr 00-14-6C-2C-6B-DD-61-74-00-00-00-00-00-00-00-00  
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:0 errors:0 dropped:0 overruns:0 frame:0
         TX packets:19 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:280 
         RX bytes:0 (0.0 B)  TX bytes:874 (874.0 B)
         Interrupt:16 


Soporte para tarjetas de red Intel

En los it011 - it020, con el kernel 2.6.28 ya no se puede usar el módulo "e1000" para las tarjetas de red integradas: Intel Corporation 82573V Gigabit Ethernet Controller (Copper) (rev 03). Ahora hay que usar el módulo que añade soporte para PCI-Express: "e1000e". Para ello, a la hora de compilar, desde el menuconfig activamos dicho módulo:

-> Device Drivers                                                  
   -> Network device support (NETDEVICES [=y])                       
      -> Ethernet (1000 Mbit) (NETDEV_1000 [=y])   
         (M)  Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support

Además, se detecto que el script que asigna los módulos al arrancar tenía un bug, al considerar que estos equipos tenían una tarjeta de red integrada Realtek (módulo 8139too) en vez de una Intel (e1000e). Para corregir dicho bug (cambiamos "8139too" por "e1000e" en la línea 274 del /etc/modules.conf):

sudo vim /etc/modules.conf
  -> Linea 274:  alias eth0 e1000e 
sudo rm /etc/udev/rules.d/z25_persistent-net.rules


Kernek Panic: VFS:Cannot open root device

Si al arrancar por primera vez que con nuestro nuevo kernel obtenemos el siguiente kernel panic:

"VFS:Cannot open root device 306 or unknow block
 Append a correct "root"=boot option; here are the available partition
 Kernel Panic - not syncing: VFS unable mount root fs on unknown block"

Se puede deber a que no reconoce la controladora de disco duro. En nuestro caso, en los llamados equipos "monitor04 y monitor05", ambos tenían una controladora IDE distinta al resto (Silicon Integrated Systems [SiS] 5513 [IDE]). Para solucionar dicho kernel panic, basta con compilar el driver correspondiente (pata_sis) y de paso, deshabilitar el soporte para RAID (sobretodo la autodetección al arrancar) puesto que no se usa en aulas:

-> Device Drivers                                                   
   -> ATA/ATAPI/MFM/RLL support (IDE [=y]) 
      <*>   Silicon Image chipset support                              
      <*>   SiS5513 chipset support 
-> Device Drivers                                                                                                
   -> Multiple devices driver support (RAID and LVM) (MD [=y])                                                    
      -> RAID support (BLK_DEV_MD [=y])  
         < >   RAID support  


Preemptible Kernel

Esta opción del kernel, que intenta hacer un uso más eficiente de los ciclos ociosos del micro; interfiere con algunos programas usados en prácticas. Por ello es necesario deshabilitarlo desde "menuconfig":

-> Processor type and features:
   -> Preemption Model
      (X) No Forced Preemption (Server)                     
      ( ) Voluntary Kernel Preemption (Desktop)             	
      ( ) Preemptible Kernel (Low-Latency Desktop)
  • NOTA: esta opción interfiere en prácticas como la de UML

Soporte para RDSI/ISDN

En los laboratorios se usan las tarjetas de RDSI "Dialogic Corporation Diva 2.01 S/T PCI (rev 01)", las cuales utilizan el módulo HiSax:

lsmod | grep hisax
  hisax                 432128  0
  crc_ccitt               3200  1 hisax
  isdn                  125664  1 hisax

Por defecto viene deshabilitado el soporte para dicho módulo (ya que considera desfasado). Pero como en las prácticas se sigue usando, tendremos que habilitarlo expresamente desde el menuconfig al compilar:

-> Device drivers:
   -> ISDN support:
      <M>   Modular ISDN driver  --->                                 
      <M>   Old ISDN4Linux (deprecated)  --->                          
      <M>   CAPI 2.0 subsystem  --->
      -> Old ISDN4LINUX (depcrecated): 
         [*]   Support synchronous PPP
         [*]   Support audio via ISDN
         -> Passive cards ->
            HiSax SiemensChipSet driver support (M):
      	      [*] HiSax Support for EURO/DSS1
            [*] HiSax Support for german 1TR6
            [*] HiSax Support for US NI1
            *** HiSax supported cards ***
            [*]   Eicon.Diehl Diva cards

Con dichas opciones de compilación, conseguiremos soporte para las tarjetas DIVA. Para comprobar que todo ha ido bien: Procedimiento de prueba RDSI


Soporte para ATM

En los laboratorio se usan dos tipos de tarjetas: las PCA-Fore200e y las NicStar (25Mbps). Las nuevas se soportan por defecto, pero para las antiguas, es necesario a parte del módulo correspondiente ("fore_200e"), el propio fichero del firmware de la tarjeta. Si no disponemos de él, nos saldrá el siguiente error al cargar el módulo fore_200e con el kernel 2.6.28:

Jan 19 10:55:46 it006 kernel: NET: Registered protocol family 8
Jan 19 10:55:46 it006 kernel: NET: Registered protocol family 20
Jan 19 10:55:46 it006 kernel: fore200e: FORE Systems 200E-series ATM driver - version 0.3e
Jan 19 10:55:46 it006 kernel: fore_200e 0000:03:04.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17
Jan 19 10:55:46 it006 kernel: fore200e: device PCA-200E found at 0xfe800000, IRQ 17
Jan 19 10:55:46 it006 kernel: fore200e: device PCA-200E-0 being registered
Jan 19 10:55:46 it006 kernel: fore200e: device PCA-200E-0 being configured
Jan 19 10:55:46 it006 kernel: fore200e: device PCA-200E-0 being mapped in memory
Jan 19 10:55:46 it006 kernel: fore200e: device PCA-200E-0 mapped to 0xf8680000
Jan 19 10:55:46 it006 kernel: fore200e: device PCA-200E-0 self-test passed
Jan 19 10:55:46 it006 kernel: fore_200e 0000:03:04.0: firmware: requesting pca200e.bin
Jan 19 10:55:46 it006 kernel: BUG: unable to handle kernel NULL pointer dereference at 00000004
Jan 19 10:55:46 it006 kernel: IP: [<f81c7a07>] fore200e_pca_detect+0x1b8/0xb75 [fore_200e]
Jan 19 10:55:46 it006 kernel: *pde = 00000000
Jan 19 10:55:46 it006 kernel: Oops: 0000 [#1] SMP
Jan 19 10:55:46 it006 kernel: last sysfs file: /sys/class/firmware/0000:03:04.0/loading
Jan 19 10:55:46 it006 kernel: Modules linked in: fore_200e(+) atm binfmt_misc rfcomm l2cap bluetooth autofs4 nfs lockd nfs_acl sunrpc ipv6 snd_mpu401 snd_cs4232 snd_wss_lib snd_opl3_lib snd_hda_intel snd_hwdep snd_mpu401_uart snd_pcm_oss wlan_scan_sta snd_pcm snd_mixer_oss ath_rate_sample snd_seq_dummy snd_seq_oss snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq snd_timer snd_seq_device snd via_rhine i2c_viapro ehci_hcd soundcore snd_page_alloc 8250_pnp 3c59x bitrev crc32 ath_pci wlan ath_hal(P) uhci_hcd i2c_core 8250 serial_core parport_pc parport shpchp ide_cd_mod usbcore button cdrom pci_hotplug evdev via_agp agpgart
Jan 19 10:55:46 it006 kernel:
Jan 19 10:55:46 it006 kernel: Pid: 8124, comm: modprobe Tainted: P           (2.6.28 #1) To Be Filled By O.E.M.
Jan 19 10:55:46 it006 kernel: EIP: 0060:[<f81c7a07>] EFLAGS: 00010246 CPU: 0
Jan 19 10:55:46 it006 kernel: EIP is at fore200e_pca_detect+0x1b8/0xb75 [fore_200e]
Jan 19 10:55:46 it006 kernel: EAX: 00000000 EBX: 00000000 ECX: f70000c0 EDX: 00000001
Jan 19 10:55:46 it006 kernel: ESI: f3348000 EDI: f70fac58 EBP: f327f540 ESP: f31afd38
Jan 19 10:55:46 it006 kernel:  DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068
Jan 19 10:55:46 it006 kernel: Process modprobe (pid: 8124, ti=f31ae000 task=f31e27a0 task.ti=f31ae000)
Jan 19 10:55:46 it006 kernel: Stack:
Jan 19 10:55:46 it006 kernel:  c01cde31 f70fac00 f3348020 000026c0 c016e7e4 f7018c00 c01981b8 c20c5028
Jan 19 10:55:46 it006 kernel:  f7018c00 f7103ae0 f6c5e6c8 00000000 f3277b38 c016e671 f6c5e6c8 c0198725
Jan 19 10:55:46 it006 kernel:  f3277b38 f3277b38 c0198450 32616370 2e653030 006e6962 00000000 f3277b38
Jan 19 10:55:46 it006 kernel: Call Trace:
Jan 19 10:55:46 it006 kernel:  [<c01cde31>] ida_get_new_above+0xd5/0x179
[...]
Jan 19 10:55:46 it006 kernel: Code: 8c 00 00 00 e8 2d 4c 06 c8 83 c4 10 48 75 16 8b 46 08 ff 30 68 46 9b 1c f8 e8 66 8e 13 c8 59 5b e9 92 09 00 00 8b 44 24 7c 31 db <8b> 50 04 89 54 24 0c 8b 38 8b 6e 3c 03 6a 08 c1 ef 02 57 55 ff
Jan 19 10:55:46 it006 kernel: EIP: [<f81c7a07>] fore200e_pca_detect+0x1b8/0xb75 [fore_200e] SS:ESP 0068:f31afd38
Jan 19 10:55:46 it006 kernel: ---[ end trace c6986988004d4a6b ]--- 

O si miramos el /var/log/syslog, vemos como carga el módulo pero no puede iniciar el dispositivo por faltar dicho archivo en /lib/firmware:

CUIDADO

Ha cambiado de /lib/firmwares a /lib/firmware para kernel 2.6.28 desde marzo 2010

Jan 19 13:11:00 it006 kernel: fore200e: FORE Systems 200E-series ATM driver - version 0.3e
Jan 19 13:11:00 it006 kernel: fore_200e 0000:03:04.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17
Jan 19 13:11:00 it006 kernel: fore200e: device PCA-200E found at 0xfe800000, IRQ 17
Jan 19 13:11:00 it006 kernel: fore200e: device PCA-200E-0 being registered
Jan 19 13:11:00 it006 kernel: fore200e: device PCA-200E-0 being configured
Jan 19 13:11:00 it006 kernel: fore200e: device PCA-200E-0 being mapped in memory
Jan 19 13:11:00 it006 kernel: fore200e: device PCA-200E-0 mapped to 0xf8680000
Jan 19 13:11:00 it006 kernel: fore200e: device PCA-200E-0 self-test passed
Jan 19 13:11:00 it006 kernel: fore_200e 0000:03:04.0: firmware: requesting pca200e.bin
Jan 19 13:11:00 it006 kernel: fore200e: device PCA-200E-0 firmware being loaded at 0xf8685140 (9390 words)
Jan 19 13:11:00 it006 kernel: fore200e: device PCA-200E-0 firmware being started
Jan 19 13:11:02 it006 kernel: fore200e: I/O polling failed, got status 0x02201958, expected 0xce11feed
Jan 19 13:11:02 it006 kernel: fore200e: device PCA-200E-0 firmware didn't start
Jan 19 13:11:02 it006 kernel: fore200e: removing device PCA-200E-0 at 0xfe800000, IRQ 17
Jan 19 13:11:02 it006 kernel: fore200e: device PCA-200E-0 being unmapped from memory
Jan 19 13:11:02 it006 kernel: fore_200e 0000:03:04.0: PCI INT A disabled

Es decir, que en el nuevo kernel ya no viene dicho firmware. Para solucionarlo, copiaremos dicho fichero: [pca200e.bin] del antiguo kernel (2.6.26) al directorio /lib/firmwares. Es por este motivo, por lo que la instalación del kernel con un .TGZ * se incluía este archivo en la estructura del .tar

A la hora de compilar el kernel, necesitaremos poner las siguientes opciones desde el menuconfig:

-> Device Drivers
   -> Network device support
      -> ATM drivers
         <M>   FORE Systems 200E-series                                   
               [*]     Defer interrupt work to a tasklet                        
               (16)    Maximum number of tx retries                            
               (3)     Debugging level (0-3)

Si hacemos todo lo anterior, conseguiremos poder cargar el módulo "fore_200e" correctamente:

sudo modprobe fore_200e
sudo tail -f /var/log/syslog
Jan 20 12:17:56 it006 kernel: NET: Registered protocol family 20
Jan 20 12:17:56 it006 kernel: fore200e: FORE Systems 200E-series ATM driver - version 0.3e
Jan 20 12:17:56 it006 kernel: fore_200e 0000:03:04.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17
Jan 20 12:17:56 it006 kernel: fore200e: device PCA-200E found at 0xfe800000, IRQ 17
Jan 20 12:17:56 it006 kernel: fore200e: device PCA-200E-0 self-test passed
Jan 20 12:17:56 it006 kernel: fore_200e 0000:03:04.0: firmware: requesting pca200e.bin
Jan 20 12:17:56 it006 kernel: fore200e: device PCA-200E-0 firmware started
Jan 20 12:17:56 it006 kernel: fore200e: device PCA-200E-0 initialized
Jan 20 12:17:57 it006 kernel: fore200e: device PCA-200E-0, rev. E, S/N: 16500, ESI: 00:20:48:08:40:74
Jan 20 12:17:57 it006 kernel: fore200e: IRQ 17 reserved for device PCA-200E-0

Para comprobar que todo ha ido correctamente: [1]





> Mapa interactivo del kernel: Kernel Map

--Miguel 10:42 16 feb 2009 (UTC)