
\section{Instructivo}

\subsection{Paso 1: Obtener el hardware}

Para este proyecto se utilizó una Raspberry Pi Modelo B, revisión 2.

Las tareas programadas interactúan con 3 LEDs y 1 speaker de PC.
Los mismos fueron añadidos a la Raspberry como se muestra en la figura ~\ref{fig:diagrama}.

\begin{figure}[!ht]
	\centering
	\includegraphics[width=0.7\textwidth]{img/diagrama}
	\caption{Raspberry Pi Modelo B, GPIO rev.2.}
	\label{fig:diagrama}
\end{figure}

\subsection{Paso 2: Preparar la tarjeta de memoria}

Antes que nada, no todas las memorias SD son compatibles con la Raspberry Pi.
Podemos ver un listado aquí \href{http://elinux.org/RPi_SD_cards}{http://elinux.org/RPi\_SD\_cards}.

Lo primero será particionar, formatear y preparar nuestra tarjeta de memoria.
Necesitaremos que la misma posea una partición W95 FAT32 (LBA) y dentro los siguientes archivos.

\begin{verbatim}
bootcode.bin   config.txt    fixup.dat              kernel.img     start.elf     cmdline.txt
fixup\_cd.dat  fixup\_x.dat  kernel\_emergency.img  start\_cd.elf  start\_x.elf
\end{verbatim}

Por lo general las distribuciones de Linux compatibles con Raspberry, como Raspbian o Archlinux para ARM, se instalan mediante el uso de imágenes preparadas que pueden ser copiadas mediante alguna herramienta como \emph{dd}.

A continuación veremos 2 métodos.
El primer método, utiliza una imágen de una distribución de Linux para generar la partición que necesitamos y obtener los archivos mencionados.
El segundo método, crea de forma manual la partición y utiliza los archivos enviados junto con el proyecto (\emph{sdcard.tar.gz}).

\subsubsection{Método 1}

Si decidimos utilizar una distribución como Archilinux ARM (método utilizado en el proyecto), debemos bajar la imagen actualizada de la página \href{http://archlinuxarm.org/platforms/armv6/raspberry-pi}{http://archlinuxarm.org/platforms/armv6/raspberry-pi}.
Con la ayuda de alguna herramienta como \emph{dd} debemos copiar la imagen descargada en la unidad de memoria.

\begin{verbatim}
[ignacio@ignacio-Desktop ~]$ sudo dd if=archlinux.img of=/dev/sdf bs=1M

\end{verbatim}

Una vez finalizada la copia, debemos montar la partición FAT32 etiquetada \emph{boot} en nuestro sistema de archivos.

\begin{verbatim}
Disk /dev/sdf: 1,9 GiB, 1990197248 bytes, 3887104 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00047c7a

Disposit. Inicio Start     Final Blocks  Id System
/dev/sdf1         8192    122879  57344   c W95 FAT32 (LBA)
\end{verbatim}

Dentro de la misma, como mínimo, deben existir los siguientes archivos mencionados.


Cuando construyamos la imágen del kernel de sistema, debemos de reemplazar el archivo \emph{kernel.img} listado arriba por el nuestro.

\subsubsection{Método 2}

Para hacerlo utilizando el segundo método debemos insertar la tarjeta SD en la unidad de memoria e identificarle.
Utilizaremos alguna herramienta de particionado para generar 1 sóla partición W95 FAT32 (LBA), y darle formato.
A continuación se muestra un ejemplo utilizando el comando \emph{fdisk} en Linux.

\begin{verbatim}
[ignacio@ignacio-Desktop ~]$ sudo fdisk /dev/sdf

Welcome to fdisk (util-linux 2.24.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Orden (m para obtener ayuda): o
Created a new DOS disklabel with disk identifier 0xe0fff63f.

Orden (m para obtener ayuda): n

Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Número de partición (1-4, default 1): 1
First sector (2048-3887103, default 2048): 2048
Last sector, +sectors or +size{K,M,G,T,P} (2048-3887103, default 3887103): 3887103

Created a new partition 1 of type 'Linux' and of size 1,9 GiB.

Orden (m para obtener ayuda): t
Selected partition 1
Hex code (type L to list all codes): c
If you have created or modified any DOS 6.x partitions,
 please see the fdisk documentation for additional information.
Changed type of partition 'Linux' to 'W95 FAT32 (LBA)'.

Orden (m para obtener ayuda): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

\end{verbatim}

Para darle el formato se utilizó el siguiente comando.

\begin{verbatim}
[ignacio@ignacio-Desktop ~]$ sudo mkfs.vfat -F32 -n boot /dev/sdf1
mkfs.fat 3.0.26 (2014-03-07)
mkfs.fat: warning - lowercase labels might not work properly with DOS or Windows

\end{verbatim}

Finalmente debemos montar la partición y copiar el comprimido \emph{sdcard.tar.gz} (entregado aparte junto con los fuentes) y descomprimirlo.

\begin{verbatim}
[ignacio@ignacio-Desktop ~]$ sudo mount -t vfat /dev/sdf1 /mnt/flash/
[ignacio@ignacio-Desktop ~]$ cd /mnt/flash/
[ignacio@ignacio-Desktop flash]$ sudo cp ~/sdcard.tar.gz ./
[ignacio@ignacio-Desktop flash]$ sudo tar xzf sdcard.tar.gz 
[ignacio@ignacio-Desktop flash]$ ls -al
total 28948
drwxr-xr-x 2 root root     4096 abr 11 09:50 .
drwxr-xr-x 3 root root     4096 abr 11 09:49 ..
-rwxr-xr-x 1 root root    17816 nov 17 03:00 bootcode.bin
-rwxr-xr-x 1 root root      142 nov 17 17:36 cmdline.txt
-rwxr-xr-x 1 root root     1234 mar  4 19:21 config.txt
-rwxr-xr-x 1 root root     2037 nov 17 03:00 fixup_cd.dat
-rwxr-xr-x 1 root root     5746 nov 17 03:00 fixup.dat
-rwxr-xr-x 1 root root     8779 nov 17 03:00 fixup_x.dat
-rwxr-xr-x 1 root root      137 jul 26  2013 issue.txt
-rwxr-xr-x 1 root root  9614632 nov 17 03:00 kernel_emergency.img
-rwxr-xr-x 1 root root   115028 abr 10 15:02 kernel.img
-rwxr-xr-x 1 root root 13389195 abr 11 09:50 sdcard.tar.gz
-rwxr-xr-x 1 root root   471256 nov 17 03:00 start_cd.elf
-rwxr-xr-x 1 root root  2497684 nov 17 03:00 start.elf
-rwxr-xr-x 1 root root  3476100 nov 17 03:00 start_x.elf

\end{verbatim}

\subsection{Paso 3: Construir el proyecto}

Para construir el proyecto debemos descomprimir los fuentes.
Se creara una carpeta titulada \emph{ARM} con el siguiente contenido.

\begin{verbatim}
[ignacio@ignacio-Desktop ~]$ tar xzf ARM.tar.gz 
[ignacio@ignacio-Desktop ~]$ ls ARM -al
total 15584
drwxr-xr-x  4 ignacio wheel     4096 abr 11 08:19 .
drwx------ 49 ignacio wheel     4096 abr 11 08:29 ..
-rw-r--r--  1 ignacio wheel     1185 abr 11 08:15 Makefile
-rwxr-xr-x  1 ignacio wheel 15937393 abr 11 08:23 Serial-RPi
drwxr-xr-x  2 ignacio wheel     4096 abr 11 08:14 src
drwxr-xr-x  3 ignacio wheel     4096 abr 11 08:17 tasks

\end{verbatim}

Dentro del directorio \emph{ARM} debemos descomprimir el toolchain de GNU para ARM (Sourcery CodeBench Lite 2013.05-23).

El mismo puede ser descargado desde \\
~\href{https://docs.google.com/file/d/0B8l8oXIW96f8bmNLOXptYXQ1bFk/edit}{https://docs.google.com/file/d/0B8l8oXIW96f8bmNLOXptYXQ1bFk/edit}.

Ya que el toolchain fue concebido para arquitecturas de 32-bits, puede que necesitemos instalar librerías adicionales. En el caso de Archilinux (x86\_64), fue necesaria la instalación de glibc para 32-bits (paquete lib32-glibc).

Una vez descomprimida la carpeta, el directorio debe verse de la siguiente manera.

\begin{verbatim}
[ignacio@ignacio-Desktop ARM]$ ls -al
total 15588
drwxr-xr-x  5 ignacio wheel     4096 abr 11 08:49 .
drwx------ 49 ignacio wheel     4096 abr 11 08:29 ..
drwxr-xr-x  8 ignacio wheel     4096 ene 23 13:43 arm-none-eabi
-rw-r--r--  1 ignacio wheel     1185 abr 11 08:15 Makefile
-rwxr-xr-x  1 ignacio wheel 15937393 abr 11 08:23 Serial-RPi
drwxr-xr-x  2 ignacio wheel     4096 abr 11 08:14 src
drwxr-xr-x  3 ignacio wheel     4096 abr 11 08:17 tasks

\end{verbatim}

A continuación sólo debemos ejecutar el comando \emph{make}.
Una vez terminada la construcción de la imagen del kernel, debemos realizar lo anteriormente mencionado en el paso 2, copiar el archivo \emph{bin/kernel.img} a la partición \emph{boot} reemplazando el existente (puede ser útil hacer una copia de seguridad primero del archivo kernel.img).

\subsection{Paso 4: Encender la Raspberry Pi}

Una vez concluídos todos los pasos anteriores, sólo resta colocar la tarjeta de memoria en la Raspberry Pi.

Si se dispone de un cable USB a TTL-RS232, podemos conectar el puerto mini UART de la Raspberry Pi al PC.
En los fuentes se incluye un programa llamado \emph{Serial-RPi}, que nos permite leer del puerto serial los mensajes enviados por el sistema y las aplicaciones.
Debemos seleccionar el dispositivo y hacer click en \emph{connect}, antes de encender la Raspberry Pi y después de conectar el cable del puerto.

\begin{figure}[!ht]
	\centering
	\includegraphics[width=0.75\textwidth]{img/serial}
	\caption{Serial-RPi}
	\label{fig:rpi}
\end{figure}
