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:
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
Cozinhando com o Yocto Project
Desvendando Yocto Project – Primeiros passos