domingo, 9 de junio de 2013

EXPLORANDO EL HARDWARE DE RASPBERRY


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
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
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
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
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
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
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