Derek Molloy

Raspberry Pi® a fondo para desarrolladores


Скачать книгу

dwc_otg.lpm_enable=0 console=ttyS0,115200

      root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

      [ 0.000000] Memory: 874456K/901120K available (6024K kernel code, 534K

      rwdata, 1660K rodata, 448K init, 757K bss, 18472K reserved, 8192K cma-

      reserved)

      [ 0.000000] Virtual kernel memory layout:

       vector : 0xffff0000 - 0xffff1000 ( 4 kB)

       fixmap : 0xffc00000 - 0xfff00000 (3072 kB)

       vmalloc : 0xb7800000 - 0xff000000 (1144 MB)

       lowmem : 0x80000000 - 0xb7000000 ( 880 MB)

       modules : 0x7f000000 - 0x80000000 ( 16 MB)

       .text : 0x80008000 - 0x807895a0 (7686 kB)

       .init : 0x8078a000 - 0x807fa000 ( 448 kB)

       .data : 0x807fa000 - 0x8087fac0 ( 535 kB)

       .bss : 0x80882000 - 0x8093f79c ( 758 kB)

      ...

      [ 0.052103] Brought up 4 CPUs

      [ 0.052201] SMP: Total of 4 processors activated (153.60 BogoMIPS).

      [ 0.052231] CPU: All CPU(s) started in HYP mode. ...

      [ 1.467927] console [ttyS0] enabled

      ...

      [ 3.307558] systemd[1]: Detected architecture 'arm'.

      [ 3.321650] smsc95xx 1-1.1:1.0 eth0: register 'smsc95xx' at

      usb-3f980000.usb-1.1, smsc95xx USB 2.0 Ethernet, b8:27:eb:ff:db:2c

      [ 3.488061] NET: Registered protocol family 10

      [ 3.498204] systemd[1]: Inserted module 'ipv6'

      [ 3.510056] systemd[1]: Set hostname to <erpi> ...

      [ 5.450070] spi spi0.0: setting up native-CS0 as GPIO 8

      [ 5.450453] spi spi0.1: setting up native-CS1 as GPIO 7 ...

      ...

      Raspbian GNU/Linux 8 erpi ttyS0

      erpi login:

      Obtenemos la misma información si escribimos dmesg|more en una ventana de terminal. No es difícil ver cómo se configura el estado inicial del hardware, pero la mayoría de las entradas se antojan enigmáticas por el momento. Hay algunos puntos importantes que observar, como se pueden ver destacados en la salida anterior:

      ❏El núcleo de Linux se descomprime en memoria y, luego, se inicia. El ARMv7 del RPi 2/3 (kernel7.img) y el ARMv6 del RPi/RPi B+ (kernel.img) utilizan una versión ligeramente diferente del núcleo.

      ❏Se identifica la versión del núcleo de Linux, por ejemplo 4.1.18-v7+.

      ❏El modelo de la máquina se identifica de manera que se pueda cargar el árbol de código binario correcto.

      ❏La dirección de red MAC (Medium Access Control, control de acceso al medio (físico)), una dirección hardware única que identifica el dispositivo en la red a nivel físico) se pasa como un argumento del núcleo en la línea de comandos. La dirección MAC se establece automáticamente en el RPi mediante los tres últimos bytes del número de serie de la CPU, que se fija durante la fabricación. Ejecute cat /proc/cpuinfo para mostrar el número de serie de la placa. En este caso, el número es 00000000bbffdb2c, donde ffdb2c sirve para facilitar un número de dirección MAC único.

      ❏El usuario puede configurar algunos de los argumentos del núcleo restantes editando el archivo cmdline.txt, por ejemplo ejecutando sudo nano cmdline.txt del siguiente modo:

      pi@erpi /boot $ more cmdline.txt

      dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2

      rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

      ❏Se muestra el formato de la memoria virtual del núcleo. La entrada de los módulos es particularmente importante y se utilizará en el capítulo 8.

      El principal archivo de configuración del RPi es /boot/config.txt. Los cambios que introducimos mediante la herramienta raspi-config se reflejan en este archivo. Es posible editarlo ejecutando sudo nano /boot/config.txt para habilitar y deshabilitar el bus hardware, elevar la frecuencia del procesador, etc.

      pi@erpi /boot $ more config.txt

      # For more options and information see

      # http://www.raspberrypi.org/documentation/configuration/config-txt.md ...

      # Uncomment some or all of these to enable the optional hardware interfaces

      dtparam=i2c_arm=on

      #dtparam=i2s=on

      dtparam=spi=on

      ...

      # Additional overlays and parameters are documented /boot/overlays/README

      El gestor de arranque del RPi utiliza un archivo de configuración para la tarjeta llamado device tree o árbol de dispositivos (también llamado device tree binary, árbol de dispositivos binario) que contiene la información específica requerida por el núcleo para arrancar el RPi. Este archivo contiene toda la información necesaria para describir el tamaño de la memoria, la velocidad del reloj, los dispositivos de la placa, etc. Este árbol de dispositivos binario o DTB, donde "binario" hace aquí referencia al archivo compilado, se crea a partir del árbol de dispositivos fuente o DTS (Device Tree Source), que es, obviamente, el archivo de código fuente a partir del que se obtiene dicho binario compilando con el DTC (Device Tree Compiler). Este tema se trata en profundidad en el capítulo 8. El directorio /boot contiene los binarios del árbol de dispositivos para los distintos modelos de RPi:

      pi@erpi /boot $ ls -l *.dtb

      -rwxr-xr-x 1 root root 10841 Feb 25 23:22 bcm2708-rpi-b.dtb

      -rwxr-xr-x 1 root root 11120 Feb 25 23:22 bcm2708-rpi-b-plus.dtb

      -rwxr-xr-x 1 root root 10871 Feb 25 23:22 bcm2708-rpi-cm.dtb

      -rwxr-xr-x 1 root root 12108 Feb 25 23:22 bcm2709-rpi-2-b.dtb

      -rwxr-xr-x 1 root root 12575 Feb 25 23:22 bcm2710-rpi-3-b.dtb

      El código fuente de estos DTB se encuentra disponible en formato DTS. Los archivos DTS de cada modelo de RPi presentan una sintaxis similar al extracto siguiente, que detalla el hardware de los pines de los LED incorporados a la placa y de uno de los dos buses I2C del RPi 2:

      &i2c1 {

      pinctrl-names = "default";

      pinctrl-0 = <&i2c1_pins>;

      clock-frequency = <100000>;

      };

      &leds {

      act_led: act {

      label = "led0";

      linux,default-trigger = "mmc0";

      gpios = <&gpio 47 0>;

      };

      pwr_led: pwr {

      label = "led1";

      linux,default-trigger = "input";

      gpios = <&gpio 35 0>;

      };

      };

      El código fuente completo del archivo DTS para el RPi 2 (bcm2709-rpi-2-b.dts) está disponible en: tiny.cc/erpi302. Se pueden añadir al RPi archivos binarios del árbol de dispositivos adicionales, como sensores, placas HAT y pantallas LCD:

      pi@erpi /boot/overlays $ ls

      ads7846-overlay.dtb i2s-mmap-overlay.dtb pps-gpio-overlay.dtb ...

      hifiberry-amp-overlay.dtb