En este primer punto del curso de LPIC deberíamos saber determinar y configurar de manera básica el hardware de un equipo.

Hay algunas cosas que daremos por entendidas, pero que si abren dudas podéis dejarlas en los comentarios.

OBJETIVO 1: Determinar y configurar las opciones de hardware

BIOS

El firmware del PC se llama comúnmente BIOS. La BIOS se encarga de que todos los elementos hardware estén disponibles para el posterior arranque del sistema operativo. Existen muchas BIOS diferentes e inclusos entre versiones pueden añadir muchas funcionalidades distintas (las versiones las debe aportar el fabricante de la propia BIOS). Las herramientas más comunes incluyen herramientas de test, administración del almacenamiento, configuración básica de la mayoría de elementos del PC, orden de arranque de los dispositivos, etc. Dada esta variedad este apartado no entra en el examen, pero se requiere un conocimiento básico de sus funciones.

Fecha y hora

Una de las funciones básicas de la BIOS es administrar el reloj integrado en la placa base del equipo. Este reloj dará posteriormente la fecha y la hora al sistema operativo, aunque posteriormente el sistema operativo puede trabajar con su propio reloj interno, e incluso se puede conectar a un servidor NTPD para obtener una fecha y hora “oficial”.

Discos y dispositivos de arranque

Otra función fundamental de la BIOS es la selección de dispositivos de almacenamiento y su configuración. Estos pueden ser dispositivos que pueden ser de diferentes tecnologías (IDE, SCSI…) pueden ordenarse para que arranquen siguiendo una determinada secuencia.

/proc filesystem

Cuando añadimos elementos hardware a un sistema operativo Linux ya instalado deberíamos comprobar que este está disponible. Aquí podremos ver por ejemplo si existe algún conflicto entre dispositivos en cuanto al uso de interrupciones.

cat /proc/interrupts

CPU0

0: 864570 XT-PIC-XT-PIC timer

1: 63 XT-PIC-XT-PIC i8042

2: 0 XT-PIC-XT-PIC cascade

4: 1 XT-PIC-XT-PIC

5: 2 XT-PIC-XT-PIC

6: 1 XT-PIC-XT-PIC

7: 9 XT-PIC-XT-PIC parport0

8: 0 XT-PIC-XT-PIC rtc0

9: 44 XT-PIC-XT-PIC acpi

10: 21334 XT-PIC-XT-PIC ehci_hcd:usb1, uhci_hcd:usb2, uhci_hcd:usb3, uhci_hcd:usb4, i915, firewire_ohci, yenta, ipw2200, snd_intel8x0, snd_intel8x0m , enp1s1

11: 1 XT-PIC-XT-PIC

12: 4198 XT-PIC-XT-PIC i8042

14: 29616 XT-PIC-XT-PIC ata_piix

15: 18128 XT-PIC-XT-PIC ata_piix

NMI: 0 Non-maskable interrupts

LOC: 0 Local timer interrupts

SPU: 0 Spurious interrupts

PMI: 0 Performance monitoring interrupts

IWI: 0 IRQ work interrupts

RTR: 0 APIC ICR read retries

RES: 0 Rescheduling interrupts

CAL: 0 Function call interrupts

TLB: 0 TLB shootdowns

TRM: 0 Thermal event interrupts

THR: 0 Threshold APIC interrupts

MCE: 0 Machine check exceptions

MCP: 62 Machine check polls

ERR: 0

MIS: 0

Hay un par de ficheros más que incluyen información interesante el dma y el ioports.

# cat /proc/dma

4: cascade

# cat /proc/ioports

0000-001f : dma1

0020-0021 : pic1

0040-0043 : timer0

0050-0053 : timer1

0060-0060 : keyboard

0062-0062 : EC data

0064-0064 : keyboard

0066-0066 : EC cmd

0070-0071 : rtc0

0080-008f : dma page reg

00a0-00a1 : pic2

00c0-00df : dma2

00f0-00ff : fpu

0170-0177 : 0000:00:1f.1

0170-0177 : ata_piix

01f0-01f7 : 0000:00:1f.1

01f0-01f7 : ata_piix

0200-020f : pnp 00:00

0376-0376 : 0000:00:1f.1

0376-0376 : ata_piix

0378-037a : parport0

037b-037f : parport0

03f6-03f6 : 0000:00:1f.1

03f6-03f6 : ata_piix

04d0-04d1 : pnp 00:00

0cf8-0cff : PCI conf1

1000-1003 : ACPI PM1a_EVT_BLK

1004-1005 : ACPI PM1a_CNT_BLK

1008-100b : ACPI PM_TMR

1010-1015 : ACPI CPU throttle

1020-1020 : ACPI PM2_CNT_BLK

1028-102f : ACPI GPE0_BLK

1030-1033 : iTCO_wdt

1030-1033 : iTCO_wdt

1060-107f : iTCO_wdt

1060-107f : iTCO_wdt

1100-110f : 0000:00:1f.1

1100-110f : ata_piix

1200-121f : 0000:00:1d.0

1200-121f : uhci_hcd

1300-133f : 0000:00:1f.0

1300-133f : pnp 00:00

1400-141f : 0000:00:1f.3

1400-141f : i801_smbus

1600-161f : 0000:00:1d.1

1600-161f : uhci_hcd

1700-171f : 0000:00:1d.2

1700-171f : uhci_hcd

c000-dfff : PCI Bus 0000:01

c000-c0ff : 0000:01:01.0

c000-c0ff : 8139too

c100-c17f : 0000:01:00.0

c400-c4ff : PCI CardBus 0000:02

c800-c8ff : PCI CardBus 0000:02

e000-e007 : 0000:00:02.0

e100-e1ff : 0000:00:1f.5

e100-e1ff : Intel 82801DB-ICH4

e200-e23f : 0000:00:1f.5

e200-e23f : Intel 82801DB-ICH4

e300-e3ff : 0000:00:1f.6

e300-e3ff : Intel 82801DB-ICH4 Modem

e400-e47f : 0000:00:1f.6

e400-e47f : Intel 82801DB-ICH4 Modem

fe00-fe00 : pnp 00:00

USB

Los dispositivos USB funcionan un poco a parte de los dispositivos más tradicionales y tienen su propia topología:

# lsusb -t

/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M

/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M

/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=uhci_hcd/2p, 12M

/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/6p, 480M

Hay que tener en cuenta que el soporte para USB no se añadió hasta la versión 2.3.x del Linux Kernel. Versiones anteriores no soportan USB.

Listando nuestro hardware

Para nuestro listar nuestro hardware existen además algunas utilidades muy útiles como lsmod, lsdev y lspci.

# lsmod

Module Size Used by

bnep 18959 2

bluetooth 348230 5 bnep

af_packet 35121 4

snd_intel8x0m 18382 0

snd_intel8x0 33069 2

snd_ac97_codec 113860 2 snd_intel8x0m,snd_intel8x0

ac97_bus 12642 1 snd_ac97_codec

ppdev 17391 0

snd_pcm 97750 3 snd_intel8x0m,snd_intel8x0,snd_ac97_codec

i2c_i801 21996 0

snd_seq 63575 0

pcspkr 12630 0

snd_timer 24363 2 snd_pcm,snd_seq

snd_seq_device 14137 1 snd_seq

snd 70538 11 snd_intel8x0m,snd_intel8x0,snd_ac97_codec,snd_pcm,snd_seq,snd_timer,snd_seq_device

iTCO_wdt 13256 0

iTCO_vendor_support 13502 1 iTCO_wdt

ipw2200 187864 0

libipw 50430 1 ipw2200

cfg80211 444345 2 ipw2200,libipw

joydev 17097 0

rfkill 25410 4 bluetooth,cfg80211

sr_mod 21964 0

cdrom 41371 1 sr_mod

battery 18291 0

pcmcia 55464 0

soundcore 14599 1 snd

ac 13066 0

lib80211 14040 2 ipw2200,libipw

yenta_socket 40193 0

serio_raw 13189 0

snd_page_alloc 14230 3 snd_intel8x0m,snd_intel8x0,snd_pcm

acpi_cpufreq 19118 0

mperf 12603 1 acpi_cpufreq

of_i2c 13064 1 i2c_i801

firewire_ohci 39559 0

firewire_core 65848 1 firewire_ohci

crc_itu_t 12627 1 firewire_core

lpc_ich 16864 0

pcmcia_rsrc 18319 1 yenta_socket

pcmcia_core 26424 3 pcmcia,yenta_socket,pcmcia_rsrc

8139too 32530 0

8139cp 31226 0

mii 13654 2 8139too,8139cp

shpchp 32129 0

parport_pc 36462 0

parport 40768 2 ppdev,parport_pc

sg 35720 0

dm_mod 84686 0

autofs4 33269 2

ata_generic 12790 0

ata_piix 26398 3

ahci 25579 0

libahci 30650 1 ahci

libata 206397 4 ata_generic,ata_piix,ahci,libahci

uhci_hcd 35663 0

i915 647443 3

drm_kms_helper 50963 1 i915

drm 262852 4 i915,drm_kms_helper

i2c_algo_bit 13197 1 i915

ehci_pci 12777 0

ehci_hcd 59896 1 ehci_pci

button 13664 1 i915

processor 35177 2 acpi_cpufreq

i2c_core 34329 6 i2c_i801,of_i2c,i915,drm_kms_helper,drm,i2c_algo_bit

video 18926 1 i915

thermal_sys 35374 2 processor,video

hwmon 12911 1 thermal_sys

usbcore 206487 3 uhci_hcd,ehci_pci,ehci_hcd

usb_common 13120 1 usbcore

scsi_dh_hp_sw 12745 0

scsi_dh_alua 17082 0

scsi_dh_rdac 17202 0

scsi_dh_emc 12965 0

scsi_dh 14458 4 scsi_dh_hp_sw,scsi_dh_alua,scsi_dh_rdac,scsi_dh_emc

# lsdev

Device DMA IRQ I/O Ports

------------------------------------------------

0000:00:02.0 e000-e007

0000:00:1d.0 1200-121f

0000:00:1d.1 1600-161f

0000:00:1d.2 1700-171f

0000:00:1f.0 1300-133f

0000:00:1f.1 0170-0177 01f0-01f7 0376-0376 03f6-03f6 1100-110f

0000:00:1f.3 1400-141f

0000:00:1f.5 e100-e1ff e200-e23f

0000:00:1f.6 e300-e3ff e400-e47f

0000:01:00.0 c100-c17f

0000:01:01.0 c000-c0ff

8139too c000-c0ff

ACPI 1000-1003 1004-1005 1008-100b 1010-1015 1020-1020 1028-102f

acpi 9

ata_piix 14 15 0170-0177 01f0-01f7 0376-0376 03f6-03f6 1100-110f

cascade 4 2

dma 0080-008f

dma1 0000-001f

dma2 00c0-00df

EC 0062-0062 0066-0066

ehci_hcd:usb1 10

enp1s1 10

firewire_ohci 10

fpu 00f0-00ff

i801_smbus 1400-141f

i8042 1 12

i915 10

Intel e100-e1ff e200-e23f e300-e3ff e400-e47f

ipw2200 10

iTCO_wdt 1030-1033 1030-1033 1060-107f 1060-107f

keyboard 0060-0060 0064-0064

parport0 7 0378-037a 037b-037f

PCI 0cf8-0cff c000-dfff c400-c4ff c800-c8ff

PIC 4 5 6 11

pic1 0020-0021

pic2 00a0-00a1

pnp 0200-020f 04d0-04d1 1300-133f fe00-fe00

rtc0 8 0070-0071

snd_intel8x0 10

snd_intel8x0m 10

timer 0

timer0 0040-0043

timer1 0050-0053

uhci_hcd 1200-121f 1600-161f 1700-171f

uhci_hcd:usb2 10

uhci_hcd:usb3 10

uhci_hcd:usb4 10

yenta 10

# lspci

00:00.0 Host bridge: Intel Corporation 82852/82855 GM/GME/PM/GMV Processor to I/O Controller (rev 02)

00:00.1 System peripheral: Intel Corporation 82852/82855 GM/GME/PM/GMV Processor to I/O Controller (rev 02)

00:00.3 System peripheral: Intel Corporation 82852/82855 GM/GME/PM/GMV Processor to I/O Controller (rev 02)

00:02.0 VGA compatible controller: Intel Corporation 82852/855GM Integrated Graphics Device (rev 02)

00:02.1 Display controller: Intel Corporation 82852/855GM Integrated Graphics Device (rev 02)

00:1d.0 USB controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 (rev 03)

00:1d.1 USB controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2 (rev 03)

00:1d.2 USB controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3 (rev 03)

00:1d.7 USB controller: Intel Corporation 82801DB/DBM (ICH4/ICH4-M) USB2 EHCI Controller (rev 03)

00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 83)

00:1f.0 ISA bridge: Intel Corporation 82801DBM (ICH4-M) LPC Interface Bridge (rev 03)

00:1f.1 IDE interface: Intel Corporation 82801DBM (ICH4-M) IDE Controller (rev 03)

00:1f.3 SMBus: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) SMBus Controller (rev 03)

00:1f.5 Multimedia audio controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller (rev 03)

00:1f.6 Modem: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller (rev 03)

01:00.0 FireWire (IEEE 1394): VIA Technologies, Inc. VT6306/7/8 [Fire II(M)] IEEE 1394 OHCI Controller (rev 80)

01:01.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)

01:02.0 Network controller: Intel Corporation PRO/Wireless 2200BG [Calexico2] Network Connection (rev 05)

01:04.0 CardBus bridge: ENE Technology Inc CB1410 Cardbus Controller (rev 01)

Está muy bien revisarse las opciones que trae cada una de estas utilidades para ver un poco más con profundidad lo que podemos conseguir.