BeagleBone Black + Yocto

beaglebone black com yocto 7Masters

Muito tem sido comentado sobre plataformas de desenvolvimento suportadas por grandes comunidades, tal como a BeagleBone Black e a Raspberry Pi. Ambas têm atingido um grande público em específico, aquele ávido por conhecimento em Linux embarcado. Muito bem! Aqui começa um tutorial de como criar imagens personalizadas para a placa BeagleBone Black com Yocto Project

O que é a BeagleBone Black?

A BeagleBone Black é o mais novo membro da família BeagleBoard e suas características estão listadas no seu Wiki oficial. Algumas das grandes melhorias dessa placa com relação à sua versão anterior, “white”, são:

  • Processador: TI Sitara AM3359 de 1GHz;
  • Memória DRAM: DDR3L 400MHz de 512 MB;
  • Memória Flash: eMMC de 2GB e conector para microSD card.

E onde podemos gravar o nosso querido Linux na placa? Tanto a memória Flash eMMC quanto um microSD card podem receber todas as imagens necessárias para compor o sistema Linux, as quais, basicamente, são: 

  • Bootloader;
  • Kernel Linux;
  • Sistema de arquivos.

Agora que é conhecido o que gravar na placa e os dispositivos de armazenamento oferecidos por ela, como é possível gerar tais imagens? Pode-se utilizar tanto imagens pré-compiladas disponibilizadas no site oficial, ou criar imagens customizadas a partir das técnicas apresentadas no artigo Embedded Linux Build Systems, de Diego Sueiro.

Neste artigo será utilizado um microSD card como dispositivo de armazenamento e o Yocto Project como build system.

O que é Yocto Project?

O Yocto Project é um projeto open-source colaborativo que oferece templates, ferramentas e métodos para auxiliar na criação de sistemas baseados em Linux para sistemas embarcados, independente da arquitetura de hardware utilizada. O Yocto inclui em sua arquitetura o build system Poky, que, por sua vez, é derivado do build system OpenEmbedded.

O OpenEmbedded é composto de dois elementos principais, como mostrado abaixo: BitBake e Metadata. BitBake é uma ferramenta de build muito flexível mantida pelos projetos Yocto e OpenEmbedded, comandada pelas instruções presentes no Metadata e com a finalidade de gerar, entre outros, as imagens finais do sistema de arquivos, kernel, bootloader e SDKs.

beaglebone black com yocto
Figura 1: BitBake, ferramenta de build mantida pelos projetos Yocto e OpenEmbedded

Gerando as imagens para a Beaglebone Black com Yocto

Como sistema host foi utilizado um PC com a distribuição Ubuntu 14.04 64-bits instalada. Algumas dependências devem ser resolvidas no sistema antes de prosseguir. Para isso, execute o seguinte comando:

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

Para a geração das imagens da placa BeagleBone Black é necessário utilizar seus respectivos metadados, tais como receitas, classes, tarefas e configuração.

Precisa-se, agora, realizar o download de todos esses itens. Neste artigo é utilizada a última versão estável do Yocto, na versão 2.2 e nomeada Morty. Para isso, siga os seguintes comandos:

$ mkdir -p ~/beaglebone-black/yocto/sources
$ mkdir -p ~/beaglebone-black/yocto/builds
$ cd ~/beaglebone-black/yocto/sources
$ git clone -b morty git://git.yoctoproject.org/poky.git poky-morty
$ cd ~/beaglebone-black/yocto/
$ source sources/poky-morty/oe-init-build-env builds/build-bbb-morty

É criado o diretório build-bbb-morty, contendo o sub-diretório conf, onde são armazenados os arquivos de configuração do projeto local.conf e bblayers.conf. Os dois arquivos precisam ser alterados.

Arquivo local.conf

A linha onde a variável MACHINE é configurada precisa ser substituída pelo seguinte conteúdo:

MACHINE ?= "beaglebone"

Adicione o seguinte conteúdo:

DL_DIR ?= "${TOPDIR}/../dl"
IMAGE_INSTALL_append = " kernel-modules kernel-devicetree"

Arquivo bblayers.conf

Não é necessário acrescentar layers ao build.

Build

Neste ponto é necessário selecionar uma imagem para ser gerada para a BeagleBone Black. É só retornar ao diretório build-bbb-morty e executar o BitBake com os seguintes comandos:

$ cd ~/beaglebone-black/yocto/builds/build-bbb-morty
$ bitbake core-image-minimal

Configuração de build utilizada:

Build Configuration:
BB_VERSION        = "1.32.0"
BUILD_SYS         = "x86_64-linux"
NATIVELSBSTRING   = "universal"
TARGET_SYS        = "arm-poky-linux-gnueabi"
MACHINE           = "beaglebone"
DISTRO            = "poky"
DISTRO_VERSION    = "2.2"
TUNE_FEATURES     = "arm armv7a vfp  neon        callconvention-hard        cortexa8"
TARGET_FPU        = "hard"
meta              
meta-poky         
meta-yocto-bsp    = "morty:6c9f6b5f70ab3ee194b2c2c6f3bd462c994848fa"

Esse comando cria a menor e mais simples imagem para a placa. Depois de algum tempo, são geradas as imagens em ~/beaglebone-black/yocto/builds/build-bbb-morty/tmp/deploy/images/beaglebone, as quais devem ser gravadas no microSD card. Tais imagens são: 

  • core-image-minimal-beaglebone.tar.bz2 (rootfs – sistema de arquivos);
  • MLO (bootloader de primeiro estágio);
  • u-boot.img (bootloader de segundo estágio – U-Boot);
  • zImage (kernel) e;
  • zImage-am335x-boneblack.dtb (Device Tree Binary).

Gravação das imagens no microSD Card

Para a gravação dessas 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:

$ mkdir -p ~/beaglebone-black/create-sdcard
$ cd ~/beaglebone-black/create-sdcard
$ git clone https://github.com/henriqueprossi/beaglebone-black.git

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 ~/beaglebone-black/create-sdcard/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, as imagens geradas anteriormente são copiadas da seguinte forma:

$ cd ~/beaglebone-black/yocto/builds/build-bbb-morty/tmp/deploy/images/beaglebone
$ mkdir /media/boot/dtbs
$ cp MLO u-boot.img zImage /media/boot
$ cp zImage-am335x-boneblack.dtb /media/boot/dtbs/am335x-boneblack.dtb
$ sudo tar xvf core-image-minimal-beaglebone.tar.bz2 -C /media/rootfs
$ sync

Pronto! Agora é conectar o microSD card na Beaglebone Black e curtir! A porta serial de debug da placa é usada para o console do sistema operacional  e o conteúdo de sua saída é mostrado abaixo. Pode ser montado um cabo serial como mostrado no tutorial BeagleBone Black Serial.

U-Boot SPL 2016.03 (Nov 06 2016 - 11:59:37)
Trying to boot from MMC
reading args
spl_load_image_fat_os: error reading image args, err - -1
reading u-boot.img
reading u-boot.img


U-Boot 2016.03 (Nov 06 2016 - 11:59:37 -0200)

       Watchdog enabled
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:   <ethaddr> not set. Validating first E-fuse MAC
cpsw, usb_ether
Press SPACE to abort autoboot in 2 seconds
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
switch to partitions #0, OK
mmc0 is current device
SD/MMC found on device 0
reading boot.scr
** Unable to read file boot.scr **
reading uEnv.txt
** Unable to read file uEnv.txt **
5609008 bytes read in 391 ms (13.7 MiB/s)
34185 bytes read in 96 ms (347.7 KiB/s)
Kernel image @ 0x82000000 [ 0x000000 - 0x559630 ]
## Flattened Device Tree blob at 88000000
   Booting using the fdt blob at 0x88000000
   Loading Device Tree to 8fff4000, end 8ffff588 ... OK

Starting kernel ...

Booting Linux on physical CPU 0x0
Linux version 4.8.3-yocto-standard (henrique@henrique-550P5C-550P7C) (gcc version 6.2.0 (GCC) ) #1 PREEMPT Sun Nov 6 21:21:52 BRST 2016
CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c5387d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
OF: fdt:Machine model: TI AM335x BeagleBone Black
cma: Reserved 16 MiB at 0x9e800000
Memory policy: Data cache writeback
CPU: All CPU(s) started in SVC mode.
AM335X ES2.1 (sgx neon )
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 129664
Kernel command line: console=ttyO0,115200n8 root=PARTUUID=ce3fde21-02 rw rootfstype=ext4 rootwait
PID hash table entries: 2048 (order: 1, 8192 bytes)
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)
Memory: 486884K/523264K available (8192K kernel code, 749K rwdata, 2664K rodata, 1024K init, 635K bss, 19996K reserved, 16384K cma-reserved, 0K highmem)
Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)
    vmalloc : 0xe0800000 - 0xff800000   ( 496 MB)
    lowmem  : 0xc0000000 - 0xe0000000   ( 512 MB)
    pkmap   : 0xbfe00000 - 0xc0000000   (   2 MB)
    modules : 0xbf000000 - 0xbfe00000   (  14 MB)
      .text : 0xc0008000 - 0xc0900000   (9184 kB)
      .init : 0xc0d00000 - 0xc0e00000   (1024 kB)
      .data : 0xc0e00000 - 0xc0ebb4d4   ( 750 kB)
       .bss : 0xc0ebd000 - 0xc0f5bcb0   ( 636 kB)
SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
Preemptible hierarchical RCU implementation.
        Build-time adjustment of leaf fanout to 32.
NR_IRQS:16 nr_irqs:16 16
IRQ: Found an INTC at 0xfa200000 (revision 5.0) with 128 interrupts
OMAP clockevent source: timer2 at 24000000 Hz
sched_clock: 32 bits at 24MHz, resolution 41ns, wraps every 89478484971ns
clocksource: timer1: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 79635851949 ns
OMAP clocksource: timer1 at 24000000 Hz
clocksource_probe: no matching clocksources found
Console: colour dummy device 80x30
Calibrating delay loop... 996.14 BogoMIPS (lpj=4980736)
pid_max: default: 32768 minimum: 301
Security Framework initialized
Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
CPU: Testing write buffer coherency: ok
ftrace: allocating 28294 entries in 83 pages
Setting up static identity map for 0x80100000 - 0x80100058
devtmpfs: initialized
VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 3
clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
xor: measuring software checksum speed
   arm4regs  :  1218.800 MB/sec
   8regs     :   902.800 MB/sec
   32regs    :  1172.400 MB/sec
xor: using function: arm4regs (1218.800 MB/sec)
pinctrl core: initialized pinctrl subsystem
NET: Registered protocol family 16
DMA: preallocated 256 KiB pool for atomic coherent allocations
omap_hwmod: debugss: _wait_target_disable failed
cpuidle: using governor ladder
cpuidle: using governor menu
OMAP GPIO hardware version 0.1
hw-breakpoint: debug architecture 0x4 unsupported.
raid6: int32x1  gen()   208 MB/s
raid6: int32x1  xor()   121 MB/s
raid6: int32x2  gen()   225 MB/s
raid6: int32x2  xor()   150 MB/s
raid6: int32x4  gen()   208 MB/s
raid6: int32x4  xor()   131 MB/s
raid6: int32x8  gen()   174 MB/s
raid6: int32x8  xor()   117 MB/s
raid6: using algorithm int32x2 gen() 225 MB/s
raid6: .... xor() 150 MB/s, rmw enabled
raid6: using intx1 recovery algorithm
edma 49000000.edma: TI EDMA DMA engine driver
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
omap_i2c 44e0b000.i2c: could not find pctldev for node /ocp/l4_wkup@44c00000/scm@210000/pinmux@800/pinmux_i2c0_pins, deferring probe
omap_i2c 4819c000.i2c: could not find pctldev for node /ocp/l4_wkup@44c00000/scm@210000/pinmux@800/pinmux_i2c2_pins, deferring probe
clocksource: Switched to clocksource timer1
NET: Registered protocol family 2
TCP established hash table entries: 4096 (order: 2, 16384 bytes)
TCP bind hash table entries: 4096 (order: 2, 16384 bytes)
TCP: Hash tables configured (established 4096 bind 4096)
UDP hash table entries: 256 (order: 0, 4096 bytes)
UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
NET: Registered protocol family 1
RPC: Registered named UNIX socket transport module.
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
hw perfevents: enabled with armv7_cortex_a8 PMU driver, 5 counters available
futex hash table entries: 256 (order: -1, 3072 bytes)
workingset: timestamp_bits=14 max_order=17 bucket_order=3
NFS: Registering the id_resolver key type
Key type id_resolver registered
Key type id_legacy registered
Block layer SCSI generic (bsg) driver version 0.4 loaded (major 251)
io scheduler noop registered
io scheduler deadline registered
io scheduler cfq registered (default)
pinctrl-single 44e10800.pinmux: 142 pins at pa f9e10800 size 568
omap_uart 44e09000.serial: no wakeirq for uart0
44e09000.serial: ttyO0 at MMIO 0x44e09000 (irq = 158, base_baud = 3000000) is a OMAP UART0
console [ttyO0] enabled

Initialized drm 1.1.0 20060810 random: fast init done brd: module loaded mtdoops: mtd device (mtddev=name/number) must be supplied libphy: Fixed MDIO Bus: probed davinci_mdio 4a101000.mdio: davinci mdio revision 1.6 davinci_mdio 4a101000.mdio: detected phy mask fffffffe libphy: 4a101000.mdio: probed davinci_mdio 4a101000.mdio: phy[0]: device 4a101000.mdio:00, driver SMSC LAN8710/LAN8720 cpsw 4a100000.ethernet: Detected MACID = 1c:ba:8c:e5:41:46 usbcore: registered new interface driver kaweth pegasus: v0.9.3 (2013/04/25), Pegasus/Pegasus II USB Ethernet driver usbcore: registered new interface driver pegasus usbcore: registered new interface driver rtl8150 usbcore: registered new interface driver asix usbcore: registered new interface driver ax88179_178a usbcore: registered new interface driver cdc_ether usbcore: registered new interface driver dm9601 usbcore: registered new interface driver smsc75xx usbcore: registered new interface driver smsc95xx usbcore: registered new interface driver net1080 usbcore: registered new interface driver cdc_subset usbcore: registered new interface driver zaurus usbcore: registered new interface driver MOSCHIP usb-ethernet driver usbcore: registered new interface driver int51x1 usbcore: registered new interface driver cdc_ncm ehci_hcd: USB 2.0 ‘Enhanced’ Host Controller (EHCI) Driver ehci-omap: OMAP-EHCI Host Controller driver usbcore: registered new interface driver usb-storage 47401300.usb-phy supply vcc not found, using dummy regulator musb-hdrc musb-hdrc.0.auto: Failed to request rx1. musb-hdrc musb-hdrc.0.auto: musb_init_controller failed with status -517 47401b00.usb-phy supply vcc not found, using dummy regulator musb-hdrc musb-hdrc.1.auto: Failed to request rx1. musb-hdrc musb-hdrc.1.auto: musb_init_controller failed with status -517 mousedev: PS/2 mouse device common for all mice omap_rtc 44e3e000.rtc: rtc core: registered 44e3e000.rtc as rtc0 i2c /dev entries driver omap_wdt: OMAP Watchdog Timer Rev 0x01: initial timeout 60 sec omap_hsmmc 48060000.mmc: Got CD GPIO mmc0: host does not support reading read-only switch, assuming write-enable mmc0: new high speed SDHC card at address 0007 usbcore: registered new interface driver usbhid usbhid: USB HID core driver oprofile: using arm/armv7 u32 classifier Actions configured NET: Registered protocol family 10 sit: IPv6, IPv4 and MPLS over IPv4 tunneling driver NET: Registered protocol family 17 Key type dns_resolver registered omap_voltage_late_init: Voltage driver support not added ThumbEE CPU extension supported. Btrfs loaded, crc32c=crc32c-generic mmcblk0: mmc0:0007 SD8GB 7.21 GiB tps65217 0-0024: TPS65217 ID 0xe version 1.2 mmcblk0: p1 p2 tda998x 0-0070: found TDA19988 tilcdc 4830e000.lcdc: bound 0-0070 (ops tda998x_ops)

Supports vblank timestamp caching Rev 2 (21.10.2013).

No driver support for vblank timestamp query. tilcdc 4830e000.lcdc: No connectors reported connected with modes

Cannot find any crtc or sizes – going 1024×768 Console: switching to colour frame buffer device 128×48 tilcdc 4830e000.lcdc: fb0: frame buffer device

Initialized tilcdc 1.0.0 20121205 on minor 0 omap_i2c 44e0b000.i2c: bus 0 rev0.11 at 400 kHz omap_i2c 4819c000.i2c: bus 2 rev0.11 at 100 kHz musb-hdrc musb-hdrc.1.auto: MUSB HDRC host driver musb-hdrc musb-hdrc.1.auto: new USB bus registered, assigned bus number 1 hub 1-0:1.0: USB hub found hub 1-0:1.0: 1 port detected console [netcon0] enabled netconsole: network logging started omap_rtc 44e3e000.rtc: setting system clock to 2000-01-01 00:00:00 UTC (946684800) mmc1: new high speed MMC card at address 0001 mmcblk1: mmc1:0001 MMC04G 3.66 GiB mmcblk1boot0: mmc1:0001 MMC04G partition 1 1.00 MiB mmcblk1boot1: mmc1:0001 MMC04G partition 2 1.00 MiB mmcblk1: p1 p2 EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null) VFS: Mounted root (ext4 filesystem) on device 179:2. devtmpfs: mounted Freeing unused kernel memory: 1024K (c0d00000 – c0e00000) INIT: version 2.88 booting Starting udev udevd[110]: starting version 3.2 udevd[111]: starting eudev-3.2 omap_rng 48310000.rng: OMAP Random Number Generator ver. 20 EXT4-fs (mmcblk0p2): re-mounted. Opts: data=ordered Populating dev cache Sun Nov 6 23:26:31 UTC 2016 INIT: Entering runlevel: 5 Configuring network interfaces… net eth0: initializing cpsw version 1.12 (0) SMSC LAN8710/LAN8720 4a101000.mdio:00: attached PHY driver [SMSC LAN8710/LAN8720] (mii_bus:phy_addr=4a101000.mdio:00, irq=-1) IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready udhcpc (v1.24.1) started Sending discover… Sending discover… Sending discover… No lease, forking to background done. Starting syslogd/klogd: done Poky (Yocto Project Reference Distro) 2.2 beaglebone /dev/ttyO0 beaglebone login: root root@beaglebone:~# uname -a Linux beaglebone 4.8.3-yocto-standard #1 PREEMPT Sun Nov 6 21:21:52 BRST 2016 armv7l GNU/Linux root@beaglebone:~#

Nos próximos artigos serão adicionados aplicativos e bibliotecas, tal como Qt, ao sistema de arquivos, de forma a customizar a imagem mínima criada. Também tenho utilizado com frequência o Buildroot como build system, mas no momento tenho preferência pelo Yocto. E você? Usa o Yocto em seus projetos?

Para aprender mais

Embedded Linux Build Systems

Cozinhando com o Yocto Project

Desvendando Yocto Project – Primeiros passos

Beaglebone Black + Yocto Daisy (Versão 1.6)

Lançada Nova Versão 1.7 (dizzy) do Yocto Project

Desenvolvendo um Kiosk Interativo para a Beaglebone Black com Yocto – parte 1

Beaglebone Black + Qt Embedded + Yocto – parte 1

Beaglebone Black + Qt5 + Yocto – parte 1

Como criar uma imagem customizada para a BeagleBone Black com Buildroot

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
47 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Rodrigo Machado
Rodrigo Machado
09/01/2016 17:43

Olá Henrique gostaria de saber se você já desenvolveu algo para a beaglebone black utilizando o kinect.

Henrique Persico Rossi
Reply to  Rodrigo Machado
09/01/2016 18:02

Olá Rodrigo!

Nunca trabalhei com o kinect. Parece ser uma implementação muito interessante! 🙂

Fernando França
15/12/2015 14:07

Ótimo artigo Henrique, obrigado por compartilhar esse conhecimento. Venho trabalhando com Linux embarcado profissionalmente há pouco tempo utilizando RPi e Raspbian e me preparando para abandonar o Raspbian para algo mais customizado com o Yocto.

Henrique Persico Rossi
Reply to  Fernando França
19/12/2015 18:19

Muito obrigado Fernando!

Eu acho que está seguindo o caminho correto quando se trata de produto. Também já usei a RPi em projetos e deixa a sua solução mais enxuta e coesa com o que precisa. Se precisar de ajuda, estou à disposição.

Abraços,
Henrique

Gabriel Habib
Gabriel Habib
14/10/2015 19:36

Henrique, gostaria de saber se existe a possibilidade de incluir os drivers do BBView juntamente com Yocto + QT ?

Obrigado!

Henrique Persico Rossi
Reply to  Gabriel Habib
18/10/2015 22:27

Olá Gabriel,

Eu nunca usei essa expansion board, mas teoricamente seria habilitar o seu .dto no arquivo uEnv.txt da partição de boot. Adicione na variável optargs o seguinte conteúdo:

capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN capemgr.enable_partno=BB-VIEW-LCD7-01

Use estes links também como referência:

https://www.element14.com/community/thread/31051/l/how-to-bb-view-on-latest-debian?displayFullThread=true

https://www.element14.com/community/servlet/JiveServlet/downloadBody/65082-102-5-294046/BB%20VIEW%20User%20Manual%20V3.pdf

Abraços

Joe Papst
Joe Papst
02/08/2014 18:25

Boa Noite meu amigo,
Estou com uma duvida de Linux embarcado (beaglebone Black).
Quero fazer um projeto onde meu software tem que ficar rodando no linux.
Então assim que o linux iniciar, logo inicia meu software.
Qual a melhor solução, fazer rodar como programa ou como serviço?
Pois ser meu software der bug e parar como controlo este erro e reinicio o sistema automático para não ficar travado?

Diego Sueiro
Diego Sueiro
Reply to  Joe Papst
03/08/2014 07:20

Olá Joe, Aos “olhos” do kernel, ser um programa ou serviço não há distinções. A inicialização e monitoramento (se está executando ou não) de sua aplicação e deve ser feito pelo sistema de init. Basicamente você pode usar 2 sistemas de init: o sysVinit e o systemd. Ou se estiver usando o Ubuntu será o upstart. Depois de definido qual o sistema de init a ser utilizado você terá que realizar as devidas configurações para que ele inicie, monitore e pare a sua aplicação. Estes três sistemas de inicialização possuem extensas documentações para te auxiliar. Em relação ao travamento da… Leia mais »

Henrique Persico Rossi
Reply to  Joe Papst
03/08/2014 11:23

Bom dia Joe!

As dicas do Diego são muito valiosas. Estude o sistema de init que está utilizando!

Eu geralmente uso System V e Busybox, e crio um script que gerencia a execução da aplicação principal. A ideia é que se a aplicação for encerrada, o próprio script detecta isso e toma a devida ação de acordo com o retorno gerado pela aplicação. Na maioria dos casos a aplicação é simplesmente re-executada. Em outros, um tratamento mais elaborado é necessário.

Abraços,
Henrique

Eduardo C. Scherrer
Eduardo C. Scherrer
08/12/2013 19:17

Muito bom este post. Aqui rodou que é uma beleza.
Estou com o ubuntu 12.04 mas de 32bits. Mesmo assim não mudei nada nos passos do post.

Henrique Persico Rossi
Reply to  Eduardo C. Scherrer
09/12/2013 20:40

Muito obrigado Eduardo! Ainda bem que as instruções deram certo. Já começamos a escrever sobre a BeagleBone Black, e está sendo um post um atrás do outro!!

Abraços

Cássio Volcan
Cássio Volcan
22/11/2013 10:21

Parabéns pelo tutorial Henrique. Eu trabalho com Yocto há algum tempo e realmente é uma ferramenta bem interessante. Tenho uma Beagle Bone Black rodando ROS (Robot Operating System) e outros placas (Também com processador Arm, porém com bem menos memória e “poder” de processamento) da minha empresa rodando QT e Proview, por exemplo. Industrialmente é imprescindível o uso de uma distribuição que te dê acesso as bibliotecas necessárias à tua aplicação, porém SÓ as necessárias. O Yocto Project te trás todos esses benefícios com uma ampla gama de tutoriais e fóruns de discussão. Caso eu possa vir a tentar ajudar… Leia mais »

Henrique Persico Rossi
Reply to  Cássio Volcan
22/11/2013 17:48

Olá Cássio,

Comecei a trabalhar com o Yocto recentemente e tenho percebido que vale muito a pena saber trabalhar com essa ferramenta poderosa. Também gosto de trabalhar com o Buildroot, que acho relativamente mais fácil.

Agradeço-lhe pela ajuda e havendo uma oportunidade entro em contato contigo!

Abraços e continue acompanhando o Embarcados!!

adelino
adelino
13/11/2013 09:39

Parabéns, Henrique! Excelente post! Recentemente adquiri uma BeagleBone Black, vou testar utilizando o Yocto.

Henrique Persico Rossi
Reply to  adelino
13/11/2013 09:46

Muito obrigado Adelino! Mais um motivo para brincar com a sua BeagleBone Black 🙂
Dá para produzir muitas coisas com ela! Depois mostra os resultados para a gente!

Abraços!

Ronaldo Nunez
10/11/2013 16:48

Ficou muito boa a materia! Parabéns! Aguardamos mais matérial de yocto! Abraço

Henrique Persico Rossi
Reply to  Ronaldo Nunez
10/11/2013 21:20

Muito obrigado Ronaldo! Essa placa é muito bacana para estudos e novos posts virão.

Abraços

Marcelo Anjos
Marcelo Anjos
10/11/2013 10:22

Valeu Henrique muito bom temos poucas informações sobre Youcto.vou testar
Abraços

Henrique Persico Rossi
Reply to  Marcelo Anjos
10/11/2013 10:25

Marcelo,

Aguarde que teremos muito mais posts sobre a BeagleBone Black e Yocto!

Abraços,
Henrique

Os comentários estão desativados.

Home » Beaglebone Black » BeagleBone Black + Yocto

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: