Multicores assimétricos no desenvolvimento de sistemas embarcados – Parte 1

Multicore Communication library Multicores assimétricos prática Firmware M4
Este post faz parte da série Multicores assimétricos

Introdução

Com o objetivo de auxiliar no desenvolvimento de produtos que façam uso de multicores assimétricos, baseado no computador em módulo Colibri VF61 (Freescale® Vybrid), esta série de artigos apresenta diversas instruções para guiar o leitor a construir uma imagem Linux para esse CoM, apresentando, no seu final, exemplos práticos.

Multicores Assimétricos: VF6xx Computer-on-Module
Figura 1 – Computador em módulo Colibri VF61 (Freescale Vybrid)

Linux Embarcado com multicores assimétricos

Nossos computadores em módulo possuem imagens Linux embarcado para suportar o desenvolvimento dos nossos clientes. Você pode encontrar todas estas informações, bem como nosso repositório de software, aqui.

Imagens pré-compiladas para os módulos Toradex

A primeira opção para instalar um Linux em um computador em módulo Toradex é realizar o download de uma imagem pré-compilada. Tais imagens contêm uma série de programas de demonstração e para garantir a melhor experiência para os clientes, portanto, trata-se de uma imagem bem completa. Portanto, dependendo da sua aplicação, existem diversos programas desnecessários. O ideal é que no desenvolvimento de seu produto você compile uma imagem específica com os componentes que você irá utilizar. As imagens de demonstração podem ser encontradas neste site.

Compilando sua própria imagem

Para gerar uma imagem Linux customizada para os módulos da Toradex, recomendados buscar as informações mais recentes no site de desenvolvimento da Toradex.

Atualmente as imagens são baseadas no OpenEmbedded, portanto, instale os softwares necessários:

sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath libsdl1.2-dev xterm

Conforme o site de desenvolvimento da Toradex, é necessário instalar alguns outros programas:

sudo apt-get install curl gcc-multilib ia32-libs lib32z1-dev liblzo2-dev:i386 uuid-dev:i386

Para facilitar o download dos “metas” necessários, utilizamos uma ferramenta chamada “repo”. Ela é responsável por sincronizar cada repositório com uma TAG específica possibilitando, assim, realizar a compilação com os repositórios corretos. Execute em seu host de desenvolvimento:

$ mkdir ~/bin
$ export PATH=~/bin:$PATH
$ curl https://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

Com o “repo” instalado, crie a pasta onde será gerado o seu Build e comece o processo de sincronia:

$ mkdir oe-core
$ cd oe-core
$ repo init -u https://git.toradex.com/toradex-bsp-platform.git -b LinuxImageV2.3
$ repo sync

Ao terminar o processo, é hora de gerar o Linux. O primeiro passo é executar o script para exportar todas as variáveis de ambiente:

$ . export

Repare que após executar o script você será encaminhado para pasta build. Basicamente a estrutura de pastas geradas será:

Oe-core/
+-- build
¦ +-- conf
¦ +-- downloads
¦ +-- out-eglibc
¦ +-- sstate-cache
+-- stuff
+-- meta-angstrom
+-- meta-browser
(... other layers)
+-- openembedded-core

Altere o arquivo build/conf/local.conf para selecionar sua “machine”. No nosso caso, “colibri-vf”:

MACHINE ?= "colibri-vf"

Agora é a hora de compilar sua imagem. O processo de build deverá fazer o download de todos os códigos fontes, aplicar patch e compilar. Todo esse processo pode levar horas.

$ bitbake -k console-trdx-image

No final da compilação, as imagens finais serão encontradas no diretório:

$ ls -l out-eglibc/deploy/images/colibri-vf/

O arquivo utilizado para atualização completa do módulo é:

Colibri_VF_LinuxConsoleImageV2.3_20150225.tar.bz2

Gerando o Cartão SD

Para instalar a imagem no módulo é necessário descompactar o arquivo gerado no tópico anterior com permissão “sudo”. Dentro da pasta extraída temos o script “update.sh”. Esse script irá gerar os arquivos no formato certo e irá copiá-los para um cartão SD FAT.

Entre no diretório extraído:

$ cd Colibri_VF_LinuxConsoleImageV2.3

Execute o script update.sh com o caminho onde foi montado seu cartão SD:

$ sudo ./update.sh -o /run/media/raul/data

Instalando na placa

Ligue a placa, utilizando o terminal serial, pressione alguma tecla durante os primeiros 3 segundos de boot para parar o UBoot.

Com acesso ao terminal de comandos do uBoot, coloque o cartão SD na placa e execute os seguintes comandos. Em seguida aguarde a atualização que ao finalizar reiniciará a placa.

# run setupdate
# run update

Compilando e Instalando a “ToolChain”

Para utilizar a ToolChain, existem dois métodos: gerar sua própria “toolchain” ou instalar o arquivo de uma toolchain já gerada para sua imagem de Linux.

Para gerar sua própria “toolchain”, execute o comando na pasta build:

$ bitbake meta-toolchain-qte

Ao terminar, o arquivo responsável por instalar a “toolchain” será encontrado em:

$ cd out-eglibc/deploy/sdk/

Execute o Script:

$ ./angstrom-eglibc-x86_64-armv7at2hf-vfp-neon-toolchain-qte-v2014.06.sh

Aceite o path pedido e aguarde finalizar.

Enter target directory for SDK (default: /usr/local/oecore-x86_64):
You are about to install the SDK to "/usr/local/oecore-x86_64". Procees[Y/n]? Y

A “toolchain” estará no seguinte diretório:

$ cd /usr/local/oecore-x86_64/
$ find . -name "arm-angstrom-linux-gnueabi-*"
./sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-gcc-nm
./sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-nm
./sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-gcc-ranlib
./sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-g++
./sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-ar
./sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-gcc
./sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-ranlib
./sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-dwp
./sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-addr2line
./sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-as
./sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-readelf
./sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-size
./sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-objdump
./sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-strings
./sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-gcc-ar
./sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-c++filt
./sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-cpp
./sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-gprof
./sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-elfedit
./sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-gdb
./sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-gcov
./sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-strip
./sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-ld
./sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-objcopy
./sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-ld.gold
./sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi-ld.bfd

Anote esse caminho, ele será usado diversas vezes para configurar o Eclipse:

/usr/local/oecore-x86_64/sysroots/x86_64-angstromsdk-linux/usr/bin/arm-angstrom-linux-gnueabi/

Multicores assimétricos

Multicores assimétricos no desenvolvimento de sistemas embarcados – Parte 2: Eclipse
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
0 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Home » Software » Sistemas Operacionais » Multicores assimétricos no desenvolvimento de sistemas embarcados – Parte 1

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: