\section{Raspberry Pi}

\subsection{Acerca de la Raspberry Pi}

\begin{figure}[!ht]
	\centering
	\includegraphics[width=0.5\textwidth]{img/RPi}
	\caption{Raspberry Pi Modelo B.}
	\label{fig:rpi}
\end{figure}

La Raspberry Pi es lo que se denomina \emph{SoC} o \emph{System on Chip}.
Es básicamente una GPU, CPU y memoria en un sólo chip.

Esta versión de la Raspberry Pi (Modelo B, rev. 2), cuenta con lo siguiente.

\begin{enumerate}
\item CPU ARM11 ARM1176JZF-S
\item GPU Broadcom VideoCore IV
\item RAM 512 Megabytes
\item Salida de audio (3.5mm jack).
\item Salida de video compuesto RCA.
\item Salida de video HDMI.
\item 2 Puertos USB 2.0
\item 1 Puerto 10/100Mb Ethernet.
\item 1 Secure Digital SD/MMC/SDIO card slot.
\item Pines de propósito general, UART.
\end{enumerate}

\subsection{Secuencia de Arranque}

La Raspberry Pi no inicia como una computadora convencional.
Es el procesador gráfico (GPU) quién inicia antes que el procesador ARM (CPU).

Al principio la GPU se encuentra encendida y la CPU no.
La GPU ejecuta una serie de gestores de arranque (en etapas) hasta finalmente llegar al punto de entrada del kernel.

El primer gestor de arranque se encuentra en la memoria ROM del dispositivo.
Este se encarga de cargar el segundo gestor de arranque.
Para lograrlo debe acceder a la memoria externa del dispositivo y buscar el archivo ``bootcode.bin''.
Por último debe depositar el gestor en la cache asociativa L2.

El segundo gestor de arranque carga un tercer archivo, esta vez en memoria RAM, luego de haberla habilitado.
Este archivo, llamado ``loader.bin'', es el tercer gestor de arranque.

El tercer gestor de arranque lee y carga el firmware de la GPU, el cuál se encuentra en el archivo ``start.elf''.
Este último es un mini sistema operativo propietario que se encarga de levantar la imagen de nuestro kernel y realizar diferentes configuraciones.
Al terminar, se lanza la señal de reset del CPU e inicia la ejecución de nuestro kernel.
