Beaglebone Black + Qt5 + Yocto - Parte 1

Beaglebone Black Qt Creator
Este post faz parte da série Beaglebone Black + Qt5 + Yocto. Leia também os outros posts da série:

Nesta série de artigos sobre o uso do Yocto Project veremos como criar uma distribuição Linux embarcado com o Qt5 para a Beaglebone Black usando seu acelerador gráfico SGX530. Na segunda parte veremos como gerar um SDK e integrá-lo ao QtCreator para que possamos desenvolver e compilar aplicações para o nosso target. Se você ainda não teve contato com o Yocto, sugiro que faça o tutorial do Henrique Rossi sobre Beaglebone Black + Yocto.

 

 

Preparando o Host

 

O Yocto Project suporta oficialmente as seguintes distribuições GNU/Linux como ambiente de construção:

  • Ubuntu 12.04, 13.10 e 14.04;
  • Fedora 19 e 20;
  • CentOS 6.4 e 6.5;
  • Debian 7.0, 7.1, 7.2, 7.3 e 7.4;
  • openSUSE 12.2, 12.3 e 13.1.

 

Para que ele execute no Host alguns pacotes necessitam ser instalados.

 

Ubuntu e Debian:

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

 

Fedora:

sudo yum install gawk make wget tar bzip2 gzip python unzip perl patch \
     diffutils diffstat git cpp gcc gcc-c++ glibc-devel texinfo chrpath \
     ccache perl-Data-Dumper perl-Text-ParseWords perl-Thread-Queue SDL-devel xterm

 

openSUSE:

sudo zypper install python gcc gcc-c++ git chrpath make wget python-xml \
     diffstat texinfo python-curses patch libSDL-devel xterm

 

CentOS:

sudo yum install gawk make wget tar bzip2 gzip python unzip perl patch \
     diffutils diffstat git cpp gcc gcc-c++ glibc-devel texinfo chrpath SDL-devel xterm

 

 

Montando o Ambiente de construção

 

Vamos criar os diretórios e baixar os fontes necessários:

mkdir -p ~/yocto/dl
cd ~/yocto
git clone -b daisy git://git.yoctoproject.org/poky poky-daisy
cd poky-daisy
git clone -b daisy git://git.yoctoproject.org/meta-ti
git clone -b dizzy https://github.com/meta-qt5/meta-qt5.git
git clone -b daisy git://git.openembedded.org/meta-openembedded
git clone -b daisy https://bitbucket.org/embarcados/meta-embarcados.git

 

Note que estamos usando a versão "daisy" do Yocto Project. E baixamos também o layer meta-ti  que possui o BSP (Board Support Package) com os fontes necessários (u-boot, kernel, drivers para o acelerador gráfico, etc.) para rodar a nossa distribuição na Beaglebone Black. Além disso iremos utilizar os layers meta-qt5  (que possuem as receitas para compilar o Qt5), meta-openembedded (com aplicativos adicionais) e o meta-embarcados (com as customizações necessárias para gerarmos a imagem de testes).

 

Agora vamos configurar o ambiente para gerarmos os artefatos de software:

cd ~/yocto
. poky-daisy/oe-init-build-env build-daisy

 

Edite o arquivo ~/yocto/build-daisy/conf/bblayers.conf para que fique da seguinte maneira:

# LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
LCONF_VERSION = "6"

BBPATH = "${TOPDIR}"
BBFILES ?= ""

BBLAYERS ?= " \
  ${TOPDIR}/../poky-daisy/meta-embarcados \
  ${TOPDIR}/../poky-daisy/meta-embarcados/meta-bbb \
  ${TOPDIR}/../poky-daisy/meta-ti \
  ${TOPDIR}/../poky-daisy/meta-qt5 \
  ${TOPDIR}/../poky-daisy/meta-openembedded/meta-oe \
  ${TOPDIR}/../poky-daisy/meta \
  ${TOPDIR}/../poky-daisy/meta-yocto \
  "

 

O arquivo bblayers.conf configura quais serão as camadas a serem consideradas pelo sistema de build.

 

Adicione as seguintes variáveis no começo do arquivo ~/yocto/build-daisy/conf/local.conf:

MACHINE = "beaglebone"
DISTRO = "poky"
DL_DIR = "${TOPDIR}/../dl"
PACKAGE_CLASSES = "package_ipk"
DISTRO_FEATURES_remove = "x11 wayland"

 

Note que configuramos nossa machine como sendo a beaglebone (serve tanto para a white como a black), mudamos o diretório de download para podermos reutilizar os fontes baixados em outros projetos e usaremos o gerenciador de pacotes ipk (ele é mais indicado para sistemas embarcados porque não exige muitos recursos para funcionar).

 

 

Gerando a imagem

 

Depois de baixado os fontes e ter configurado o sistema de build , vamos gerar uma imagem com diversos aplicativos de demostração (qt5-image-demo) do Qt5 (no momento de escrita desse artigo a versão do Qt utilizada é a 5.3.2).

cd ~/yocto
. poky-daisy/oe-init-build-env build-daisy
bitbake qt5-image-demo

 

Esta é a configuração de build que foi utilizada:

Build Configuration:
BB_VERSION        = "1.22.0"
BUILD_SYS         = "x86_64-linux"
NATIVELSBSTRING   = "Ubuntu-14.04"
TARGET_SYS        = "arm-poky-linux-gnueabi"
MACHINE           = "beaglebone"
DISTRO            = "poky"
DISTRO_VERSION    = "1.6.2"
TUNE_FEATURES     = "armv7a vfp thumb neon callconvention-hard cortexa8"
TARGET_FPU        = "vfp-neon"
meta-embarcados   
meta-bbb          = "daisy:434dc81fcb7fe630c107ef172afc33ce62e335db"
meta-ti           = "daisy:5532d8df96caaa6ac73ff825f36e7f11793c7060"
meta-qt5          = "dizzy:0208b397d1929444aef2dca1780fe7fc1d898157"
meta-oe           = "daisy:d3d14d3fcca7fcde362cf0b31411dc4eea6d20aa"
meta              
meta-yocto        
meta-yocto-bsp    = "daisy:5fcab03423d56c0f638e281db52e992a3f647903"

 

 

Gravando a imagem

 

Este procedimento é praticamente o mesmo utilizado no tutorial do Henrique mencionado no começo deste post. 

 

Para a gravação das imagens no microSD card, o mesmo deve ser particionado e formatado de acordo o padrão aceito pelo placa. Para isso foi criado um script, que pode ser obtido com os seguintes comandos:

cd ~/yocto/
git clone https://github.com/henriqueprossi/beaglebone-black.git bbb-sdcard-prepare

 

Insira um microSD card no computador PC ou notebook (sistema host) e descubra qual o device node criado pelo sistema operacional. Tente um dos seguintes comandos:

dmesg
sudo fdisk -l

 

Caso, por exemplo, o device node criado seja /dev/sdb, use o seguinte comando:

cd ~/yocto/bbb-sdcard-prepare/scripts
chmod +x format_sd_card.sh
sudo ./format_sd_card.sh /dev/sdb

 

Assim que o processo de particionamento e formatação terminar, duas partições no microSD card são criadas:

  • boot (FAT32);
  • rootfs (ext4).

 

Execute a “montagem” dessas duas partições no sistema de arquivos do sistema host. Caso esse faça uso da distribuição Ubuntu, basta remover e inserir novamente o dispositivo no seu conector. Dado que, por exemplo, os pontos de montagem criados sejam /media/boot e /media/rootfs, a imagem gerada anteriormente é copiada da seguinte forma para o microSD :

cd ~/yocto/build-daisy/tmp/deploy/images/beaglebone
cp MLO /media/boot
cp u-boot.img /media/boot
sudo tar xzf qt5-image-demo-beaglebone.tar.gz -C /media/rootfs ; sync

 

 

Testando a imagem

 

Remova o microSD do computador e insira-o na BBB, conecte-a a uma TV por um cabo HDMI, e a um mouse através do conector USB da placa. Você precisará acessar o sistema via conexão serial. Para fazer a conexão entre o HOST e a BBB siga os passos da seção "Configuring Serial Communication" do tutorial da Timesys.

 

NOTA:

Se você tiver instalado algum outro sistema operacional no eMMC da BBB energize a placa pressionando a switch que fica próxima ao slot do microSD. Isso fará com que o processador busque o MLO e u-boot que estão contidos no microSD ao invés do eMMC.

 

Abaixo segue o log da serial depois do boot do sistema: 

U-Boot SPL 2014.07 (Oct 21 2014 - 11:05:17)
MMC: block number 0x100 exceeds max(0x0)
MMC: block number 0x200 exceeds max(0x0)
*** Error - No Valid Environment Area found<code>
Using default environment

reading u-boot.img
reading u-boot.img


U-Boot 2014.07 (Oct 21 2014 - 11:05:17)

I2C:   ready
DRAM:  512 MiB
MMC:   OMAP SD/MMC: 0, OMAP SD/MMC: 1
Using default environment

Net:   <ethaddr> not set. Validating first E-fuse MAC
cpsw, usb_ether
Hit any key to stop autoboot:  0 
switch to partitions #0, OK
mmc0 is current device
SD/MMC found on device 0
reading uEnv.txt
** Unable to read file uEnv.txt **
4881552 bytes read in 322 ms (14.5 MiB/s)
31676 bytes read in 66 ms (467.8 KiB/s)
Kernel image @ 0x82000000 [ 0x000000 - 0x4a7c90 ]
## Flattened Device Tree blob at 88000000
   Booting using the fdt blob at 0x88000000
   Loading Device Tree to 8fff5000, end 8ffffbbb ... OK

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 3.14.19 ([email protected]) (gcc version 4.8.2 (GCC) ) #1 Tue Oct 21 10:27:29 BRST 2014
[    0.000000] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c5387d
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] Machine model: TI AM335x BeagleBone
[    0.000000] cma: CMA: reserved 24 MiB at 9e000000
[    0.000000] Memory policy: Data cache writeback
[    0.000000] CPU: All CPU(s) started in SVC mode.
[    0.000000] AM335X ES2.0 (sgx neon )
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 129792
[    0.000000] Kernel command line: console=ttyO0,115200n8 root=/dev/mmcblk0p2 ro rootfstype=ext4 rootwait
[    0.000000] PID hash table entries: 2048 (order: 1, 8192 bytes)
[    0.000000] Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
[    0.000000] Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
[    0.000000] Memory: 478672K/523264K available (6491K kernel code, 436K rwdata, 2520K rodata, 327K init, 5513K bss, 44592K reserved, 0K highmem)
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
[    0.000000]     vmalloc : 0xe0800000 - 0xff000000   ( 488 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xe0000000   ( 512 MB)
[    0.000000]     pkmap   : 0xbfe00000 - 0xc0000000   (   2 MB)
[    0.000000]     modules : 0xbf000000 - 0xbfe00000   (  14 MB)
[    0.000000]       .text : 0xc0008000 - 0xc08d5198   (9013 kB)
[    0.000000]       .init : 0xc08d6000 - 0xc0927e8c   ( 328 kB)
[    0.000000]       .data : 0xc0928000 - 0xc0995350   ( 437 kB)
[    0.000000]        .bss : 0xc0995350 - 0xc0ef79a8   (5514 kB)
[    0.000000] NR_IRQS:16 nr_irqs:16 16
[    0.000000] IRQ: Found an INTC at 0xfa200000 (revision 5.0) with 128 interrupts
[    0.000000] Total of 128 interrupts on 1 active controller
[    0.000000] OMAP clockevent source: timer2 at 24000000 Hz
[    0.000011] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 178956969942ns
[    0.000051] OMAP clocksource: timer1 at 24000000 Hz
[    0.000705] Console: colour dummy device 80x30
[    0.000751] Lock dependency validator: Copyright (c) 2006 Red Hat, Inc., Ingo Molnar
[    0.000758] ... MAX_LOCKDEP_SUBCLASSES:  8
[    0.000764] ... MAX_LOCK_DEPTH:          48
[    0.000770] ... MAX_LOCKDEP_KEYS:        8191
[    0.000776] ... CLASSHASH_SIZE:          4096
[    0.000782] ... MAX_LOCKDEP_ENTRIES:     16384
[    0.000788] ... MAX_LOCKDEP_CHAINS:      32768
[    0.000794] ... CHAINHASH_SIZE:          16384
[    0.000800]  memory used by lock dependency info: 3695 kB
[    0.000806]  per task-struct memory footprint: 1152 bytes
[    0.000847] Calibrating delay loop... 996.14 BogoMIPS (lpj=4980736)
[    0.079199] pid_max: default: 32768 minimum: 301
[    0.079416] Security Framework initialized
[    0.079493] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.079505] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
[    0.096475] CPU: Testing write buffer coherency: ok
[    0.097588] Setting up static identity map for 0x80628ce8 - 0x80628d58
[    0.101484] devtmpfs: initialized
[    0.105081] VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 3
[    0.133556] omap_hwmod: tptc0 using broken dt data from edma
[    0.133851] omap_hwmod: tptc1 using broken dt data from edma
[    0.134132] omap_hwmod: tptc2 using broken dt data from edma
[    0.141047] omap_hwmod: debugss: _wait_target_disable failed
[    0.199476] pinctrl core: initialized pinctrl subsystem
[    0.203700] regulator-dummy: no parameters
[    0.207293] NET: Registered protocol family 16
[    0.211911] DMA: preallocated 256 KiB pool for atomic coherent allocations
[    0.218313] cpuidle: using governor ladder
[    0.218336] cpuidle: using governor menu
[    0.229828] platform 49000000.edma: alias fck already exists
[    0.229861] platform 49000000.edma: alias fck already exists
[    0.229878] platform 49000000.edma: alias fck already exists
[    0.233687] OMAP GPIO hardware version 0.1
[    0.263501] No ATAGs?
[    0.263527] hw-breakpoint: debug architecture 0x4 unsupported.
[    0.326186] bio: create slab <bio-0> at 0
[    0.361117] edma-dma-engine edma-dma-engine.0: TI EDMA DMA engine driver
[    0.363290] vmmcsd_fixed: 3300 mV 
[    0.369485] vgaarb: loaded
[    0.370795] i2c-core: driver [palmas] using legacy suspend method
[    0.370808] i2c-core: driver [palmas] using legacy resume method
[    0.372233] SCSI subsystem initialized
[    0.375713] usbcore: registered new interface driver usbfs
[    0.376111] usbcore: registered new interface driver hub
[    0.376678] usbcore: registered new device driver usb
[    0.378876] omap_i2c 44e0b000.i2c: could not find pctldev for node /[email protected]/pinmux_i2c0_pins, deferring probe
[    0.378917] platform 44e0b000.i2c: Driver omap_i2c requests probe deferral
[    0.379876] pps_core: LinuxPPS API ver. 1 registered
[    0.379890] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <[email protected]>
[    0.380207] PTP clock support registered
[    0.384987] omap-mailbox 480c8000.mailbox: omap mailbox rev 0x400
[    0.386934] Advanced Linux Sound Architecture Driver Initialized.
[    0.391545] Switched to clocksource timer1
[    0.532780] NET: Registered protocol family 2
[    0.534641] TCP established hash table entries: 4096 (order: 2, 16384 bytes)
[    0.534813] TCP bind hash table entries: 4096 (order: 5, 147456 bytes)
[    0.536162] TCP: Hash tables configured (established 4096 bind 4096)
[    0.536303] TCP: reno registered
[    0.536323] UDP hash table entries: 256 (order: 2, 20480 bytes)
[    0.536510] UDP-Lite hash table entries: 256 (order: 2, 20480 bytes)
[    0.537450] NET: Registered protocol family 1
[    0.538691] RPC: Registered named UNIX socket transport module.
[    0.538711] RPC: Registered udp transport module.
[    0.538719] RPC: Registered tcp transport module.
[    0.538727] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    0.540920] hw perfevents: enabled with ARMv7 Cortex-A8 PMU driver, 5 counters available
[    0.547400] futex hash table entries: 256 (order: 1, 11264 bytes)
[    0.704375] VFS: Disk quotas dquot_6.5.2[13]
[    0.704458] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
[    0.706080] NFS: Registering the id_resolver key type
[    0.706449] Key type id_resolver registered
[    0.706466] Key type id_legacy registered
[    0.706566] jffs2: version 2.2. (NAND) (SUMMARY)  �© 2001-2006 Red Hat, Inc.
[    0.706923] msgmni has been set to 982
[    0.711182] NET: Registered protocol family 38
[    0.711429] io scheduler noop registered
[    0.711442] io scheduler deadline registered
[    0.711483] io scheduler cfq registered (default)
[    0.714949] pinctrl-single 44e10800.pinmux: 142 pins at pa f9e10800 size 568
[    0.725645] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
[    0.733414] omap_uart 44e09000.serial: no wakeirq for uart0
[    0.734200] 44e09000.serial: ttyO0 at MMIO 0x44e09000 (irq = 88, base_baud = 3000000) is a OMAP UART0
[    1.406657] console [ttyO0] enabled
[    1.414244] omap_rng 48310000.rng: OMAP Random Number Generator ver. 20
[    1.422154] [drm] Initialized drm 1.1.0 20060810
[    1.452066] brd: module loaded
[    1.469875] loop: module loaded
[    1.473922] (hci_tty): inside hci_tty_init
[    1.479395] (hci_tty): allocated 249, 0
[    1.489631] mtdoops: mtd device (mtddev=name/number) must be supplied
[    1.505239] usbcore: registered new interface driver asix
[    1.511338] usbcore: registered new interface driver ax88179_178a
[    1.518076] usbcore: registered new interface driver cdc_ether
[    1.524613] usbcore: registered new interface driver smsc95xx
[    1.531032] usbcore: registered new interface driver net1080
[    1.537282] usbcore: registered new interface driver cdc_subset
[    1.543867] usbcore: registered new interface driver zaurus[13]
[    1.550193] usbcore: registered new interface driver cdc_ncm
[    1.557454] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    1.564342] ehci-pci: EHCI PCI platform driver
[    1.569496] ehci-omap: OMAP-EHCI Host Controller driver
[    1.576030] usbcore: registered new interface driver cdc_wdm
[    1.582466] usbcore: registered new interface driver usb-storage
[    1.591754] mousedev: PS/2 mouse device common for all mice
[    1.602468] i2c-core: driver [rtc-ds1307] using legacy suspend method
[    1.609205] i2c-core: driver [rtc-ds1307] using legacy resume method
[    1.617976] omap_rtc 44e3e000.rtc: rtc core: registered 44e3e000.rtc as rtc0
[    1.625608] 44e3e000.rtc: already running
[    1.631481] i2c /dev entries driver
[    1.635561] Driver for 1-wire Dallas network protocol.
[    1.646205] omap_wdt: OMAP Watchdog Timer Rev 0x01: initial timeout 60 sec
[    1.729031] mmc0: host does not support reading read-only switch. assuming write-enable.
[    1.741024] mmc0: new high speed SDHC card at address b368
[    1.751186] mmcblk0: mmc0:b368 SD8GB 7.48 GiB 
[    1.762402]  mmcblk0: p1 p2
[    1.766131] ledtrig-cpu: registered to indicate activity on CPUs
[    1.775032] omap-aes 53500000.aes: OMAP AES hw accel rev: 3.2
[    1.789398] omap-sham 53100000.sham: hw accel on OMAP rev 4.3
[    1.803188] usbcore: registered new interface driver usbhid
[    1.809018] usbhid: USB HID core driver
[    1.814101]  remoteproc0: wkup_m3 is available
[    1.818752]  remoteproc0: Note: remoteproc is still under development and considered experimental.
[    1.828395]  remoteproc0: THE BINARY FORMAT IS NOT YET FINALIZED, and backward compatibility isn't yet guaranteed.
[    1.839977]  remoteproc0: Direct firmware load failed with error -2
[    1.846577]  remoteproc0: Falling back to user helper
[    1.863515] oprofile: using arm/armv7
[    1.867529] nf_conntrack version 0.5.0 (7863 buckets, 31452 max)
[    1.873962] mmc1: BKOPS_EN bit is not set
[    1.879903] ip_tables: (C) 2000-2006 Netfilter Core Team
[    1.886729] TCP: cubic registered
[    1.890200] Initializing XFRM netlink socket
[    1.894876] NET: Registered protocol family 17
[    1.899582] NET: Registered protocol family 15
[    1.904761] mmc1: new high speed MMC card at address 0001
[    1.911413] Key type dns_resolver registered
[    1.916903] mmcblk1: mmc1:0001 MMC02G 1.78 GiB 
[    1.923174] cpu cpu0: of_pm_voltdm_notifier_register: Failed to get cpu0 regulator/voltdm: -517
[    1.932363] cpu cpu0: cpu0 clock notifier not ready, retry
[    1.938580] mmcblk1boot0: mmc1:0001 MMC02G partition 1 1.00 MiB
[    1.945098] mmcblk1boot1: mmc1:0001 MMC02G partition 2 1.00 MiB
[    1.951783] platform cpufreq-cpu0.0: Driver cpufreq-cpu0 requests probe deferral
[    1.962762]  mmcblk1: p1 p2 p3 p4
[    1.966539] PM: bootloader does not support rtc-only!
[    1.974537] ThumbEE CPU extension supported.
[    1.979050] Registering SWP/SWPB emulation handler
[    1.987906]  mmcblk1boot1: unknown partition table
[    1.997478] regulator-dummy: disabling
[    2.004335]  mmcblk1boot0: unknown partition table
[    2.012015] slave hdmi.6: could not get i2c
[    2.016519] platform hdmi.6: Driver slave requests probe deferral
[    2.024278] platform 4830e000.lcdc: Driver tilcdc requests probe deferral
[    2.043171] DCDC1: at 1500 mV 
[    2.048663] vdd_mpu: 925 <--> 1375 mV at 1325 mV 
[    2.055593] vdd_core: 925 <--> 1150 mV at 1125 mV 
[    2.062573] LDO1: at 1800 mV 
[    2.067633] LDO2: at 3300 mV 
[    2.072656] LDO3: 1800 mV 
[    2.077376] LDO4: at 3300 mV 
[    2.082803] tps65217 0-0024: TPS65217 ID 0xe version 1.2
[    2.088440] omap_i2c 44e0b000.i2c: bus 0 rev0.11 at 400 kHz
[    2.095493] cpu cpu0: of_pm_voltdm_notifier_register: Fail calculating voltage latency[950000<->1260000]:-22
[    2.245072] tilcdc 4830e000.lcdc: found TDA19988
[    2.252136] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[    2.259059] [drm] No driver support for vblank timestamp query.
[    2.510594] Console: switching to colour frame buffer device 240x67
[    2.510721] tilcdc 4830e000.lcdc: timeout waiting for framedone
[    2.566940] tilcdc 4830e000.lcdc: fb0:  frame buffer device
[    2.573968] tilcdc 4830e000.lcdc: registered panic notifier
[    2.580631] [drm] Initialized tilcdc 1.0.0 20121205 on minor 0
[    2.661756] davinci_mdio 4a101000.mdio: davinci mdio revision 1.6
[    2.668274] davinci_mdio 4a101000.mdio: detected phy mask fffffffe
[    2.681223] libphy: 4a101000.mdio: probed
[    2.685711] davinci_mdio 4a101000.mdio: phy[0]: device 4a101000.mdio:00, driver SMSC LAN8710/LAN8720
[    2.699631] cpsw 4a100000.ethernet: Detected MACID = c8:a0:30:b3:d5:d7
[    2.718150] omap_rtc 44e3e000.rtc: setting system clock to 2014-10-29 15:13:44 UTC (1414595624)
[    2.776183] ALSA device list:
[    2.779379]   No soundcards found.
[    2.825345] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[    2.834487] VFS: Mounted root (ext4 filesystem) readonly on device 179:2.
[    2.846624] devtmpfs: mounted
[    2.851287] Freeing unused kernel memory: 324K (c08d6000 - c0927000)
INIT: version 2.88 booting
Starting udev
[    3.603009] udevd[836]: starting version 182
[    4.320186] 47401300.usb-phy supply vcc not found, using dummy regulator
[    4.491004] 47401b00.usb-phy supply vcc not found, using dummy regulator
[    4.590836]  remoteproc0: powering up wkup_m3
[    4.625520]  remoteproc0: Booting fw image am335x-pm-firmware.elf, size 150796
[    4.759117] PM: CM3 Firmware Version = 0x189
[    4.882198]  remoteproc0: remote processor wkup_m3 is now up
[    4.903847] EXT4-fs (mmcblk0p2): re-mounted. Opts: data=ordered
Starting Bootlog daemon: bootlogd: cannot allocate pseudo tty: No such file or directory
bootlogd.
[    5.641639] random: nonblocking pool is initialized
[    6.188882] davinci_evm sound.10: hdmi-hifi <-> 48038000.mcasp mapping ok
[    6.854319] musb-hdrc musb-hdrc.0.auto: MUSB HDRC host driver
[    6.943030] musb-hdrc musb-hdrc.0.auto: new USB bus registered, assigned bus number 1
[    7.014042] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[    7.021211] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    7.028850] usb usb1: Product: MUSB HDRC host driver
[    7.034080] usb usb1: Manufacturer: Linux 3.14.19 musb-hcd
[    7.039826] usb usb1: SerialNumber: musb-hdrc.0.auto
[    7.188277] hub 1-0:1.0: USB hub found
[    7.208579] hub 1-0:1.0: 1 port detected
[    7.265627] musb-hdrc musb-hdrc.1.auto: MUSB HDRC host driver
[    7.302013] musb-hdrc musb-hdrc.1.auto: new USB bus registered, assigned bus number 2
[    7.332183] usb usb2: New USB device found, idVendor=1d6b, idProduct=0002
[    7.339318] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    7.346934] usb usb2: Product: MUSB HDRC host driver
[    7.352187] usb usb2: Manufacturer: Linux 3.14.19 musb-hcd
[    7.357955] usb usb2: SerialNumber: musb-hdrc.1.auto
[    7.395561] hub 2-0:1.0: USB hub found
[    7.409686] hub 2-0:1.0: 1 port detected
ALSA: Restoring mixer settings...
INIT: Entering runlevel: 5
Configuring network interfaces... [    8.328746] net eth0: initializing cpsw version 1.12 (0)
[    8.412395] net eth0: phy found : id is : 0x7c0f1
[    8.417460] libphy: PHY 4a101000.mdio:01 not found
[    8.422527] net eth0: phy 4a101000.mdio:01 not found on slave 1
udhcpc (v1.22.1) started
Sending discover...
Sending discover...
Sending discover...
No lease, failing
Starting system message bus: dbus.
Starting rpcbind daemon...rpcbind: cannot create socket for udp6
rpcbind: cannot create socket for tcp6
done.
Starting advanced power management daemon: No APM support in kernel
(failed.)
Starting syslogd/klogd: done
 * Starting Avahi mDNS/DNS-SD Daemon: avahi-daemon
   ...done.
Starting Telephony daemon
[   18.591008] Bluetooth: Core ver 2.18
[   18.599622] NET: Registered protocol family 31
[   18.604447] Bluetooth: HCI device and connection manager initialized
[   18.620685] Bluetooth: HCI socket layer initialized
[   18.630830] Bluetooth: L2CAP socket layer initialized
[   18.659019] Bluetooth: SCO socket layer initialized
Starting PVR
Starting Linux NFC daemon
Stopping Bootlog daemon: bootlogd.

Poky (Yocto Project Reference Distro) 1.6.1 beaglebone /dev/ttyO0

beaglebone login:

 

Vamos rodar o Qt5 Cinematic Experience que é um exemplo bastante interessante que visa explorar diversos recursos usando aceleração gráfica por hardware. Para isso faça o login como root e execute o programa: 

Qt5_CinematicExperience -platform eglfs

 

Note que subimos o aplicativo com a opção "-platform eglfs", isso configura o Qt para utilizar o OpenGL através do pluging EGLFS.

 

A figura 1 mostra um screenshot do Qt5 Cinematic Experience.

 

Qt5 Cinematics Experience
Figura 1 - Qt5 Cinematics Experience

 

Agora vamos rodar o exemplo do QtSmartHome:

cd /usr/share/qtsmarthome-1.0/
./smarthome -platform eglfs

 

A figura 2 mostra um screenshot do QtSmartHome:

 

Figura 2 - Qt Smart Home
Figura 2 - Qt Smart Home

 

Agora vamos rodar o exemplo Qt5EveryWhereDemo:

cd /usr/share/qt5everywheredemo-1.0
./QtDemo -platform eglfs

 

A figura 3 mostra um screenshot do Qt5EveryWhereDemo:

Figura 3 - Qt5 Every Where Demo
Figura 3 - Qt5 Every Where Demo

 

Aproveite para explorar os diversos exemplos presentes no caminho /usr/share/qt5 e lembre-se de sempre passar a opção "-platform eglfs" quando carregar os programas.

 

 

Dicas e Truques

 

Para remover o cursor piscante na tela rode o comando:

echo 0 > /sys/class/graphics/fbcon/cursor_blink

 

Para desabilitar o desligamento da saída de vídeo rode o comando:

echo -e '\033[9;0]' > /dev/tty1

 

A aceleração gráfica tem uma melhor performance na resolução HD (1280x720) e caso sua TV ou monitor seja FULL-HD (1920x1080) você pode alterar a resolução para HD com os seguintes comandos:

mount /dev/mmcblk0p1 /media/
echo "optargs=video=HDMI-A-1:[email protected]" > /media/uEnv.txt
reboot

 

 

O que vem por aí

 

Na próxima parte veremos como gerar uma toolchain com o Qt5 para ser integrada a IDE QtCreator para desenvolvimento e compilação das aplicações Qt.

 

 

Saiba mais

Beaglebone Black + Qt Embedded + Yocto - parte 1

Desvendando Yocto Project – Primeiros passos

BeagleBone Black + Yocto

 

 

Referências

 

 

http://beagleboard.org/Products/BeagleBone%20Black

http://en.wikipedia.org/wiki/PowerVR#Series_5

http://qt-project.org/wiki/Category:Tools::QtCreator

http://qt-project.org/doc/qt-4.8/qt-embedded-linux.html

http://en.wikipedia.org/wiki/Graphics_processing_unit

http://blog.qt.digia.com/blog/2011/05/09/thoughts-about-qt-5/

http://elinux.org/Beagleboard:BeagleBone_Black_Serial

https://linuxlink.timesys.com/docs/gsg/beaglebone_black

 

 

Outros artigos da série

Beaglebone Black + Qt5 + Yocto – Parte 2 >>
Este post faz da série Beaglebone Black + Qt5 + Yocto. Leia também os outros posts da série:
NEWSLETTER

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

Obrigado! Sua inscrição foi um sucesso.

Ops, algo deu errado. Por favor tente novamente.

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Diego Sueiro
Formado em Engenharia de Controle e Automação pela UNIFEI e CEO do Embarcados, atualmente trabalho na Inglaterra com Desenvolvimento de Sistemas Linux Embarcado Real Time. Sou consultor e desenvolvedor de software para Sistemas Embarcados com vasta experiência em projetos com processadores de 8bits a 32bits, sistemas bare metal, RTOS, Linux Embarcado e Android Embarcado. Um apaixonado por Pink Floyd e Empreendedorismo.

150
Deixe um comentário

avatar
 
34 Comment threads
116 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
16 Comment authors
PremjithGabriel HabibAnkur TyagiMartin BeaudetQasem Taheri Recent comment authors
  Notificações  
recentes antigos mais votados
Notificar
Premjith
Visitante
Premjith

Is there any way to do this build with 4.14 kernel, this build is bind to 3.14 kernel ? Thanks

sevgi aydın
Visitante
sevgi aydın

Hi Diego;
when your applications run, it is warning ...
libpng warning: iCCP: known incorrect sRGB profile
how can I solve the warning ?

sevgi aydın
Visitante
sevgi aydın

Dear Diego;
I generate image this web site .I done step by step every step ..But I have 2 problems..

1-The image is vertical.. I can not rotate the application . How will I rorate application image? comment image

sevgi aydın
Visitante
sevgi aydın

I could run my applications 16 bit RGB ..I had to change 24 bit
because of my new display specifications...I changed panel_info = at am335x-boneblack.dts . But It started to give the following error..
./application --platform eglfs
Could not initialize egl display
Aborted

Do you have a idea for solving ?

Diego Sueiro
Visitante
Diego Sueiro

Can you run any other gui application (excluding qt) with this kernel and dts change?

sevgi aydın
Visitante
sevgi aydın

I can see just text display..Other applications is same error..
for example
1-cd /usr/share/qt5everywheredemo-1.0
./QtDemo -platform eglfs
2-cd /usr/share/qtsmarthome-1.0/
./smarthome -platform eglfs3-1
3--Qt5_CinematicExperience -platform eglfs

Diego Sueiro
Visitante
Diego Sueiro

Ok.
My question is: are you sure that this is the change you have to do to use 24bit mode?
Have you tested it in another environment, ie debian?

sevgi aydın
Visitante
sevgi aydın

I am changing only bpp= at am335x-boneblack-rgb.dts ..
I do make and after I am loading sd card..and Previously running programs are not running..it is given eglfs error ..

when I use color depth 16 bit ..Colors are not exactly as expected ..and image is vertical.. I can not rotate. image...

sevgi aydın
Visitante
sevgi aydın

Dear Diego;
I generate image this web site .I done step by step every step ..But I have 2 problems..

1-The image is vertical.. I can not rotate the application . How will I rorate application image?
comment image
2-When I convert 24 bit to 16 bit.. it was been error.."Could not initialize egl display
Aborted "

Diego Sueiro
Visitante
Diego Sueiro

I don't have too much experience with Qt development, but I suspect that you can hardcode in the application the display resolution and rotation.

I don't have a display to test this specific configuration which you are using.

Have you tried to play around with the environment variables for eglfs configuration?

http://doc.qt.io/qt-5/embedded-linux.html

sevgi aydın
Visitante
sevgi aydın

24 bit RGB [email protected]:~# Qt5_CinematicExperience -platform eglfs
Could not initialize egl display
Aborted

lcmscheid
Visitante
lcmscheid

Oi Diego...
É possível fazer projetos com QtQuick com essas imagens? Tem suporte eglfs?

Diego Sueiro
Visitante
Diego Sueiro

Olá @lcmscheid:disqus,

Essa imagem tem suporte a eglfs sim e o QtQuick Controls Qml Plugins também estão instalados.
Infelizmente não tenho uma imagem dessa pronta para testar.

Me avise o resultado.

lcmscheid
Visitante
lcmscheid

Oi Diego, parabéns e obrigado pela iniciativa. Estou rondando o meu host em uma VM, e segui seus passos. Quando fui criar o SD, tive que fazê-lo no fora da vm pois a mesma nao carrega o sd. Criei o sd fora, manualmente pois o script que vc indicou nao estava funcionando. Montei as duas particoes e comparilhei elas via shared folder atraves do virtual box. Copie sem problemas os arquivos que vao para a pariticao boot. Quando vou descomprimir o arquivo qt5-image-demo-beaglebone.tar.gz não dá certo, gerando erro cada acesso aos arquivos ./lib, diz que nao pode fazer o mkdir:… Leia mais »

Diego Sueiro
Visitante
Diego Sueiro

Você tentou descompactar com o sudo?
Qual o erro que o script dá?

Gustavo Ferreira Palma
Visitante
Gustavo

Sei que o Post é um pouco antigo, segui todos os passos, as
compilações foram realizadas com sucesso, porém na hora de gravar os
arquivos tenho problemas em executar o script de preparação do sdcard,
estou usando ubuntu 14,4 e um sdcard de 8 gb, o ponto de montagem do
sdcard é o /dev/mmcblk0, quando não há nenhuma partição, e com alguma
partição criada /dev/mmcblk0p1, gostaria de saber o que posso estar
fazendo errado, Desde já agradeço

Diego Sueiro
Visitante
Diego Sueiro

Olá Gustavo.
Não se preocupe, você não está fazendo nada de errado.
Há um bug nesse script que já foi reportado de mas não foi corrigido.
Você tem duas opções.
1. Usar um adaptador sd USB, pois dessa maneira o dispositivo vai ser montado como sd"alguma_letra" e daí o script vai funcionar.
2. Alterar o script format_sd_card.sh conforme abaixo para lidar com o nome mmcblk da maneira correta:
PARTITION1=p${DRIVE}1
PARTITION2=p${DRIVE}2

Prem Jith
Visitante
Prem Jith

awesome tutorial. Thanks man

Gabriel Habib
Visitante
Gabriel Habib

Sueiro, eu gostaria de entender um pouco mais sobre a questao do Yocto, falaste sobre conectar um mause na USB da mesma, fiquei me perguntando como eu faria para por exemplo, adicionar um touch screen via USB. Em qual parte do cozimento eu defino isso?

Diego Sueiro
Visitante
Diego Sueiro

Gabriel,

Este tipo de característica é manipulada pelo Yocto através da variável MACHINE_FEATURES:

http://www.yoctoproject.org/docs/current/mega-manual/mega-manual.html#ref-features-machine