Compilando uma Distribuição Linux Openembedded

Openembedded

Nos últimos meses, diversos artigos sobre o computador em módulo Colibri T20 foram postados no Embarcados. O Colibri T20 é parte integrante da família de computadores pino compatíveis da Toradex que também conta com outros módulos como o Colibri iMX6Colibri Vybrid VF50, VF61 e diversos módulos baseados na linha PXA Intel Marvel. Veja aqui um comparativo entre os diversos módulos da família Colibri.

No artigo Fast Time to Maket com Computadores em Módulo, Guilherme Fernandes explica as vantagens e as desvantagens do uso de computadores em módulo assim como as características dos produtos comercializados pela Toradex. O produto Colibri T20 apareceu também em outros dois artigos: Desenvolvendo Sistemas Embarcados com Windows Embedded CompactCOM Toradex Colibri T20 e Carrier Board Iris artigo no qual Thiago Lima apresenta o conjunto de módulo e motherboard comercializados pela Toradex.

Acompanhado a linha de artigos envolvendo esse módulo, o tutorial abaixo mostrará os passos necessários para preparar um Build System para o CoM Colibri T20. Com o seu próprio Build System é possível criar personalizações em sua distribuição e como resultado obter sua própria imagem.

A Toradex disponibiliza através do meta-toradex toda a personalização do Linux integrada com o OpenEmbedded. Atualmente, o OpenEmbedded em conjunto com o Yocto tem se tornado mais popular entre os usuários, motivo pelo qual tem crescido o conteúdo informativo sobre ele. Portanto, modificar, adicionar e até mesmo criar seus próprios pacotes se torna mais fácil.

A Toradex fornece imagens Linux pré-compiladas, uma lista das características de nossa imagem Linux pode ser encontrada aqui. A Toradex também oferece uma imagem de teste do Android para nosso Colibri T20. Nos casos em que a utilização da imagem pré-compilada seja suficiente, o usuário as irá encontrar em: https://developer.toradex.com/files/toradex-dev/uploads/media/Colibri/Linux/Images/

Hardware utilizado

Para este tutorial foi utilizado um módulo Colibri T20 em conjunto com placa de suporte Iris Carrier Board (Figura 1). Um monitor DVI foi usado para interface gráfica com o usuário.

FIGURA_1

Os cabos foram conectados de conforme a Figura 2. Basicamente foi conectado o cabo serial no conector X13, teclado e mouse USB, monitor DVI e alimentação de 6-27V DC.

A Figura 3 mostra como ficou o setup após a conexão dos cabos.

FIGURA_3 (1)

Para agilizar o desenvolvimento, a Toradex disponibiliza uma página com os passo a passo para configurar seu computador e acessar as principais funções do módulo sem a necessidade de passar pelo processo de compilar sua própria imagem.

Preparando ambiente Host

Todo o processo de configuração, compilação e geração da imagem foi realizado em uma máquina virtual “Ubuntu 12.04 – 64-Bits” criada apenas para realização desse tutorial.

Os pacotes exigidos pelo OpenEmbedded e pelo meta-toradex devem ser instalados com o comando abaixo.

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

Versões e Branches

Atualmente temos duas versões de build system: V1.X – baseada no OpenEmbedded (Classic) e V2.X – baseada no OpenEmbedded (Core). Esse tutorial utilizará a versão V2.1 no branch dylan. Caso o usuário necessite do branch dora, é preciso usar a versão V2.2. Porém, essa versão só foi testada com o módulo Apalis iMx6.

Ao compilar a versão V2.1 conforme esse tutorial, a imagem gerada deve ser equivalente as imagens pré-compiladas citadas no início desse artigo. Um vez que não será adicionado ou modificado o Build System padrão.

Sincronizando repositório

A partir da versão V2.1, utiliza-se a ferramenta “repo” para gerenciar diferentes repositórios e versões. Isso se fez necessário uma vez que o OpenEmbedded começou a exigir diversos repositórios.

Instalando a ferramenta “repo”

mkdir ~/bin
export PATH=~/bin:$PATH
curlhttps://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
mkdir oe-core
cd oe-core
repo init -u https://git.toradex.com/toradex-bsp-platform.git -b LinuxImageV2.1

Antes de iniciar a sincronização, é necessário atualizar duas URLs no arquivo manifest.xml.Criando o diretório onde será realizado o download dos repositórios e a configuração da sua distribuição.

vi .repo/manifest.xml

Altere a URL correspondente ao OpenEmbedded e ao Linaro conforme segue:

 <remote fetch="git://git.openembedded.org" name="oe"/>
 <remote fetch="https://github.com" name="gith"/>
 <remote fetch="https://git.yoctoproject.org" name="yocto"/>
 <remote fetch="git://git.linaro.org/openembedded" name="linaro"/>
 <remote fetch="https://git.toradex.com" name="trdx"/>
 repo sync

Em seguida, execute a sincronização com o repositório.

Configurando a compilação

Após finalizada a sincronização, execute o arquivo “export”. Isso irá configurar as variáveis de ambiente. Na primeira execução desse script será criada automaticamente a pasta build com os arquivos de configuração.

. export

Após executar o export, o shell será direcionado automaticamente para o diretório  “oe-core/build”.

Sendo assim, modifique o arquivo “local.conf” para configuração seu build.

vim conf/local.conf

Altere o dispositivo modificando a variável MACHINE para colibri T20.

MACHINE ?= "colibri-t20"

As variáveis BB_NUMBER_THREADS e PARALLEL_MAKE configuram respectivamente quantas threads e processadores executarão em paralelo.

Por padrão, o arquivo local config configura o build para remover o diretório work. Isso significa que todo código fonte usado será removido ao final da compilação. Essa configuração é útil no caso de a máquina utilizada no processo ter pouco espaço em disco. Porém, caso seja preciso os códigos-fontes para a personalização de algum pacote, o ideal é comentar a linha abaixo:

#'INHERIT += "rm_work"'

Assim, todos os códigos – fontes serão destinados para a pasta “work”.

Executando a compilação

Agora com o “local.conf” configurado para o build do seu dispositivo é hora de compilar. Tenha em mente que isso pode demorar horas!

bitbake angstrom-lxde-image

Imagens Geradas

Ao terminar a compilação, as imagens estarão no diretório:

cd out-eglibc/deploy/images/colibri-t20/

Entre os arquivos gerados estão:  u-boot, root file system e kernel. Porém, o arquivo mais importante para a gravação é: Colibri_T20_LinuxImageV2.1_20140530.tar.bz2

Esse arquivo contém todos os arquivos necessários e o script de atualização.

-rw-r--r--. 1 raul raul 84734938 May 30 18:18 Colibri_T20_LinuxImage.rootfs.tar.bz2
drwxr-xr-x. 5 root root 4096 May 30 18:19 Colibri_T20_LinuxImageV2.1
-rw-r--r--. 1 raul raul 86511757 May 30 18:19 Colibri_T20_LinuxImageV2.1_20140530.tar.bz2
lrwxrwxrwx. 1 raul raul   37 May 30 18:19 LXDE-image-colibri-t20.tar.bz2 -> Colibri_T20_LinuxImage.rootfs.tar.bz2
-rw-rw-r--. 1 raul raul  3372643 May 30 16:26 modules--3.1.10+gitrf195d3bc9cfb38159f8a3a299222396e0005aa91-V2.1b3-colibri-t20-20140530123054.tgz
-rw-rw-r--. 1 raul raul  294 May 30 18:15 README_-_DO_NOT_DELETE_FILES_IN_THIS_DIRECTORY.txt
lrwxrwxrwx. 1 raul raul   73 May 30 17:54 u-boot.bin -> u-boot-colibri-t20-r7+gitrccd521c4681a5850bbec1feec140eeaec33936b0-r7.bin
lrwxrwxrwx. 1 raul raul   73 May 30 17:54 u-boot-colibri-t20.bin -> u-boot-colibri-t20-r7+gitrccd521c4681a5850bbec1feec140eeaec33936b0-r7.bin
-rwxr-xr-x. 1 raul raul   557060 May 30 17:54 u-boot-colibri-t20-r7+gitrccd521c4681a5850bbec1feec140eeaec33936b0-r7.bin
lrwxrwxrwx. 1 raul raul   79 May 30 17:54 u-boot-hsmmc.bin -> u-boot-hsmmc-colibri-t20-r7+gitrccd521c4681a5850bbec1feec140eeaec33936b0-r7.bin
lrwxrwxrwx. 1 raul raul   79 May 30 17:54 u-boot-hsmmc-colibri-t20.bin -> u-boot-hsmmc-colibri-t20-r7+gitrccd521c4681a5850bbec1feec140eeaec33936b0-r7.bin
-rwxr-xr-x. 1 raul raul   557964 May 30 17:54 u-boot-hsmmc-colibri-t20-r7+gitrccd521c4681a5850bbec1feec140eeaec33936b0-r7.bin
lrwxrwxrwx. 1 raul raul   97 May 30 16:26 uImage -> uImage--3.1.10+gitrf195d3bc9cfb38159f8a3a299222396e0005aa91-V2.1b3-colibri-t20-20140530123054.bin
-rw-r--r--. 1 raul raul  4438448 May 30 16:26 uImage--3.1.10+gitrf195d3bc9cfb38159f8a3a299222396e0005aa91-V2.1b3-colibri-t20-20140530123054.bin
lrwxrwxrwx. 1 raul raul   97 May 30 16:26 uImage-colibri-t20.bin -> uImage--3.1.10+gitrf195d3bc9cfb38159f8a3a299222396e0005aa91-V2.1b3-colibri-t20-20140530123054.bin 

Extraia o arquivo “Colibri_T20_LinuxImageV2.1_20140530.tar.bz2” com permissão de sudo.

sudo tar xjvf Colibri_T20_LinuxImageV2.1_20140530.tar.bz2
cd Colibri_T20_LinuxImageV2.1/

No diretório extraído, encontramos o script de atualização “update.sh”. Para executá-lo é necessário colocar a placa em recovery mode (modo de gravação).

Gravação da Imagem no Módulo

Primeiro conecte o cabo micro USB no conector X12 e no seu computador conforme a Figura 4. Caso esteja usando máquina virtual, lembre-se de adicionar a USB correspondente a VM.

FIGURA_4 (1)

Existem dois métodos de colocar a placa em modo de gravação.

O método mais fácil é por software. Para os casos nos quais as placas ja tenham Linux ou Windows instalados existem comandos de bootloader que colocam o módulo em modo de gravação.

Caso a placa esteja com Linux, execute o comando “enterrcm” no uboot.

 

U-Boot 2011.06-00002-gcb354a4 (Dec 27 2012 - 19:09:27)
...
Hit any key to stop autoboot:  0
Tegra2 # enterrcm
Entering RCM...

Para os casos em que o módulo esteja com Windows execute os seguintes comandos no bootloader.

reboot rcm

O segundo método, por Hardware, não precisa ter nenhum bootloader pré-gravado na placa. Para a placa Iris, basta ligar a placa curto-circuitando o pad 1 e 2 do Jumper JPI. Em seguida remova o curto.

Com a placa em modo de gravação e o cabo microSD devidamente conectado será possível localizar o device com o comando:

lsusb | grep -i nvidia
Bus 003 Device 009: ID 0955:7820 NVidia Corp. Tegra 2 AC100 developer mode

Agora com a placa pronta para gravação e o dispositivo já reconhecido, execute o script de update com parâmetro -h.

[raul@localhost Colibri_T20_LinuxImageV2.1]$ ./update.sh -h
Colibri T20 rootfs detected
-g : Forces generation of the rootfs image file, default is to reuse the one from the last run
-h : Prints this message
-r : T20: Selects RAM size (256 | 512)
-v : T20: Selects colibri version (V1_1 | V1_2)
-b : T20: Selects boot device (hsmmc/nand) (default: nand)
-c : Selects configblock partition only update
-d : Selects debug boot loader without flashing
-k : Selects kernel partition only update
-u : Selects boot loader partition only update

Example "./update.sh -r 512 -v V1_2" flashes everything on a Colibri T20 V1.2 with 512MB RAM
       "./update.sh" flashes everything on Colibri T30 or Apalis T30

Repare que todo módulo tem uma etiqueta de identificação. Nela é possível ver o quanto de RAM tem em seu módulo e também a versão do seu Hardware. Altere os parâmetros para o seu caso e execute a atualização.

./update.sh -r 512 -v V1_2

Aguarde até o final da gravação que terá o resultado abaixo.

done!

sending file: u-boot.bin
- 557060/557060 bytes sent
u-boot.bin sent successfully
sending file: uImage
/ 4438448/4438448 bytes sent
uImage sent successfully
sending file: USR.yaffs2
\ 341164032/341164032 bytes sent
USR.yaffs2 sent successfully

Boot do novo Linux

Reinicie o equipamento e terá o boot da sua imagem.

U-Boot 2011.06 (May 30 2014 - 17:53:24)
TEGRA2
DRAM:  512 MiB
NAND:  1024 MiB
MMC:   Tegra2 SD/MMC: 0
Board: Toradex Colibri T20
Net:   Net Initialization Skipped
No ethernet found.
Hit any key to stop autoboot:  0
Booting from NAND...
Loading from nand0, offset 0xc80000
  Image Name:   Linux-3.1.10
  Created:  2014-05-30  14:22:30 UTC
  Image Type:   ARM Linux Kernel Image (uncompressed)
  Data Size:4438384 Bytes = 4.2 MiB
  Load Address: 00008000
  Entry Point:  00008000
## Booting kernel from Legacy Image at 00408000 ...
  Image Name:   Linux-3.1.10
  Created:  2014-05-30  14:22:30 UTC
  Image Type:   ARM Linux Kernel Image (uncompressed)
  Data Size:4438384 Bytes = 4.2 MiB
  Load Address: 00008000
  Entry Point:  00008000
  Verifying Checksum ... OK
  Loading Kernel Image ... OK
OK

Starting kernel ...
[0.000000] Linux version 3.1.10 (raul@localhost.localdomain) (gcc version 4.7.4 20130903 (prerelease) (Linaro GCC 4.7-2013.09) ) #1 SMP PREEMPT Fri May 30 16:22:12 CEST 2014
[0.000000] CPU: ARMv7 Processor [411fc090] revision 0 (ARMv7), cr=10c5387d
[0.000000] CPU: VIPT nonaliasing data cache, VIPT aliasing instruction cache
[0.000000] Machine: Toradex Colibri T20
[0.000000] Ignoring unrecognised tag 0x54410008
[0.000000] Found fbmem: 00c00000@17400000
[0.000000] Found nvmem: 08000000@18000000
[0.000000] Tegra reserved memory:
[0.000000] LP0:                 00000000 - 00000000
[0.000000] Bootloader framebuffer:  17400000 - 17ffffff
[0.000000] Bootloader framebuffer2: 00000000 - 00000000
[0.000000] Framebuffer:         16700000 - 16ffffff
[0.000000] 2nd Framebuffer:     17000000 - 17ffffff
[0.000000] Carveout:            18000000 - 1fffffff
[0.000000] Vpr:                 00000000 - 00000000
[0.000000] Memory policy: ECC disabled, Data cache writealloc
[0.000000] Tegra SKU: 8 Rev: A04 CPU Process: 1 Core Process: 2 Speedo ID: 1
[0.000000] Tegra Revision: A04 prime SKU: 0x8 CPU Process: 1 Core Process: 2
…
…
…
[  OK  ] Started Getty on tty1.
    Starting Serial Getty on ttyS0...
[  OK  ] Started Serial Getty on ttyS0.
[  OK  ] Reached target L[   29.101983] tegradc tegradc.1: switching framebuffer to 640x480
[   29.102013] tegradc tegradc.1: using mode 640x480 pclk=25175000 href=1 vref=1
[   29.589088] wm97xx-ts 0-0:wm9712-codec: No IRQ specified
.---O---.                                       
|       |              .-.       o o    
|   |   |-----.-----.-----.| |   .----..-----.-----.
|       | | __  |  ---'| '--.|  .-'| |     |
|   |   |  |  | |---  ||  --'|  |  |  '  | | | |
'---'---'--'--'--.  |-----''----''--'  '-----'-'-'-'
               -'  |
           '---'
The Angstrom Distribution colibri-t20 ttyS0
Angstrom v2013.06 - Kernel 3.1.10
Colibri_T20_LinuxImageV2.1_20140530
colibri-t20 login: [   31.938505] tegradc tegradc.0: switching framebuffer to 640x480
[   31.938579] tegradc tegradc.0: Calculated sync href=0 vref=1
[   31.938616] tegradc tegradc.0: using mode 640x480 pclk=25175000 href=0 vref=1
[   32.218225] tegradc tegradc.1: switching framebuffer to 640x480
[   32.218268] tegradc tegradc.1: using mode 640x480 pclk=25175000 href=1 vref=1
[   32.408804] wm97xx-ts 0-0:wm9712-codec: No IRQ specified

Loge com usuario “root” e sem senha.

FIGURA_5 (1)

Agora temos o Build System completo. Para listar os comandos já instalados na sua imagem execute:

opkg list-installed

Comandos úteis usando bitbake

1.    O parâmentro “-k” configura o bitbake para continuar compilando os pacotes independentemente da ocorrência de algum erro.

bitbake -k angstrom-lxde-image

2.    Caso seja necessário consultar as variáveis de ambiente ou obter informações do Build System, use o comando abaixo.

bitbake -e virtual/kernel
bitbake -e virtual/kernel | grep ^WORKDIR

3.    Para listar todas as tasks existentes em uma receita:

bitbake -c listtasks virtual/kernel

4.    Listar todos os pacotes disponíveis em seu Build System:

bitbake -s
Recipe Name                                Latest Version     abiword                                             :2.8.6-r8                         
accel-ppp                                  :1.7.3+git-r1                         
acl                                        :2.2.51-r3                      
acl-native                                 :2.2.51-r3                         
acpid                                      :1.0.10-r0                         
adt-installer                              :0.1.8+svnr596-r11                      
alsa-lib                                   :1.0.26-r0                         
alsa-lib-native                            :1.0.26-r0                         
…
…
…            
zip-native                                 :3.0-r2                         
zlib                                       :1.2.7-r0                         
zlib-native                                :1.2.7-r0                         
znc                                        :1.0+git-r0                         
zram                                       :0.1-r3                      
zsh                                        :5.0.0-r0                         

Summary: There was 1 WARNING message shown.

Sobre a Toradex Brasil

Seguindo sua política global de vendas diretas e contato próximo com o cliente, a Toradex está abrindo no início de 2014 um escritório de vendas e assistência no Brasil para atender toda a América Latina. Em breve você poderá comprar os produtos da empresa, em qualquer quantidade, sem a necessidade de importação, além de contar com suporte gratuito em português para seu desenvolvimento.

Toradex Brasil

Rua Luiz Spiandoreli Neto Nº 60 – Ed. Paineiras, Sala 304 Valinhos – SP | Brazil

T: +55 19 3327 3738

Email: brazil@toradex.com , Site: www.toradex.com

Referência e Links adicionais:

https://developer.toradex.com/product-selector/colibri-t20
https://developer.toradex.com/product-selector/iris-carrier-board
https://developer.toradex.com/software-resources/arm-family/linux/board-support-package/openembedded-(core)​
https://developer.toradex.com/knowledge-base/iris-carrier-board-peripherals
https://developer.toradex.com/software-resources/arm-family/linux/features
https://openembedded.org/wiki/Main_Page
https://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html

 (*) esse post foi patrocinado pela Toradex

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 » Hardware » Ferramentas de Desenvolvimento » Compilando uma Distribuição Linux Openembedded

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: