ECB-BF532/how to hello
Contents |
Hello World!
En esta sección encontrará como compilar, descargar y ejecutar una aplicación simple como el clásico "Hello World".
Código Fuente
Primero se debe crear el "hello.c" con el siguiente código:
#include <stdio.h>int main() {
printf("Hello World, Welcome to Blackfin uClinux!\n");
return 0;
}
Compiladores
El set de herramientas (toolchain) del compilardor GCC para Blackfin viene en tres categorías:
- bfin-elf-*
- bfin-linux-uclibc-* &
- bfin-uclinux-*
Los compiladores bfin-uclinux-gcc y bfin-linux-uclibc-gcc son utilizados para compilar programas que se ejecutan con el sistema operativo Linux. Estas herramientas enlazan automáticamente la aplicación con las librerías de entorno de Linux, lo que permite que la aplicación haga llamadas e interrupciones dentro de Linux cuando lo requiera, en este caso, presentar una cadena de carácteres en consola.
El compilador bfin-elf-gcc es utilizado para compilar el kernel y las aplicaciones del tipo standalone (sin S.O), por lo cual incluye otra serie de librerías.
Primero es necesario asegurarse que el compilador bfin-uclinux-gcc ha sido correctamente direccionado en el path.
xxxx@linux:~> bfin-uclinux-gcc --version
bfin-uclinux-gcc (ADI-2010R1-RC4) 4.3.5
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Si el compilador No está apropiadamente en el path, se muestra el siguiente mensaje:
xxxx@linux:~> bfin-uclinux-gcc --version
bash:bfin-uclinux-gcc: command not found
En ese caso se debe modificar el PATH, para más información Instalar el Toolchain de Blackfin
Compilar como archivo FLAT
xxxx@linux:~> bfin-uclinux-gcc -Wl,-elf2flt hello.c -o hello
Al ejecutar este comando la salida que se obtiene son 2 archivos:
- hello
- hello.gdb
xxxx@linux:~> file hello
hello: BFLT executable - version 4 ram
xxxx@linux:~> file hello.gdb
hello.gdb: ELF 32-bit LSB executable, Analog Devices Blackfin, version 1 (SYSV), statically linked, not stripped
Compilar como archivo FDPIC
En este caso se utiliza el compilador: bfin-linux-uclibc-gcc.
xxxx@linux:~> bfin-linux-uclibc-gcc hello.c -o hello
Después de ejecutarlo se obtiene el ejecutable "hello"
xxxx@linux:~> ls -l hello*
-rwxr-xr-x 1 xxxx users 10688 2009-04-30 11:17 hello
-rw-r--r-- 1 xxxx users 87 2009-04-30 11:15 hello.c
Al compilar el código como programa FDPIC el ejecutable que se obtiene como resultado posee información para la depuración, con lo cual aumenta el tamaño, la cual no es necesaria para ejecutar esta aplicación por lo que a menudo se utilizan los programas del tipo FLAT ya que genera tanto el ejecutable "limpio" como el ejecutable con la información para el debugging
Cargar el Programa en ECB-BF532
Hay 2 opciones para lograr correr el programa en el Blackfin:
Incluir el hello en la imagen de uClinux
Este método permite guardar el programa dentro de la imagen que se genera de uClinux para luego correrlo de forma "nativa" dentro del sistema.
En el host se debe hacer:
xxxx@linux:~> cp /home/user/hello blackfin-linux-dist/romfs/bin/hello
xxxx@linux:~blackfin-linux-dist$ make image
Con esto se reconstruyen los archivos: /images/linux y /images/uImage.
Cargar el programa por Puerto Serial
En este caso se utiliza el puerto serial y el protocolo "z-modem", por lo cual en los opciones de creación del kernel se debe habilitar el programa "lrz" que permite la recepción por z-modem. Este protocolo es muy útil para transferir archivos desde el PC hacia la tarjeta los cuales se guardaran en el directorio "/"
root:/> lrzlrz waiting to receive.**B0100000023be50
En este momento se presiona CTRL+S y se selecciona "z-modem" para luego ir al navegador de archivos y seleccionar el/los archivo que se desea transferir.
Después de que el ejecutable "hello" ha sido transferido a la board se deben modificar los permisos que tiene asignados:
root:/> chmod 777 hello
Note que en caso de que la aplicación es incorporada en la imagen de uClinux No es necesario modificar estos permisos.
Ejecutar la Aplicación
Si la aplicación ha sido incluida dentro del kernel:
root:/> helloHello World, Welcome to Blackfin uClinux!
Si la aplicación ha sido cargada a la tarjeta utilizando z-modem:
root:/> ./hello
Hello World, Welcome to Blackfin uClinux!