Samba:Start-up:Condorboard-Stable

=SAM-BA = SAM-Boot Assitant es una tecnologia implementada en algunos microcontroladores ATMEL para la secuencia de arranque del dispositivo. Esta secuencia esta predefinida por defecto y se puede encontrar en la hoja de datos de cada procesador. En General se puden identificar los siguientes pasos:


 * Verificación del estado físico del cristal (Existe o no).
 * Verificación de archivo de arranque en Flash interna.
 * Verificación de archivo de arranque en Flash externa.
 * DataFlash: Se seleccionan uno a uno los CS (Chip-Select)existentes para este tipo de dispositivo en búsqueda del archivo de arranque.
 * NandFlash: Se busca en la primer dirección de la NandFlash el archivo de arranque.

La secuencia mencionada es llevada acabo hasta encontrar un sector de arranque valido. Cuando esto sucede el procesador descarga el segmento de memoria correspondiente en la RAM. Luego se puede empezar a ejecutar el programa.



Bootstrap
Los sistemas embebidos a diferencia de los computadores no disponen de un set de chips asociados al procesador para la gestión de arranque(BIOS). Por este motivo es necesario implementar rutinas de bajo nivel que le permitan al dispositivo principal (CPU) inicializar elementos de hardware para el arranque del sistema embebido. Dentro de estos elementos se encuentran el modulo de depuración, el manejador de memoria externa (MMU), controladores de energía y señales de reloj.

Existen diferentes métodos para programar el programa principal de esté tipo de procesadores. Comúnmente la programación puede ser realizada a través de las siguientes interfaces:
 * JTAG cumpliendo con las normas del estándar |IEEE 1149.1
 * SPI programación por Serial Peripheral Interface Bus, más información acerca del protocolo en SPI
 * RS232 programación por protocolo serial, más información acerca del protocolo RS232
 * USB a través del bootloader incorporado dentro del procesador, este bootloader es llamado SAM-BA.

UBOOT
Das U-Boot (Universal Bootloader) es un cargador de arranque de codigo abierto (open source) usado en sistemas embebidos. Esta disponible para diversas arquitecturas incluyendo ARM, PPC, MIPS, AVR32, x86, 68k, Nios, and MicroBlaze.

Sus principales caracteristicas son:


 * Free Software: Archivos fuentes completos bajo licencia GPL
 * Popularidad: Usado como bootloader por defecto por parte de varios vendedores de plataformas.
 * Facil de depurar: Consola Serial disponible de forma temprana.
 * Facil de portar a nuevas arquitecturas, nuevos procesadores y nuevas tarjetas de desarrollo
 * Varias arquitecturas soportadas: PPC, ARM, MIPS, x86, m68k, NIOS, Microblaze
 * Bajo Footprint
 * Confiable

"Though there are quite a few other bootloaders, 'Das U-Boot,' the universal bootloader, is arguably the richest, most flexible, and most actively developed open source bootloader available." Building Embedded Linux Systems, by Karim Yaghmour

Linux Kernel
El Kernel es el componente software básico y fundamental de todos los sistemas Linux, tanto aquellos multiproposito, como embebidos. La labor principal de este es la administración del hardware del sistema sobre el que se ejecuta. Es el planificador (scheduler) para el uso de los recursos harware disponibles; proporcionando o restringiendo el acceso de los programas que los solicitan.

Dentro de los recursos administrados por el Kernel se encuentran:

El acceso a los perifericos por parte de las applicaciones se realiza a traves del kernel, sin ninguna comunicacion directo por parte de las aplicaciones a los dispositivos necesitados.
 * Tiempo de uso del procesador.
 * Uso de memoria RAM disponible.
 * Acceso (indirecto) a perifericos, a traves del kernel.

Las capacidades especificas que puede tener un kernel pueden ser configuradas en el momento de su construcción(compilación). Entre las posibles opciones de configración estan:


 * Soporte para trabajo en red (networking).
 * Soporte para perifericos especificos de la tarjeta de desarrollo sobre la cual se esta ejecutando. (Ethernet, USB, uSD, Cammeras, etc

Tambien es posible adicionar modulos en tiempo de ejecución, cuando sea necesaria su utilización.

Con respecto a los sistemas multiproposito (PC, Servers), el kernel destinado para los sistemas embebidos debe limitarse a la administracion de los perifericos disponibles. Este tipo de configuraciones "ligeras" son mas faciles de depurar y requieren un footprint (espacio en memoria) reducido; lo cual es propicio cuando el sistema embebido es limitado en capacidad de almacenamiento.