Beaglebone Black + Qt Embedded + Yocto – parte 1

qt embedded yocto
Este post faz parte da série Beaglebone Black + Qt Embedded + Yocto

Dando continuidade na série de artigos sobre o uso do Yocto Project, agora veremos como criar uma distribuição Linux embarcado com o Qt Embedded para a Beaglebone Black. Se você ainda não teve contato com o Yocto, sugiro que faça o tutorial do Henrique Rossi sobre Beaglebone Black + Yocto.

Qt Embedded

O Qt (/ˈkjuːt/ “cute”) é um framework para desenvolvimento de aplicações cross-plataforma. Isso quer dizer que as aplicações desenvolvidas podem rodar em diversos sistemas operacionais e arquiteturas de hardware diferentes sem que seja necessária alguma alteração no código fonte, sendo obrigatório apenas a sua recompilação. Aplicações com ou sem GUI (Graphical User Interface) são contempladas no framework e são desenvolvidas em C++. Ele é distribuído sob a licença GPL-3 e LGPL-2.1, além de possuir licença comercial. 

O Qt começou a ser desenvolvido pelos fundadores da Trolltech em 1991 que foi adquirida pela Nokia em 2008 para ser usado como interface gráfica para os celulares com sistema operacional Symbian. Em 2011 a Nokia vendeu a divisão de licenciamento comercial do Qt para a Digia.

Em sistemas Linux embarcado, onde recursos de processamento e memória são mais restritos dos que encontramos em desktop, devemos dar uma atenção especial quando o produto utilizará uma interface gráfica. Sistemas de gerenciamento de janelas (Windowing Systems), como por exemplo o X11 e Wayland, consomem bastante recursos e muitas vezes são impeditivos em aplicações embarcadas.

O Qt Embedded elimina a necessidade do uso de um sistema de gerenciamento de janelas e faz o acesso aos recursos gráficos diretamente pelo Linux framebuffer, que é o dispositivo responsável por abstrair o hardware gráfico. Dessa maneira o consumo de memória e processamento são melhores otimizados.

Montando o Ambiente de construção no yocto

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

mkdir -p ~/yocto/dl
cd ~/yocto
git clone -b dora git://git.yoctoproject.org/poky poky-dora
cd poky-dora
git clone -b dora git://git.yoctoproject.org/meta-ti

Note que estamos usando a versão “dora” 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 etc) para rodar a nossa distribuição na Beaglebone Black.

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

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

Adicione a linha abaixo no arquivo ~/yocto/build-dora/conf/bblayers.conf  para a variável BBLAYERS:

${TOPDIR}/../poky-dora/meta-ti \

Modifique e adicione as seguintes variáveis no arquivo ~/yocto/build-dora/conf/local.conf

#MACHINE ??= "qemux86"
MACHINE ?= "beaglebone"

DL_DIR ?= "${TOPDIR}/../dl"

PACKAGE_CLASSES ?= "package_ipk"

IMAGE_INSTALL_append = " kernel-modules"

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, usaremos o gerenciador de pacotes ipk (ele é mais indicado para sistemas embarcados porque não exige muitos recursos para funcionar) e vamos instalar na imagem todos os módulos do kernel gerados.

Se você já fez o tutorial do Henrique, você pode simplesmente atualizar as cópias locais dos repositórios poky e meta-ti (git pull) e modificar o arquivo local.conf.

Gerando a imagem

Depois de baixado os fontes e ter configurado o sistema de build , vamos gerar uma imagem com os aplicativos demo do Qt Embedded versão 4.8.5.

cd ~/yocto
. poky-dora/oe-init-build-env build-dora
bitbake qt4e-demo-image

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

Build Configuration:
BB_VERSION        = "1.20.0"
BUILD_SYS         = "x86_64-linux"
NATIVELSBSTRING   = "Ubuntu-12.10"
TARGET_SYS        = "arm-poky-linux-gnueabi"
MACHINE           = "beaglebone"
DISTRO            = "poky"
DISTRO_VERSION    = "1.5.1"
TUNE_FEATURES     = "armv7a vfp neon"
TARGET_FPU        = "vfp-neon"
meta              
meta-yocto        
meta-yocto-bsp    = "dora:98bd952a5b72c584fc1094e4a61eb9e2a24cc97b"
meta-ti           = "dora:b5d21cb2f4f0ab9e898d208239867b0c5ea969bc"

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-dora/tmp/deploy/images/beaglebone
cp MLO /media/boot
cp u-boot.img /media/boot
sudo tar xzf qt4e-demo-image-beaglebone.tar.gz -C /media/rootfs ; sync
sudo bash -c 'echo "musb_am335x" > /media/rootfs/etc/modules'

 Este último comando é importante, pois sem ele o mouse não será reconhecido pelo kernel.

Se você já possui algum outro sistema operacional instalado no eMMC da BBB, como por exemplo o Angstrom, execute os seguintes comandos:

cd ~/yocto/build-dora/tmp/deploy/images/beaglebone
cp zImage /media/boot
mkdir /media/boot/dtbs
cp zImage-am335x-boneblack.dtb /media/boot/dtbs/am335x-boneblack.dtb
cd ~/yocto/bbb-sdcard-prepare/scripts
cp uEnv.txt /media/boot

 Dessa maneira garantimos que o bootloader irá carregar os arquivos corretos do microSD card. 

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. Se quiser monitorar o processo de boot, você também pode conectar um cabo serial.

Depois de energizar a placa você terá a seguinte imagem na TV:

qt-embedded-yocto-1
Imagem na TV do Qt Embedded

 

O log de boot é:

U-Boot SPL 2013.10 (Apr 04 2014 - 21:59:33)
reading args
spl: error reading image args, err - -1
reading u-boot.img
reading u-boot.img


U-Boot 2013.10 (Apr 04 2014 - 21:59:33)

I2C:   ready
DRAM:  512 MiB
NAND:  0 MiB
MMC:   OMAP SD/MMC: 0, OMAP SD/MMC: 1
*** Error - No Valid Environment Area found
*** Warning - bad CRC, using default environment

Net:    not set. Validating first E-fuse MAC
cpsw, usb_ether
Hit any key to stop autoboot:  0 
mmc0 is current device
Scanning mmc 0...
4139120 bytes read in 255 ms (15.5 MiB/s)
34352 bytes read in 38 ms (882.8 KiB/s)
mmc0 is current device
SD/MMC found on device 0
reading uEnv.txt
132 bytes read in 2 ms (64.5 KiB/s)
Loaded environment from uEnv.txt
Importing environment from mmc ...
4139120 bytes read in 254 ms (15.5 MiB/s)
34352 bytes read in 38 ms (882.8 KiB/s)
Kernel image @ 0x80200000 [ 0x000000 - 0x3f2870 ]
## Flattened Device Tree blob at 80f80000
   Booting using the fdt blob at 0x80f80000
   Loading Device Tree to 9f321000, end 9f32c62f ... OK

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 3.12.10 (dsueiro@dsueiro-N46VM) (gcc version 4.8.1 (GCC) ) #1 Fri Apr 4 21:02:43 BRT 2014
[    0.000000] CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c53c7d
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] Machine: Generic AM33XX (Flattened Device Tree), model: TI AM335x BeagleBone
[    0.000000] cma: CMA: reserved 24 MiB at 9d800000
[    0.000000] Memory policy: ECC disabled, 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: 129280
[    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: 483280K/521216K available (5623K kernel code, 560K rwdata, 1880K rodata, 344K init, 225K bss, 37936K 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 - 0xc075c014   (7505 kB)
[    0.000000]       .init : 0xc075d000 - 0xc07b3338   ( 345 kB)
[    0.000000]       .data : 0xc07b4000 - 0xc0840018   ( 561 kB)
[    0.000000]        .bss : 0xc0840018 - 0xc0878630   ( 226 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.000000] sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 178956ms
[    0.000000] OMAP clocksource: timer1 at 24000000 Hz
[    0.000000] Console: colour dummy device 80x30
[    0.000250] Calibrating delay loop... 663.55 BogoMIPS (lpj=3317760)
[    0.049781] pid_max: default: 32768 minimum: 301
[    0.049865] Security Framework initialized
[    0.049907] Mount-cache hash table entries: 512
[    0.055697] CPU: Testing write buffer coherency: ok
[    0.056033] Setting up static identity map for 0xc0583c98 - 0xc0583d08
[    0.056725] devtmpfs: initialized
[    0.058177] VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 3
[    0.117895] omap_hwmod: debugss: _wait_target_disable failed
[    0.118474] pinctrl core: initialized pinctrl subsystem
[    0.119172] regulator-dummy: no parameters
[    0.121218] NET: Registered protocol family 16
[    0.122921] DMA: preallocated 256 KiB pool for atomic coherent allocations
[    0.125013] cpuidle: using governor ladder
[    0.125026] cpuidle: using governor menu
[    0.131430] platform mpu.1: FIXME: clock-name 'fck' DOES NOT exist in dt!
[    0.132298] platform 49000000.edma: FIXME: clock-name 'fck' DOES NOT exist in dt!
[    0.133269] OMAP GPIO hardware version 0.1
[    0.139520] platform 56000000.sgx: FIXME: clock-name 'fck' DOES NOT exist in dt!
[    0.141092] DSS not supported on this SoC
[    0.141106] No ATAGs?
[    0.141116] hw-breakpoint: debug architecture 0x4 unsupported.
[    0.159493] bio: create slab  at 0
[    0.170728] edma-dma-engine edma-dma-engine.0: TI EDMA DMA engine driver
[    0.171400] vmmcsd_fixed: 3300 mV 
[    0.173560] vgaarb: loaded
[    0.174551] SCSI subsystem initialized
[    0.175588] usbcore: registered new interface driver usbfs
[    0.175729] usbcore: registered new interface driver hub
[    0.175880] usbcore: registered new device driver usb
[    0.176589] omap_i2c 44e0b000.i2c: could not find pctldev for node /pinmux@44e10800/pinmux_i2c0_pins, deferring probe
[    0.176613] platform 44e0b000.i2c: Driver omap_i2c requests probe deferral
[    0.176783] media: Linux media interface: v0.10
[    0.176918] Linux video capture interface: v2.00
[    0.177122] pps_core: LinuxPPS API ver. 1 registered
[    0.177130] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    0.177232] PTP clock support registered
[    0.179205] Switched to clocksource timer1
[    0.193608] NET: Registered protocol family 2
[    0.194125] TCP established hash table entries: 4096 (order: 3, 32768 bytes)
[    0.194195] TCP bind hash table entries: 4096 (order: 2, 16384 bytes)
[    0.194233] TCP: Hash tables configured (established 4096 bind 4096)
[    0.194289] TCP: reno registered
[    0.194302] UDP hash table entries: 256 (order: 0, 4096 bytes)
[    0.194317] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
[    0.194473] NET: Registered protocol family 1
[    0.194793] RPC: Registered named UNIX socket transport module.
[    0.194803] RPC: Registered udp transport module.
[    0.194808] RPC: Registered tcp transport module.
[    0.194813] RPC: Registered tcp NFSv4.1 backchannel transport module.
[    0.195533] NetWinder Floating Point Emulator V0.97 (double precision)
[    0.196004] PM: Loading am335x-pm-firmware.bin
[    0.309587] VFS: Disk quotas dquot_6.5.2
[    0.309653] Dquot-cache hash table entries: 1024 (order 0, 4096 bytes)
[    0.310146] NFS: Registering the id_resolver key type
[    0.310221] Key type id_resolver registered
[    0.310228] Key type id_legacy registered
[    0.310260] jffs2: version 2.2. (NAND) (SUMMARY)  �© 2001-2006 Red Hat, Inc.
[    0.310411] msgmni has been set to 991
[    0.311646] NET: Registered protocol family 38
[    0.311680] io scheduler noop registered
[    0.311687] io scheduler deadline registered
[    0.311706] io scheduler cfq registered (default)
[    0.313239] pinctrl-single 44e10800.pinmux: 142 pins at pa f9e10800 size 568
[    0.317114] platform 4830e000.lcdc: Driver da8xx_lcdc requests probe deferral
[    0.318358] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
[    0.320569] 44e09000.serial: ttyO0 at MMIO 0x44e09000 (irq = 88, base_baud = 3000000) is a OMAP UART0
[    0.911468] console [ttyO0] enabled
[    0.916215] omap_rng 48310000.rng: OMAP Random Number Generator ver. 20
[    0.930860] brd: module loaded
[    0.938038] loop: module loaded
[    0.943888] mtdoops: mtd device (mtddev=name/number) must be supplied
[    0.953343] usbcore: registered new interface driver asix
[    0.959174] usbcore: registered new interface driver ax88179_178a
[    0.965710] usbcore: registered new interface driver cdc_ether
[    0.971978] usbcore: registered new interface driver r815x
[    0.977884] usbcore: registered new interface driver smsc95xx
[    0.984039] usbcore: registered new interface driver net1080
[    0.990125] usbcore: registered new interface driver cdc_subset
[    0.996473] usbcore: registered new interface driver zaurus
[    1.002496] usbcore: registered new interface driver cdc_ncm
[    1.008820] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[    1.015699] ehci-pci: EHCI PCI platform driver
[    1.020532] ehci-omap: OMAP-EHCI Host Controller driver
[    1.026672] usbcore: registered new interface driver cdc_wdm
[    1.032794] usbcore: registered new interface driver usb-storage
[    1.039915] mousedev: PS/2 mouse device common for all mice
[    1.047932] omap_rtc 44e3e000.rtc: rtc core: registered 44e3e000.rtc as rtc0
[    1.056004] i2c /dev entries driver
[    1.060133] Driver for 1-wire Dallas network protocol.
[    1.067365] omap_wdt: OMAP Watchdog Timer Rev 0x01: initial timeout 60 sec
[    1.076034] edma-dma-engine edma-dma-engine.0: allocated channel for 0:25
[    1.083289] edma-dma-engine edma-dma-engine.0: allocated channel for 0:24
[    1.129513] edma-dma-engine edma-dma-engine.0: allocated channel for 0:3
[    1.136556] edma-dma-engine edma-dma-engine.0: allocated channel for 0:2
[    1.181121] ledtrig-cpu: registered to indicate activity on CPUs
[    1.187704] edma-dma-engine edma-dma-engine.0: allocated channel for 0:36
[    1.194986] omap-sham 53100000.sham: hw accel on OMAP rev 4.3
[    1.202013] omap-aes 53500000.aes: OMAP AES hw accel rev: 3.2
[    1.208072] edma-dma-engine edma-dma-engine.0: allocated channel for 0:5
[    1.215211] edma-dma-engine edma-dma-engine.0: allocated channel for 0:6
[    1.223400] usbcore: registered new interface driver usbhid
[    1.229291] usbhid: USB HID core driver
[    1.235275] oprofile: no performance counters
[    1.240302] oprofile: using timer interrupt.
[    1.244824] mmc0: host does not support reading read-only switch. assuming write-enable.
[    1.253595] TCP: cubic registered
[    1.257071] Initializing XFRM netlink socket
[    1.261614] NET: Registered protocol family 17
[    1.266353] mmc0: new high speed SDHC card at address 0002
[    1.272164] NET: Registered protocol family 15
[    1.276861] 8021q: 802.1Q VLAN Support v1.8
[    1.281756] mmcblk0: mmc0:0002 SD4GB 3.66 GiB 
[    1.287178] Key type dns_resolver registered
[    1.291941]  mmcblk0: p1 p2
[    1.295710] cpu cpu0: cpu0 regulator not ready, retry
[    1.301403] platform cpufreq-cpu0.0: Driver cpufreq-cpu0 requests probe deferral
[    1.309931] ThumbEE CPU extension supported.
[    1.321714] DCDC1: at 1500 mV 
[    1.328825] vdd_mpu: 925 <--> 1375 mV at 1325 mV 
[    1.334613] vdd_core: 925 <--> 1150 mV at 1125 mV 
[    1.340480] LDO1: at 1800 mV 
[    1.344376] LDO2: at 3300 mV 
[    1.348795] LDO3: 1800 mV 
[    1.352435] LDO4: at 3300 mV 
[    1.356141] tps65217 0-0024: TPS65217 ID 0xe version 1.2
[    1.481280] tda998x 0-0070: found TDA19988
[    1.485969] omap_i2c 44e0b000.i2c: bus 0 rev0.11 at 400 kHz
[    1.554300] Console: switching to colour frame buffer device 160x45
[    1.629236] davinci_mdio 4a101000.mdio: davinci mdio revision 1.6
[    1.635654] davinci_mdio 4a101000.mdio: detected phy mask fffffffe
[    1.642766] libphy: 4a101000.mdio: probed
[    1.646981] davinci_mdio 4a101000.mdio: phy[0]: device 4a101000.mdio:00, driver SMSC LAN8710/LAN8720
[    1.657175] Detected MACID = c8:a0:30:b3:d5:d7
[    1.663380] omap_rtc 44e3e000.rtc: setting system clock to 2000-01-01 00:00:00 UTC (946684800)
[    1.687525] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)
[    1.696144] VFS: Mounted root (ext4 filesystem) readonly on device 179:2.
[    1.704175] devtmpfs: mounted
[    1.707673] Freeing unused kernel memory: 344K (c075d000 - c07b3000)
[    1.772380] mmc1: BKOPS_EN bit is not set
[    1.778991] mmc1: new high speed MMC card at address 0001
[    1.785724] mmcblk1: mmc1:0001 MMC02G 1.78 GiB 
[    1.790656] mmcblk1boot0: mmc1:0001 MMC02G partition 1 1.00 MiB
[    1.797503] mmcblk1boot1: mmc1:0001 MMC02G partition 2 1.00 MiB
[    1.806323]  mmcblk1: p1 p2 p3 p4
[    1.813577]  mmcblk1boot1: unknown partition table
[    1.821467]  mmcblk1boot0: unknown partition table
INIT: version 2.88 booting
Starting udev
[    2.180836] udevd[804]: starting version 182
[    2.329533] PM: CM3 Firmware Version = 0x186
[    2.915756] EXT4-fs (mmcblk0p2): re-mounted. Opts: data=ordered
[    2.963924] musb-hdrc musb-hdrc.0.auto: Enabled SW babble control
Starting Bootlog daemon: [    3.017921] musb-hdrc musb-hdrc.0.auto: MUSB HDRC host driver
[    3.079704] musb-hdrc musb-hdrc.0.auto: new USB bus registered, assigned bus number 1
bootlogd: cannot allocate pseudo tty: No such file or directory
bootlogd.
[    3.141570] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[    3.148712] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    3.156345] usb usb1: Product: MUSB HDRC host driver
[    3.161569] usb usb1: Manufacturer: Linux 3.12.10 musb-hcd
[    3.167322] usb usb1: SerialNumber: musb-hdrc.0.auto
[    3.346645] hub 1-0:1.0: USB hub found
[    3.351485] hub 1-0:1.0: 1 port detected
[    3.361467] musb-hdrc musb-hdrc.1.auto: Enabled SW babble control
[    3.369136] musb-hdrc musb-hdrc.1.auto: MUSB HDRC host driver
[    3.388268] musb-hdrc musb-hdrc.1.auto: new USB bus registered, assigned bus number 2
[    3.397597] usb usb2: New USB device found, idVendor=1d6b, idProduct=0002
[    3.404779] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    3.412372] usb usb2: Product: MUSB HDRC host driver
[    3.417586] usb usb2: Manufacturer: Linux 3.12.10 musb-hcd
[    3.423350] usb usb2: SerialNumber: musb-hdrc.1.auto
[    3.440823] hub 2-0:1.0: USB hub found
[    3.447991] hub 2-0:1.0: 1 port detected
ALSA: Restoring mixer settings...
Configuring network interfaces... /usr/sbin/alsactl: load_state:1729: No soundcards found...
[    3.856718] net eth0: initializing cpsw version 1.12 (0)
[    3.864460] net eth0: phy found : id is : 0x7c0f1
[    3.875165] 8021q: adding VLAN 0 to HW filter on device eth0
udhcpc (v1.21.1) started
[    3.899430] usb 2-1: new low-speed USB device number 2 using musb-hdrc
Sending discover...
[    3.960404] dsps_interrupt 401: CAUTION: musb: Babble Interrupt Occurred
Sending discover...
Sending discover...
No lease, failing
Starting rpcbind daemon...rpcbind: cannot create socket for udp6
rpcbind: cannot create socket for tcp6
done.
Sat Apr  5 02:34:00 UTC 2014
INIT: Entering runlevel: 5
Starting system message bus: dbus.
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
Starting Linux NFC daemon
Starting qtdemo
Stopping Bootlog daemon: bootlogd.

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

beaglebone login: 

Experimente selecionar os diversos demos disponíveis para se ter uma ideia do que é possível ser feito com o Qt Embedded.

O que vem por aí

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

Saiba mais

Embedded Linux Build Systems

Cozinhando com o Yocto Project

Desvendando Yocto Project – Primeiros passos

Beaglebone Black + Qt Embedded + Yocto

Beaglebone Black + Qt Embedded + Yocto – parte 2
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
27 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Ivan Braga
Ivan Braga
08/08/2014 14:30

Boa tarde.

Será que alguém pode me dá a dica de como resolver este problema.
Sempre que sigo as dicas postadas aqui pelo Diego, recebo sempre estes mesmos erros e processo se encerra.

Tentando entender o que está acontecendo, uma das coisas que vi, foi que alguns destes links estão “quebrados”, digo quebrados pois por exemplo:

O QT 4.8.5 já não está mais disponível, acredito por ter sido substituído pelo QT 4.8.6 já que foram feitas muitas correções.

Abaixo segue um link ctrl-c ctrl-v do que sempre recebo.

https://pastebin.com/jPrrrPuL

Desde já agradeço.

Diego Sueiro
Diego Sueiro
Reply to  Ivan Braga
10/08/2014 08:23

Olá Ivan,

Obrigado por reportar esse problema.

O download do Qt 4.8.5 foi movido de lugar.
O novo caminho agora é:
https://download.qt-project.org/archive/qt/4.8/4.8.5/

Você terá que corrigir a receita do Yocto para ele buscar no novo caminho.
Para isso edite o arquivo: meta/recipes-qt/qt4/qt4-4.8.5.inc
Na variável “SRC_URI” substitua o texto “official_releases” por “archive”.

Vou verificar já existe um patch para consertar isso no repositório do Yocto, caso contrário mandarei a correção.

Abraços.

Ivan Braga
Ivan Braga
Reply to  Diego Sueiro
10/08/2014 16:37

Olá Diego, Obrigado por responder a minha dúvida. Depois de mais algumas tentativas, consegui compilar. Porem tenho outro problema. Sempre que rodo algum dos exemplos desta tela do QT que abre na inicialização, alguns segundos depois após uns cliques do mouse a tela congela, e só reiniciando. Alguma dica? Desculpe se as perguntas são muito óbvias, mais é que no mundo bare-metal onde tenho intimidade, não tenho estas dores de cabeça. É tudo na unha. ======================================================= Desculpe pelo OFF-TOPIC, procurei aqui no site o lugar correto para sugestões e não encontrei. Algum tempo atrás, tive um cliente que queria desenvolver… Leia mais »

Diego Sueiro
Diego Sueiro
Reply to  Ivan Braga
10/08/2014 20:42

Ivan, A melhor maneira de sabermos o que está acontecendo é verificar se o demo do Qt está logando mensagens de erro na console. Para isso você terá que conectar um cabo serial na BBB. Aqui você encontra como fazer essa conexão: https://sergioprado.org/acessando-a-console-serial-na-beaglebone-black/ Depois de estar logado na serial (usuário root sem senha) mate a aplicação demo do Qt com o comando: pkill qtdemoE . Reinicie a aplicação com o comando: qtdemoE -qws Informe quais as mensagens que são mostradas quando você tenta abrir alguns dos demos. Em relação ao NuttX. Eu nunca usei. Sugiro que você use a seção… Leia mais »

Gustavo Henrique
Gustavo Henrique
09/05/2014 09:15

Bom dia Diego,

Estava pesquisando sobre conexões SSH utilizando o Yocto e
pelo pouco que vi deve-se adicionar algo (IMAGE_INSTALL += “ppp
openssh”) na hora de gerar a imagem (comando bitbake), é correto isso?

Eu quero a conexão SSH para instalar um VNC no Yocto de dessa forma eu acessaria a BBB pelo VNC (Eu não tenho um monitor HDMI)

Isso era uma facilidade do Angstrom, pois era só espetar o USB e conectar com o Putty SSH no ip 192.168.7.2

Você conhece algum outro jeito de fazer isso?

Diego Sueiro
Diego Sueiro
Reply to  Gustavo Henrique
09/05/2014 14:30

Olá Gustavo. Boas perguntas. Vamos por partes. Para adicionar suporte a ssh na imagem você deve adicionar a linha abaixo no arquivo conf/local.conf: IMAGE_FEATURES += ” ssh-server-openssh ” Para usar o Qt embedded com VNC você terá que adicionar na imagem o pluging que dá suporte ao VNC. Para isso adicione a linha abaixo no arquivo conf/local.conf (não tenho certeza se irá funcionar pois nunca fiz isso): IMAGE_INSTALL_append = ” qt4-embedded-plugin-gfxdriver-gfxvnc” Seguem uma referência sobre qt embedded com vnc: https://qt-project.org/doc/qt-4.8/qt-embedded-vnc.html Para que a interface USB OTG funcione como gadget ethernet basta adicionar a linha abaixo no arquivo conf/local.conf: IMAGE_INSTALL_append =… Leia mais »

Gustavo Henrique
Gustavo Henrique
Reply to  Diego Sueiro
15/05/2014 00:39

Diego, Desculpe a demora, consegui gerar a nova imagem com esses adicionais, mas só vou conseguir testar a conexão SSH e o VNC no sábado provavelmente, apenas liguei no HDMI a BBB e funcionou. Também acrescentei a camada do Qt 5 que me passou pelo email, não sei se fiz o modo correto, mas aparentemente funcionou ou não interferiu em nada na geração da imagem: Adicionei a camada meta-qt5 (https://github.com/meta-qt5/meta-qt5) e adicionei tambem a seguinte linha no arquivo BBLAYERS: ${TOPDIR}/../poky-dora/meta-qt5 Não sei se algum outro procedimento deve ser feito ou se é apenas isso. Algumas considerações, o gadget-init eu acho… Leia mais »

Diego Sueiro
Diego Sueiro
Reply to  Gustavo Henrique
21/05/2014 06:36

Gustavo,

Para ser acesso a console serial da placa você deve usar o minicom (no host) e conectar uma cabo USB-Serial (TTL) na BBB:
https://elinux.org/Beagleboard:BeagleBone_Black_Accessories#Serial_Debug_Cables

Sobre o gadget-init dê o comando “lsmod” na placa e me passe o resultado. Mas olhando a receita dele no Yocto me parece que o suporte a subida automática só está presente com o systemd. Dê uma olhada no script q-ether-load.sh e tente rodá-lo na mão para ver se funciona:
https://git.yoctoproject.org/cgit/cgit.cgi/meta-ti/tree/recipes-ti/beagleboard/gadget-init.bb?h=dora
https://git.yoctoproject.org/cgit/cgit.cgi/meta-ti/tree/recipes-ti/beagleboard/gadget-init?h=dora
https://git.yoctoproject.org/cgit/cgit.cgi/meta-ti/tree/recipes-ti/beagleboard/gadget-init/g-ether-load.sh?h=dora

Eduardo C. Scherrer
Eduardo C. Scherrer
10/04/2014 23:19

Boa noite Diego,

Segui todos os passos do post, mas no ultimo comando onde você diz que é importante por conta do uso do mouse, ocorreu um erro.
A pasta /media/rootfs/etc/modules não existe.
Não teria que descompactar mais algum arquivo no sistema de arquivos?

Abraço

Eduardo Scherrer

Diego Sueiro
Diego Sueiro
Reply to  Eduardo C. Scherrer
11/04/2014 07:32

Eduardo,

Obrigado pelo aviso.

Fui verificar o comando e estava dando permissão negada.
Atualizei a lista de comandos. Veja se está funcionando e não esqueça de verificar o ponto de montagem do cartão.

Abraços

Eduardo C. Scherrer
Eduardo C. Scherrer
Reply to  Diego Sueiro
11/04/2014 21:55

Boa noite Diego,

Segui as suas alterações, mas ainda faltaram alguns arquivos a serem copiados. Segui os passos do tutorial do Henrique e foi.
Faltou copiar o zImage, uEvent.txt o .dtb.

Outra coisa que fiz diferente foi o local do arquivo local.conf.
Como eu não tinha o “kiosk” instalado, o caminho seguido foi: “yocto/build-dora/conf/local.conf”.

Daí funcionou.

Agora apareceu a demonstração do Qt.

Abraço.

Diego Sueiro
Diego Sueiro
Reply to  Eduardo C. Scherrer
12/04/2014 07:05

Olá Ricardo, Na verdade estava errado no tutorial e já corrigi. O caminho correto do local.conf é esse que você utilizou: “yocto/build-dora/conf/local.conf”. Sobre a cópia dos arquivos zImage, uEnv.txt e o .dtb, é opcional. O Henrique mudou os variáveis de do boot quando inseriu o arquivo uEnv.txt na partição FAT do cartão. O uso desse uEnv.txt faz-se necessário se você já possui algum sistema operacional instalado no eMMC da BBB e não quer ficar segurando o botão “Boot Switch” durante os primeiros segundo de power-up da placa. Obrigado por reportar as falhas no tutorial. Na próxima semana publicaremos a segunda… Leia mais »

Home » Software » Interface Gráfica » Beaglebone Black + Qt Embedded + Yocto – parte 1

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: