Esta entrada se va a realizar un análisis del hardware de la Raspberry Pi, partiendo de las especificaciones técnicas de la Raspberry Pi B modelo 2.0. Para realizar el estudio se partirán de herramientas incluidas en el Sistema Operativo y alguna otra que habrá que instalar.
La información sobre el Hardware del equipo se va a obtener del directorio /proc , sistema de ficheros virtual que el sistema crea en memoria y ofrece información relacionada con el sistema.
El primer fichero que se va a analizar es /proc/cpuinfo, que tiene información relativa al procesador. Una vez ejecutado cat /proc/cpuinfo obtenemos la siguiente información
Processor : ARMv6-compatible processor rev 7 (v6l)
BogoMIPS : 697.95
Features : swp half thumb fastmult vfp edsp java tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xb76
CPU revision : 7
Hardware : BCM2708
Revision : 000f
Serial : 00000000c047d6ab
BogoMIPS : 697.95
Features : swp half thumb fastmult vfp edsp java tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xb76
CPU revision : 7
Hardware : BCM2708
Revision : 000f
Serial : 00000000c047d6ab
La información más importante que se puede observar es la versión de procesador ARM con la que es compatible con la versión 7, identificado por BCM2708 (procesador Broadcom 2708).
Mediante el comando lscpu se obtiene:
Architecture: armv6l
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0
Byte Order: Little Endian
CPU(s): 1
On-line CPU(s) list: 0
Está indicando que solo hay una CPU y utiliza el sistema Little-Endian, es decir, el acceso a los bytes se realiza de manera incremental, de menos relevante a más relevante.
Para explorar la memoria se va a explorar el archivo /proc/meminfo, que contiene información del sistema de memoria. Para acceder a su contenido cat /proc/meminfo.
MemTotal: 448996 kB
MemFree: 251624 kB
Buffers: 38624 kB
Cached: 107892 kB
SwapCached: 0 kB
Active: 88828 kB
Inactive: 85020 kB
Active(anon): 27400 kB
Inactive(anon): 724 kB
Active(file): 61428 kB
Inactive(file): 84296 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 102396 kB
SwapFree: 102396 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 27344 kB
Mapped: 17100 kB
Shmem: 796 kB
Slab: 18452 kB
SReclaimable: 14840 kB
SUnreclaim: 3612 kB
KernelStack: 1168 kB
PageTables: 1396 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 326892 kB
Committed_AS: 153780 kB
VmallocTotal: 188416 kB
VmallocUsed: 884 kB
VmallocChunk: 186712 kB
MemFree: 251624 kB
Buffers: 38624 kB
Cached: 107892 kB
SwapCached: 0 kB
Active: 88828 kB
Inactive: 85020 kB
Active(anon): 27400 kB
Inactive(anon): 724 kB
Active(file): 61428 kB
Inactive(file): 84296 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 102396 kB
SwapFree: 102396 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 27344 kB
Mapped: 17100 kB
Shmem: 796 kB
Slab: 18452 kB
SReclaimable: 14840 kB
SUnreclaim: 3612 kB
KernelStack: 1168 kB
PageTables: 1396 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 326892 kB
Committed_AS: 153780 kB
VmallocTotal: 188416 kB
VmallocUsed: 884 kB
VmallocChunk: 186712 kB
Estos datos indican que la memoria RAM es de 438 MB, prácticamente la memoria del sistema está libre, unos 38 MB están siendo utilizados por buffers en este momento, unos 107 MB se están utilizando de memoria RAM como Caché, no hay Caché en al memoria virtual, se están utilizando 102 MB como memoria virtual (SWAP).
En este punto cabría preguntarse cómo puede ser que se comercialice la placa con 512 MB de RAM cuando el sistema muestra un valor bastante inferior cercano de unos 438 MB. Esto es debido a que a los 512 MB se les quita unos pocos bits reservados y espacio del kernel.
Información similar pero más resumida se obtiene mediante el comando free –m .
total
|
used
free
shared
buffers
cached
Mem:
438
116
321
0
12
68
-/+
buffers/cache:
35
402
Swap:
99
0
99
Para explorar la memoria dedicada a cada dispositivo físico se explora el fichero /proc/iomem.
00000000-1bffffff : System RAM
00008000-004c0e77 : Kernel text
004e2000-005b5127 : Kernel data
20000000-20000fff : bcm2708_vcio
20003000-20003fff : bcm2708_systemtimer
20006000-20006fff : bcm2708_usb
20006000-20006fff : dwc_otg
20007000-20007fff : bcm2708_dma.0
20007000-20007fff : bcm2708_dma
20100000-201000ff : bcm2708_powerman.0
20200000-20200fff : bcm2708_gpio
20201000-20201fff : dev:f1
20201000-20201fff : uart-pl011
20204000-202040ff : bcm2708_spi.0
20205000-202050ff : bcm2708_i2c.0
20300000-203000ff : bcm2708_sdhci.0
20300000-203000ff : mmc0
20804000-208040ff : bcm2708_i2c.1
20980000-2099ffff : bcm2708_usb
20980000-2099ffff : dwc_otg
00008000-004c0e77 : Kernel text
004e2000-005b5127 : Kernel data
20000000-20000fff : bcm2708_vcio
20003000-20003fff : bcm2708_systemtimer
20006000-20006fff : bcm2708_usb
20006000-20006fff : dwc_otg
20007000-20007fff : bcm2708_dma.0
20007000-20007fff : bcm2708_dma
20100000-201000ff : bcm2708_powerman.0
20200000-20200fff : bcm2708_gpio
20201000-20201fff : dev:f1
20201000-20201fff : uart-pl011
20204000-202040ff : bcm2708_spi.0
20205000-202050ff : bcm2708_i2c.0
20300000-203000ff : bcm2708_sdhci.0
20300000-203000ff : mmc0
20804000-208040ff : bcm2708_i2c.1
20980000-2099ffff : bcm2708_usb
20980000-2099ffff : dwc_otg
En este punto se ven las zonas de memoria para la comunicación con dispositivos a través de la GPIO, USB, serie,...
Existe un fichero bastante interesante que se encuentra en
/boot denominado config.txt, dicho fichero es leído por la GPU antes de que el
núcleo ARM sea inicializado. La configuración de este fichero permite modificar
la frecuencia del procesador ARM, de la GPU, de la SDRAM, suministrar más voltaje al núcleo de la
Raspberry Pi,… .Por tanto se podría realizar “Overclocking” modificando el
mismo. El contenido del fichero es:
# uncomment if you get no picture on HDMI for a default "safe" mode
#hdmi_safe=1
# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
disable_overscan=1
# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16
# uncomment to force a console size. By default it will be display's size minus
# overscan.
#framebuffer_width=1280
#framebuffer_height=720
# uncomment if hdmi display is not detected and composite is being output
#hdmi_force_hotplug=1
# uncomment to force a specific HDMI mode (this will force VGA)
#hdmi_group=1
#hdmi_mode=1
# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
#hdmi_drive=2
# uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
#config_hdmi_boost=4
# uncomment for composite PAL
#sdtv_mode=2
#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800
# for more options see http://elinux.org/RPi_config.txt
#hdmi_safe=1
# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
disable_overscan=1
# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16
# uncomment to force a console size. By default it will be display's size minus
# overscan.
#framebuffer_width=1280
#framebuffer_height=720
# uncomment if hdmi display is not detected and composite is being output
#hdmi_force_hotplug=1
# uncomment to force a specific HDMI mode (this will force VGA)
#hdmi_group=1
#hdmi_mode=1
# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
#hdmi_drive=2
# uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
#config_hdmi_boost=4
# uncomment for composite PAL
#sdtv_mode=2
#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800
# for more options see http://elinux.org/RPi_config.txt
Se ha instalado la herramienta hardinfo, que incorpora test a la CPU para ampliar la información
obtenida hasta el momento.
Se ha generado un informe mediante la opción de Generate Report y la información que se ha considerado más útil, que amplía a la ya obtenida, es:
Memory 448MB (60MB used)
Audio Adapter
BRCM bcm2835 ALSbcm2835 ALSA - bcm2835 ALSA
Audio Adapter
BRCM bcm2835 ALSbcm2835 ALSA - bcm2835 ALSA
MAPA EN MEMORIA | ||||
MODULO | COMIENZO HEX | FIN HEX | COMIENZO DEC | FIN DEC |
SystemRAM | 00000000 | 1bffffff | 0 | 469762047 |
Kerneltext | 00008000 | 004c0e77 | 32768 | 4984439 |
Kerneldata | 004e2000 | 005b5127 | 5120000 | 5984551 |
bcm2708_vcio | 20000000 | 20000fff | 536870912[1] | 536875007 |
bcm2708_systemtimer | 20003000 | 20003fff | 536883200 | 536887295 |
bcm2708_usb | 20006000 | 20006fff | 536895488 | 536899583 |
dwc_otg | 20006000 | 20006fff | 536895488 | 536899583 |
bcm2708_dma.0 | 20007000 | 20007fff | 536899584 | 536903679 |
bcm2708_dma | 20007000 | 20007fff | 536899584 | 536903679 |
bcm2708_powerman.0 | 20100000 | 201000ff | 537919488 | 537919743 |
bcm2708_gpio | 20200000 | 20200fff | 538968064 | 538972159 |
dev:f1 | 20201000 | 20201fff | 538972160 | 538976255 |
uart-pl011 | 20201000 | 20201fff | 538972160 | 538976255 |
bcm2708_spi.0 | 20204000 | 202040ff | 538984448 | 538984703 |
bcm2708_i2c.0 | 20205000 | 202050ff | 538988544 | 538988799 |
bcm2708_sdhci.0 | 20300000 | 203000ff | 540016640 | 540016895 |
mmc0 | 20300000 | 203000ff | 540016640 | 540016895 |
bcm2708_i2c.1 | 20804000 | 208040ff | 545275904 | 545276159 |
bcm2708_usb | 20980000 | 2099ffff | 546832384 | 546963455 |
dwc_otg | 20980000 | 2099ffff | 546832384 | 546963455 |
[1] 536870912 = 512 MB
RAM X 1024 KB/MB X 1024 B/KB
A través de la herramienta hardinfo también podemos testear la CPU, a través de diferentes pruebas. Puede ser un buen punto de partida comparar estos valores con los obtenidos cuando se realiza Overclocking sobre la CPU.
Otra herramienta que permite listar el hardware es lshw, que no viene instalada por defecto y la información que muestra no dista mucho de la vista hasta el momento, pero si indica que trabaja a 700MHz y el ancho de palabra es de 32 bit.
No hay comentarios:
Publicar un comentario