Beaglebone Black + Yocto Daisy (Versão 1.6)

Beaglebone Black com Yocto Project

A nova versão 1.6 (daisy) do Yocto Project foi lançada recentemente e uma das novidades interessantes é que a Beaglebone Black agora é oficialmente suportada pelo projeto.

Sendo assim, não precisamos utilizar a camada de BSP da Texas Instruments (meta-ti) para adicionarmos suporte a Beaglebone Black no Yocto. Porém se você deseja usar a aceleração 3D por hardware do processador AM3359 (presente na BBB) você terá de recorrer a meta-ti.

Desde a versão 3.12 mainline do Kernel Linux a Beaglebone Black é suportada e nesta nova versão do Yocto o Kernel Linux construído é o 3.14, ou seja, uma versão bem recente. Mas existe uma limitação para BBB no mainline Linux Kernel: o suporte às capes não foi integrado ainda. Se você deseja usar as capes em seu projeto terá que usar o BSP da BBB disponibilizado pela meta-beagleboard e a versão do Kernel Linux utilizada é a 3.8. 

Se você é novo no mundo do Yocto sugiro que dê uma lida na seção “O que é o Yocto” no artigo “Beaglebone + Yocto” escrito pelo Henrique Rossi.

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:

Fedora:

openSUSE:

CentOS:

Montando o ambiente de construção

Após instalar os pacotes para o Host, vamos criar os diretórios e baixar os fontes necessários:

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

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

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 adicionamos os módulos e dtb nas imagens que iremos gerar.

Construindo as imagens

Vamos gerar uma imagem mínima sem suporte a interface gráfica (core-image-mininal) com o comando:

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

Vamos construir também uma imagem com suporte a interface gráfica (core-image-sato):

Gravando as imagens

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:

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:

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

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 :

Este último comando é importante, pois sem ele os dispositivos conectados a USB não serão reconhecidos pelo kernel.

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

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

Testando as imagens

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.

A imagem core-image-minimal (sem interface gráfica) possui o seguinte log de boot:

Initialized drm 1.1.0 20060810 brd: module loaded mtdoops: mtd device (mtddev=name/number) must be supplied 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 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 48060000.mmc supply vmmc_aux not found, using dummy regulator 481d8000.mmc supply vmmc_aux not found, using dummy regulator mmc0: host does not support reading read-only switch. assuming write-enable. usbcore: registered new interface driver usbhid usbhid: USB HID core driver oprofile: using arm/armv7 mmc0: new high speed SDHC card at address b368 u32 classifier Actions configured TCP: cubic registered NET: Registered protocol family 10 mmcblk0: mmc0:b368 SD8GB 7.48 GiB mmcblk0: p1 p2 sit: IPv6 over IPv4 tunneling driver NET: Registered protocol family 17 Key type dns_resolver registered ThumbEE CPU extension supported. bio: create slab <bio-1> at 1 Btrfs loaded regulator-dummy: disabling slave hdmi.6: could not get i2c platform hdmi.6: Driver slave requests probe deferral platform 4830e000.lcdc: Driver tilcdc requests probe deferral DCDC1: at 1500 mV vdd_mpu: 925 <–> 1325 mV at 1100 mV vdd_core: 925 <–> 1150 mV at 1100 mV LDO1: at 1800 mV LDO2: at 3300 mV LDO3: 1800 mV LDO4: at 3300 mV tps65217 0-0024: TPS65217 ID 0xe version 1.2 omap_i2c 44e0b000.i2c: bus 0 rev0.11 at 400 kHz tilcdc 4830e000.lcdc: found TDA19988

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 tilcdc 4830e000.lcdc: registered panic notifier

Initialized tilcdc 1.0.0 20121205 on minor 0 console [netcon0] enabled netconsole: network logging started 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 Detected MACID = c8:a0:30:c4:61:4c omap_rtc 44e3e000.rtc: setting system clock to 2000-01-01 00:00:00 UTC (946684800) EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null) VFS: Mounted root (ext4 filesystem) readonly on device 179:2. devtmpfs: mounted Freeing unused kernel memory: 488K (c09c3000 – c0a3d000) mmc1: BKOPS_EN bit is not set mmc1: new high speed MMC card at address 0001 mmcblk1: mmc1:0001 MMC02G 1.78 GiB mmcblk1boot0: mmc1:0001 MMC02G partition 1 1.00 MiB mmcblk1boot1: mmc1:0001 MMC02G partition 2 1.00 MiB mmcblk1: p1 p2 p3 p4 mmcblk1boot1: unknown partition table mmcblk1boot0: unknown partition table INIT: version 2.88 booting Starting udev udevd[78]: starting version 182 random: nonblocking pool is initialized EXT4-fs (mmcblk0p2): re-mounted. Opts: data=ordered Starting Bootlog daemon: bootlogd. Populating dev cache Sun Apr 27 12:24:00 UTC 2014 INIT: Entering runlevel: 5 Configuring network interfaces… net eth0: initializing cpsw version 1.12 (0) net eth0: phy found : id is : 0x7c0f1 libphy: PHY 4a101000.mdio:01 not found net eth0: phy 4a101000.mdio:01 not found on slave 1 IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready udhcpc (v1.22.1) started Sending discover… Sending discover… Sending discover… No lease, failing Starting syslogd/klogd: done Stopping Bootlog daemon: bootlogd. Poky (Yocto Project Reference Distro) 1.6 beaglebone /dev/ttyO0 beaglebone login:

 Para a imagem core-image-sato (com interface gráfica) temos o sequinte log de boot: 

Initialized drm 1.1.0 20060810 brd: module loaded mtdoops: mtd device (mtddev=name/number) must be supplied 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 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 48060000.mmc supply vmmc_aux not found, using dummy regulator 481d8000.mmc supply vmmc_aux not found, using dummy regulator mmc0: host does not support reading read-only switch. assuming write-enable. usbcore: registered new interface driver usbhid usbhid: USB HID core driver oprofile: using arm/armv7 mmc0: new high speed SDHC card at address b368 u32 classifier Actions configured TCP: cubic registered NET: Registered protocol family 10 mmcblk0: mmc0:b368 SD8GB 7.48 GiB mmcblk0: p1 p2 sit: IPv6 over IPv4 tunneling driver NET: Registered protocol family 17 Key type dns_resolver registered ThumbEE CPU extension supported. bio: create slab <bio-1> at 1 Btrfs loaded regulator-dummy: disabling slave hdmi.6: could not get i2c platform hdmi.6: Driver slave requests probe deferral platform 4830e000.lcdc: Driver tilcdc requests probe deferral DCDC1: at 1500 mV vdd_mpu: 925 <–> 1325 mV at 1100 mV vdd_core: 925 <–> 1150 mV at 1100 mV LDO1: at 1800 mV LDO2: at 3300 mV LDO3: 1800 mV LDO4: at 3300 mV tps65217 0-0024: TPS65217 ID 0xe version 1.2 omap_i2c 44e0b000.i2c: bus 0 rev0.11 at 400 kHz tilcdc 4830e000.lcdc: found TDA19988

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 tilcdc 4830e000.lcdc: registered panic notifier

Initialized tilcdc 1.0.0 20121205 on minor 0 console [netcon0] enabled netconsole: network logging started 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 Detected MACID = c8:a0:30:c4:61:4c omap_rtc 44e3e000.rtc: setting system clock to 2000-01-01 00:00:00 UTC (946684800) EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null) VFS: Mounted root (ext4 filesystem) readonly on device 179:2. devtmpfs: mounted Freeing unused kernel memory: 488K (c09c3000 – c0a3d000) mmc1: BKOPS_EN bit is not set mmc1: new high speed MMC card at address 0001 mmcblk1: mmc1:0001 MMC02G 1.78 GiB mmcblk1boot0: mmc1:0001 MMC02G partition 1 1.00 MiB mmcblk1boot1: mmc1:0001 MMC02G partition 2 1.00 MiB mmcblk1: p1 p2 p3 p4 mmcblk1boot1: unknown partition table mmcblk1boot0: unknown partition table INIT: version 2.88 booting Starting udev udevd[81]: starting version 182 47401300.usb-phy supply vcc not found, using dummy regulator 47401b00.usb-phy supply vcc not found, using dummy regulator omap_rng 48310000.rng: OMAP Random Number Generator ver. 20 random: nonblocking pool is initialized musb-hdrc musb-hdrc.0.auto: MUSB HDRC host driver musb-hdrc musb-hdrc.0.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 musb-hdrc musb-hdrc.1.auto: MUSB HDRC host driver musb-hdrc musb-hdrc.1.auto: new USB bus registered, assigned bus number 2 hub 2-0:1.0: USB hub found hub 2-0:1.0: 1 port detected EXT4-fs (mmcblk0p2): re-mounted. Opts: data=ordered Starting Bootlog daemon: bootlogd. Populating dev cache ALSA: Restoring mixer settings… /usr/sbin/alsactl: load_state:1729: No soundcards found… Wed Apr 30 12:24:00 UTC 2014 update-rc.d: /etc/init.d/run-postinsts exists during rc.d purge (continuing) Removing any system startup links for run-postinsts … /etc/rcS.d/S99run-postinsts INIT: Entering runlevel: 5 Configuring network interfaces… net eth0: initializing cpsw version 1.12 (0) net eth0: phy found : id is : 0x7c0f1 libphy: PHY 4a101000.mdio:01 not found net eth0: phy 4a101000.mdio:01 not found on slave 1 IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready udhcpc (v1.22.1) started Sending discover… Sending discover… Sending discover… No lease, failing Starting system message bus: dbus. Starting Connection Manager Starting Xserver Starting Dropbear SSH server: Generating key, this may take a while… X.Org X Server 1.15.0 Release Date: 2013-12-27 X Protocol Version 11, Revision 0 Build Operating System: Linux 3.5.0-27-generic x86_64 Current Operating System: Linux beaglebone 3.14.0-yocto-standard #1 PREEMPT Tue Apr 29 17:00:14 BRT 2014 armv7l Kernel command line: console=ttyO0,115200n8 root=/dev/mmcblk0p2 ro rootfstype=ext4 rootwait Build Date: 30 April 2014 09:03:01AM Current version of pixman: 0.32.4 Before reporting problems, check http://wiki.x.org to make sure that you have the latest version. Markers: (–) probed, (**) from config file, (==) default setting, (++) from command line, (!!) notice, (II) informational, (WW) warning, (EE) error, (NI) not implemented, (??) unknown. (==) Log file: “/var/log/Xorg.0.log”, Time: Wed Apr 30 12:24:11 2014 (==) Using system config directory “/usr/share/X11/xorg.conf.d” Initializing built-in extension Generic Event Extension Initializing built-in extension SHAPE Initializing built-in extension MIT-SHM Initializing built-in extension XInputExtension Initializing built-in extension XTEST Initializing built-in extension BIG-REQUESTS Initializing built-in extension SYNC Initializing built-in extension XKEYBOARD Initializing built-in extension XC-MISC Initializing built-in extension XFIXES Initializing built-in extension RENDER Initializing built-in extension RANDR Initializing built-in extension COMPOSITE Initializing built-in extension DAMAGE Initializing built-in extension MIT-SCREEN-SAVER Initializing built-in extension DOUBLE-BUFFER Initializing built-in extension DPMS Initializing built-in extension Present Initializing built-in extension X-Resource Initializing built-in extension XVideo Initializing built-in extension XVideo-MotionCompensation Initializing built-in extension XFree86-VidModeExtension Initializing built-in extension XFree86-DGA Initializing built-in extension XFree86-DRI Initializing built-in extension DRI2 D-BUS per-session daemon address is: unix:abstract=/tmp/dbus-7TpuW8mcOx,guid=e7a48ac5bfafd136fe3db4ae5360eb6c matchbox: Cant find a keycode for keysym 269025056 matchbox: ignoring key shortcut XF86Calendar=!$contacts matchbox: Cant find a keycode for keysym 2809 matchbox: ignoring key shortcut telephone=!$dates matchbox: Cant find a keycode for keysym 269025050 matchbox: ignoring key shortcut XF86Start=!matchbox-remote -desktop

Forking. run with -n to prevent fork ** (matchbox-panel:785): WARNING **: Failed to load applet “battery” (/usr/lib/matchbox-panel/libbattery.so: cannot open shared object file: No s. Public key portion is: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/Hyej7shNPsm2KMET/n1LkwKbe+sfPG7saBuuWJPIXeo06FpOdv/FMYyYNHZSRVGFRJ5uFZqPOWbS3IDPv4u5UtXIRxxAutI/oMU54srDCe Fingerprint: md5 49:dc:c4:08:d7:58:fe:3f:7b:fa:c0:b5:d3:88:47:f0 dropbear. Starting rpcbind daemon…done. Starting syslogd/klogd: done * Starting Avahi mDNS/DNS-SD Daemon: avahi-daemon …done. Starting Telephony daemon Starting Linux NFC daemon Stopping Bootlog daemon: bootlogd. Poky (Yocto Project Reference Distro) 1.6 beaglebone /dev/ttyO0 beaglebone login:

E as seguintes imagens saindo pelo HDMI:

Beaglebone Black com Yocto Project
Beaglebone Black com Yocto Project

Para aprender mais

BeagleBone Black + Yocto

Beaglebone Black + Yocto Daisy (Versão 1.6)

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

Pronto! Agora você já tem um ponto de partida para construir  e customizar as suas distribuições Linux embarcado com o Yocto Project.

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

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

Beaglebone Black » Beaglebone Black + Yocto Daisy (Versão 1.6)
Comentários:
Notificações
Notificar
guest
21 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Wendell Silva
Wendell Silva
09/09/2014 18:27

Só para compartilhar: este tutorial também funcionou perfeitamente usando-se o CentOS Linux 7 (Core), embora tenha apresentado alguns ‘warnings’. Fica, então, a sugestão para atualizar a lista no tópico: “Preparando o Host”.

Diego Sueiro
Diego Sueiro
Reply to  Wendell Silva
09/09/2014 18:35

Wendell,

Obrigado pelo feedback.

A lista do post seguem as versões oficialmente suportadas pelo projeto.
O centOS 7 ainda não consta na lista, mas boa notícia que tenha funcionado.

Abraços

Adriano Casimiro
Adriano Casimiro
13/08/2014 21:56

O Yocto me gerou arquivos com nomes diferentes, ao invés de gerar o zImage e o zImage-am335x-boneblack.dtb, ele gerou o uImage e o
uImage-am335x-boneblack.dtb. Fiz a cópia mesmo assim para o sdcard, porém quando ligo a beaglebone, ela fica com os leds d2,d3,d4,d5 acessos e não faz mais nada. Abri o arquivo uEnv e mudei o nome do kernel_file=zImage para kernel_file=uImage, porém o problema persiste. Diego, você saberia me dizer o que pode estar dando errado?
Muito bons os materiais do Embarcados, parabéns!

Diego Sueiro
Diego Sueiro
Reply to  Adriano Casimiro
14/08/2014 07:06

Olá Adriano,

Vou verificar o motivo da mudança de zImage para uImage.

Se você energizar a placa segurando o botão que fica próximo ao slot do uSD a placa também não “boota”?

Você tem um cabo para ser conectado a interface serial de debug da BBB? Assim fica mais fácil de sabermos o que está acontecendo.

E obrigado pelo apoio.

Abraços.

Adriano Casimiro
Adriano Casimiro
Reply to  Diego Sueiro
14/08/2014 22:52

Seguindo sua dica de ligar a placa com o botão pressionado deu certo! Obrigado pela ajuda.

Caio Pereira
Caio Pereira
Reply to  Diego Sueiro
23/09/2014 17:47

Diego, obtive o mesmo resuiltado que o Adriano Casimiro

trackback
28/05/2015 09:34

[…] Beaglebone Black + Yocto Daisy (Versão 1.6) […]

trackback
28/05/2015 03:00

[…] Beaglebone Black + Yocto Daisy (Versão 1.6) […]

trackback
27/05/2015 02:53

[…] Beaglebone Black + Yocto Daisy (Versão 1.6) […]

trackback
27/05/2015 02:43

[…] Beaglebone Black + Yocto Daisy (Versão 1.6) […]

trackback
27/05/2015 02:30

[…] Beaglebone Black + Yocto Daisy (Versão 1.6) […]

trackback
13/01/2015 10:36

[…] Beaglebone Black + Yocto Daisy (Versão 1.6) […]

trackback
12/01/2015 09:04

[…] Beaglebone Black + Yocto Daisy (Versão 1.6) […]

trackback
12/01/2015 09:04

[…] Beaglebone Black + Yocto Daisy (Versão 1.6) […]

Talvez você goste:

Séries

Menu