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.