{"id":1074,"date":"2020-08-09T23:46:00","date_gmt":"2020-08-09T23:46:00","guid":{"rendered":"http:\/\/visiorob.com.br\/?p=1074"},"modified":"2022-09-04T14:12:57","modified_gmt":"2022-09-04T14:12:57","slug":"yocto-project","status":"publish","type":"post","link":"https:\/\/visiorob.com.br\/index.php\/2020\/08\/09\/yocto-project\/","title":{"rendered":"Yocto Project"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\"><strong>O que \u00e9 o Yocto Project?<\/strong><\/h2>\n\n\n\n<p>  O Yocto Project \u00e9 um sistema de build com o objetivo de criar distribui\u00e7\u00f5es Linux embarcado customizadas, ademais, ele apresenta quest\u00f5es importantes no desenvolvimento do produto como: redu\u00e7\u00e3o do time-to-market, redu\u00e7\u00e3o de custos de desenvolvimento e manuten\u00e7\u00e3o.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Fun\u00e7\u00f5es de um sistema build<\/strong><\/h2>\n\n\n\n<p>   \u00c9 esperado que um Sistema de Build:<br>\u2022 Forne\u00e7a Toolchain para cross-compiling e debug;<br>\u2022 Constru\u00e7\u00e3o dos artefatos de software;<br>\u2022 Gerenciar cadeias de depend\u00eancias entre os pacotes;<br>\u2022 Constru\u00e7\u00e3o da imagem (bootloader + kernel + rootfs);<br>\u2022 Gera\u00e7\u00e3o de SDK (+);<br>\u2022 Integra\u00e7\u00e3o com IDEs (+);<br>\u2022 Gerenciador de Pacotes a ser utilizado no target (+);<br>\u2022 Automa\u00e7\u00e3o de Testes (+);<br>\u2022 Emulador do HW (+).<br>https:\/\/www.embarcados.com.br\/yocto-project-introducao\/<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Sistema Linux Embarcado<\/strong><\/h2>\n\n\n\n<p>  Sistema Linux embarcado \u00e9 um sistema customizado que sofre adapta\u00e7\u00f5es para ser utilizado da melhor forma em determinado hardware, podendo ele possuir todas (ou grande parte) das caracter\u00edsticas do sistema operacional comum utilizado no desktop, com o objetivo de suprir todas as necessidades de armazenamento, desempenho e energia, visando sempre a economia de recursos, que s\u00e3o, de fato, limitados. Al\u00e9m disso, o Linux \u00e9 implantado em diversos dispositivos eletr\u00f4nicos, dentre eles est\u00e3o: receptores de TV via sat\u00e9lite, TVs, Smartphones, geladeiras, automa\u00e7\u00e3o de carros, roteadores, etc.<br>\u00c9 necess\u00e1rio uma s\u00e9rie de artefatos softwares adequados para o funcionamento e execu\u00e7\u00e3o de um sistema Linux Embarcado em um determinado hardware, sendo eles: Aplica\u00e7\u00f5es, Servi\u00e7os, Bibliotecas, Linux Kernel e Bootloader. Esse conjunto \u00e9 chamado de Distribui\u00e7\u00e3o.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignleft size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/visiorob.com.br\/wp-content\/uploads\/2020\/05\/sistema-linux-overview-696x415-1.png\" alt=\"\" class=\"wp-image-1078\" width=\"428\" height=\"254\" srcset=\"https:\/\/visiorob.com.br\/wp-content\/uploads\/2020\/05\/sistema-linux-overview-696x415-1.png 696w, https:\/\/visiorob.com.br\/wp-content\/uploads\/2020\/05\/sistema-linux-overview-696x415-1-300x179.png 300w\" sizes=\"auto, (max-width: 428px) 100vw, 428px\" \/><figcaption><strong>FIGURA 1<\/strong> &#8211; Componente de um Sistema Linux Embarcado.<br>                <strong>FONTE &#8211; <\/strong>https:\/\/www.embarcados.com.br\/yocto-project-introducao\/<\/figcaption><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<p>  <\/p>\n\n\n\n<p>  <\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>  <\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>  Assim como todos projetos, o sistema customizado tem seus pr\u00f3s e contras. Alta flexibilidade, total controle, feito de acordo com o projeto e hardware, s\u00e3o exemplos de pr\u00f3s. Entretanto, os principais contras s\u00e3o: suporte t\u00e9cnico e m\u00e3o de obra especializada, necessidade de infraestrutura para gera\u00e7\u00e3o de imagens, ramp up pode ser demorado, e nem todos os pacotes necess\u00e1rios podem estar dispon\u00edveis para compila\u00e7\u00e3o.<\/p>\n\n\n\n<p>  Para desenvolvermos esses artefatos de softwares, precisaremos de algumas ferramentas:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/visiorob.com.br\/wp-content\/uploads\/2020\/05\/ferramentas-desenvolvimento-linux-667x418-1.png\" alt=\"\" class=\"wp-image-1081\" width=\"310\" height=\"194\" srcset=\"https:\/\/visiorob.com.br\/wp-content\/uploads\/2020\/05\/ferramentas-desenvolvimento-linux-667x418-1.png 667w, https:\/\/visiorob.com.br\/wp-content\/uploads\/2020\/05\/ferramentas-desenvolvimento-linux-667x418-1-300x188.png 300w\" sizes=\"auto, (max-width: 310px) 100vw, 310px\" \/><figcaption><br><strong>FIGURA 2 \u2013 Ferramentas de desenvolvimento<\/strong><br><strong>FONTE &#8211; <a href=\"https:\/\/www.embarcados.com.br\/yocto-project-introducao\/\">https:\/\/www.embarcados.com.br\/yocto-project-introducao\/<\/a><\/strong><\/figcaption><\/figure>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><strong>IDE<\/strong>: <em>Integrated Development Environment<\/em> \u00e9 utilizado para edi\u00e7\u00e3o de c\u00f3digos fonte e debug (ex.: Eclipse);<\/p><p><strong>Sistema de Build<\/strong>: Respons\u00e1vel por gerar e agregar os artefatos de software (ex.: Yocto e Buildroot);<\/p><p><strong>SDK<\/strong>: Software Development Kit \u00e9 um conjunto de ferramentas, bibliotecas e c\u00f3digos fonte para desenvolvimento de software;<\/p><p><strong>JTAG<\/strong>: equipamento com <em>in-circuit emulator<\/em> para debug de c\u00f3digo <em>on-chip<\/em>;<\/p><p><strong>Toolchain<\/strong>: conjunto de ferramentas para constru\u00e7\u00e3o de artefatos bin\u00e1rios (compilador, assembler e linker);<\/p><p><strong>GDB<\/strong>: GNU Debugger \u00e9 uma ferramenta de aux\u00edlio no debug de software;<\/p><p><strong>Conex\u00f5es F\u00edsicas:<\/strong> Serial, Paralela, Ethernet, USB etc.<\/p><p><strong>Target<\/strong>: placa eletr\u00f4nica composta com ao menos processador, mem\u00f3rias e interfaces de comunica\u00e7\u00e3o.<\/p><cite>https:\/\/www.embarcados.com.br\/yocto-project-introducao\/<\/cite><\/blockquote>\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Caracter\u00edsticas<\/strong><\/h2>\n\n\n\n<p>As principais caracter\u00edsticas do Yocto Project s\u00e3o:<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p>Cole\u00e7\u00e3o de ferramentas e m\u00e9todos que possibilitam r\u00e1pida valida\u00e7\u00e3o e desenvolvimento: <a rel=\"noreferrer noopener\" href=\"https:\/\/git.yoctoproject.org\/\" target=\"_blank\">git.yoctoproject.org<\/a>;<\/p>\n\n\n\n<p>Suporta arquiteturas x86, ARM, MIPS e PowerPC;<\/p>\n\n\n\n<p>Baseado no Openembedded: <a rel=\"noreferrer noopener\" href=\"http:\/\/openembedded.org\/wiki\/Main_Page\" target=\"_blank\">openembedded.org<\/a>;<\/p>\n\n\n\n<p>Estruturado em camadas que facilita o reuso e extens\u00e3o;<\/p>\n\n\n\n<p>Releases a cada 6 meses;<\/p>\n\n\n\n<p>SDK com integra\u00e7\u00e3o com Eclipse e Qt Creator;<\/p>\n\n\n\n<p>Hist\u00f3rico de Build registrado em reposit\u00f3rio git;<\/p>\n\n\n\n<p>Filtro de licen\u00e7as;<\/p>\n\n\n\n<p>Suporte \u00e0s \u00faltimas vers\u00f5es est\u00e1veis de software;<\/p>\n\n\n\n<p>Suporta os mais populares formatos de pacotes: rpm, deb e ipk;<\/p>\n\n\n\n<p>Total isolamento do Host e ambiente de Build;<\/p>\n\n\n\n<p>Interface gr\u00e1fica via web para controle de Build (Toaster);<\/p>\n\n\n\n<p>Extensa documenta\u00e7\u00e3o: <a rel=\"noreferrer noopener\" href=\"https:\/\/www.yoctoproject.org\/documentation\" target=\"_blank\">yoctoproject.org\/documentation<\/a><\/p>\n\n\n\n<p><span style=\"text-decoration: underline\">https:\/\/www.embarcados.com.br\/yocto-project-introducao<\/span><\/p>\n<\/div><\/div>\n\n\n\n<p>  Como observamos, h\u00e1 Releases a cada 6 meses, uma geralmente em abril e outra geralmente em outubro, abaixo mostraremos uma tabela com as vers\u00f5es mais recentes:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/visiorob.com.br\/wp-content\/uploads\/2020\/05\/Captura-de-tela-de-2020-05-19-17-22-47.png\" alt=\"\" class=\"wp-image-1089\" width=\"376\" height=\"280\" srcset=\"https:\/\/visiorob.com.br\/wp-content\/uploads\/2020\/05\/Captura-de-tela-de-2020-05-19-17-22-47.png 798w, https:\/\/visiorob.com.br\/wp-content\/uploads\/2020\/05\/Captura-de-tela-de-2020-05-19-17-22-47-300x223.png 300w, https:\/\/visiorob.com.br\/wp-content\/uploads\/2020\/05\/Captura-de-tela-de-2020-05-19-17-22-47-768x571.png 768w, https:\/\/visiorob.com.br\/wp-content\/uploads\/2020\/05\/Captura-de-tela-de-2020-05-19-17-22-47-80x60.png 80w\" sizes=\"auto, (max-width: 376px) 100vw, 376px\" \/><figcaption><br><strong>FIGURA 3 \u2013 RELEASES YOCTO PROJECT<\/strong><br><strong>FONTE &#8211; <a href=\"https:\/\/wiki.yoctoproject.org\/wiki\/Releases\">https:\/\/wiki.yoctoproject.org\/wiki\/Releases<\/a><\/strong><\/figcaption><\/figure>\n\n\n\n<p>  Como citado anteriormente, o Yocto Project \u00e9 baseado no Openembedded, que \u00e9 um conjunto de metadados para executar o build atrav\u00e9s do Bitbake.<\/p>\n\n\n\n<p>  Metadados: Ajudam a rela\u00e7\u00e3o e a utilidade das informa\u00e7\u00f5es dos dados. Cont\u00e9m dados de outros dados e informam o Bitbake o que e como construir os artefatos de software.<\/p>\n\n\n\n<p>  Bitbake: \u00c9 inspirado no Portage, usado para distribui\u00e7\u00e3o e pacotes com linux embarcado, execu\u00e7\u00e3o de tarefas e gerenciamento de metadados escrita em python.<\/p>\n\n\n\n<p>  Em quest\u00f5es de arquitetura, o sistema tem algumas partes principais, que s\u00e3o: c\u00f3digo fonte upstream, metadados e entrada, sistema de build, pacotes resultantes, tarefas e imagem resultante.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"984\" height=\"482\" src=\"https:\/\/visiorob.com.br\/wp-content\/uploads\/2020\/05\/yocto-environment.png\" alt=\"\" class=\"wp-image-1111\" srcset=\"https:\/\/visiorob.com.br\/wp-content\/uploads\/2020\/05\/yocto-environment.png 984w, https:\/\/visiorob.com.br\/wp-content\/uploads\/2020\/05\/yocto-environment-300x147.png 300w, https:\/\/visiorob.com.br\/wp-content\/uploads\/2020\/05\/yocto-environment-768x376.png 768w\" sizes=\"auto, (max-width: 984px) 100vw, 984px\" \/><figcaption><strong>FIGURA 4 &#8211; ARQUITETURA DO YOCTO<\/strong><br><strong>FONTE &#8211; https:\/\/www.embarcados.com.br\/yocto-project-definicoes-e-conceitos\/<\/strong><\/figcaption><\/figure>\n\n\n\n<p>  Depois das prepara\u00e7\u00f5es necess\u00e1rias, o Bitbake vai processar e criar uma ordem de execu\u00e7\u00e3o das tarefas, visando sempre suas depend\u00eancias. Geralmente o fluxo que \u00e9 encontrado nas tarefas \u00e9 o mesmo da imagem acima.<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>C\u00f3digo fonte \u00e9 baixado<\/li><li>Aplica\u00e7\u00e3o de patches (nem sempre \u00e9 necess\u00e1rio)<\/li><li>Configura\u00e7\u00e3o e compila\u00e7\u00e3o<\/li><li>An\u00e1lise do resultado para a divis\u00e3o do pacote e suas rela\u00e7\u00f5es de depend\u00eancia<\/li><li>Gera\u00e7\u00e3o de pacotes<\/li><li>Testes de garantia de qualidade dos pacotes<\/li><li>Gera\u00e7\u00e3o do feed de pacotes<\/li><li>Gera\u00e7\u00e3o da imagem ou do SDK<\/li><\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Quick Build<\/h2>\n\n\n\n<p>  Nesse t\u00f3pico, iremos construir uma distribui\u00e7\u00e3o Linux embarcado usando o Yocto Project, sendo executada pelo emulador QEMU.<\/p>\n\n\n\n<p>  Usamos a vers\u00e3o 20.04 do Ubuntu, mas citaremos as vers\u00f5es compat\u00edveis atualmente:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Ubuntu 16.04 (LTS)<\/li><li>Ubuntu 18.04 (LTS)<\/li><li>Ubuntu 19.04<\/li><li>Ubuntu 20.04<\/li><li>Fedora 28<\/li><li>Fedora 29<\/li><li>Fedora 30<\/li><li>Fedora 31<\/li><li>Fedora 32<\/li><li>CentOS 7.x<\/li><li>Debian GNU \/ Linux 8.x (Jessie)<\/li><li>Debian GNU \/ Linux 9.x (Stretch)<\/li><li>Debian GNU \/ Linux 10.x (Buster)<\/li><li>OpenSUSE Leap 15.1<\/li><\/ul>\n\n\n\n<p>  Ap\u00f3s a insala\u00e7\u00e3o do host, devemos instalar alguns pacotes essenciais para a execu\u00e7\u00e3o do projeto, sendo eles:<\/p>\n\n\n\n<p>Ubuntu e Debian:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ sudo apt-get install gawk wget git-core diffstat descompacte texinfo gcc-multilib \\\n     build-essential chrpath socat cpio python3 python3-pip python3-pexpect \\\n     xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev \\\n     pylint3 xterm    <\/code><\/pre>\n\n\n\n<p>Fedora:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ sudo dnf install gawk make wget tar bzip2 gzip python3 unzip perl patch \\\n     diffutils diffstat git cpp gcc gcc-c ++ glibc-devel texinfo chrpath \\\n     ccache perl-Data-Dumper perl-Text-ParseWords perl-Thread-Queue perl-bignum socat \\\n     python3-pexpect findutils cujo arquivo cpio python python3-pip xz python3-GitPython \\\n     python3-jinja2 SDL-devel xterm rpcgen<\/code><\/pre>\n\n\n\n<p>OpenSUSE<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ sudo zypper install python gcc gcc-c ++ git chrpath make wget python-xml \\\n     diffstat makeinfo python-curses patch socat python3 python3-curses tar python3-pip \\\n     python3-pexpect xz que python3-Jinja2 Mesa-libEGL1 libSDL-devel xterm rpcgen\n     $ sudo pip3 install GitPython<\/code><\/pre>\n\n\n\n<p>CentOS-7<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> $ sudo yum install -y epel-release\n     $ sudo yum makecache\n     $ sudo yum install gawk make wget tar bzip2 gzip python3 descompacte perl patch \\\n     diffutils diffstat git cpp gcc gcc-c ++ glibc-devel texinfo chrpath socat \\\n     perl-Data-Dumper perl-Text-ParseWords perl-Thread-Queue python36-pip xz \\\n     qual SDL-devel xterm\n     $ sudo pip3 install GitPython jinja2<\/code><\/pre>\n\n\n\n<p>CentOS-8<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> $ sudo dnf install -y epel-release\n     $ sudo dnf config-manager --set-enabled PowerTools\n     $ sudo dnf makecache\n     $ sudo dnf install gawk make wget tar bzip2 gzip python3 unzip perl patch \\\n     diffutils diffstat git cpp gcc gcc-c ++ glibc-devel texinfo chrpath ccache \\\n     socat perl-Data-Dumper perl-Text-ParseWords perl-Thread-Queue python3-pip \\\n     python3-GitPython python3-jinja2 python3-pexpect xz que SDL-devel xterm \\\n     rpcgen<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Ambiente de Constru\u00e7\u00e3o<\/h2>\n\n\n\n<p>  Agora iremos preparar o ambiente de constru\u00e7\u00e3o, usaremos a vers\u00e3o Dunfell do yocto, que \u00e9 a mais recente dispon\u00edvel.<\/p>\n\n\n\n<p>  Primeiro iremos criar os diret\u00f3rios e clonar o yocto:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir yocto\ncd yocto\ngit clone -b dunfell git:\/\/git.yoctoproject.org\/poky poky-dunfell<\/code><\/pre>\n\n\n\n<p>  Como dito anteriormente, precisamos gerar alguns artefatos de software, sendo assim, devemos usar os seguintes comandos:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd yocto\nsource poky-dunfell\/oe-init-build-env build-dunfell<\/code><\/pre>\n\n\n\n<p>  Ap\u00f3s esse comando, ser\u00e1 criado um subdiret\u00f3rio com o nome de build-dunfell, dentro dele ter\u00e1 a pasta conf, onde est\u00e3o o local.conf e o bblayers.conf, essas pastas n\u00e3o ser\u00e3o alteradas nessa distribui\u00e7\u00e3o, mas em projetos mais elaborados ambas s\u00e3o muito importantes para a execu\u00e7\u00e3o correta.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Gerando a imagem<\/h2>\n\n\n\n<p>  Para iniciar a compila\u00e7\u00e3o, devemos usar o seguinte comando:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>source poky-dunfell\/oe-init-build-env build-dunfell\nbitbake core-image-sato<\/code><\/pre>\n\n\n\n<p>  A configura\u00e7\u00e3o ser\u00e1 a seguinte:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Build Configuration:\nBB_VERSION           = \"1.46.0\"\nBUILD_SYS            = \"x86_64-linux\"\nNATIVELSBSTRING      = \"ubuntu-20.04\"\nTARGET_SYS           = \"X86_64-poky-linux\"\nMACHINE              = \"qmeux86-64\"\nDISTRO               = \"poky\"\nDISTRO_VERSION       = \"3.1.2\"\nTUNE_FEATURES        = \"m64 core2\"\nTERGET_FPU           = \"\"\nmeta\nmeta-poky\nmeta-yocto-bsp       = \"dunfell:09c99632ac74f4ebd9e8fa4696f8d0ddaea37d36\"<\/code><\/pre>\n\n\n\n<p>  Esse processo pode demorar muito, pois s\u00e3o em m\u00e9dia 6835 tarefas. Ap\u00f3s o carregamento total, devemos executar a imagem.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Execu\u00e7\u00e3o da imagem<\/h2>\n\n\n\n<p>  Iremos rodar a imagem usando o QEMU, o comando abaixo deve ser utilizado:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>runqemu qemux86-64<\/code><\/pre>\n\n\n\n<p>  Em quest\u00e3o de segundos dever\u00e1 abrir uma p\u00e1gina de carregamento do Yocto Project, e depois, a seguinte imagem ir\u00e1 aparecer: <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"638\" height=\"514\" src=\"http:\/\/visiorob.com.br\/wp-content\/uploads\/2020\/06\/qemu.png\" alt=\"\" class=\"wp-image-1255\" srcset=\"https:\/\/visiorob.com.br\/wp-content\/uploads\/2020\/06\/qemu.png 638w, https:\/\/visiorob.com.br\/wp-content\/uploads\/2020\/06\/qemu-300x242.png 300w\" sizes=\"auto, (max-width: 638px) 100vw, 638px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<div class=\"mh-excerpt\"><p>O que \u00e9 o Yocto Project? O Yocto Project \u00e9 um sistema de build com o objetivo de criar distribui\u00e7\u00f5es Linux embarcado customizadas, ademais, ele <a class=\"mh-excerpt-more\" href=\"https:\/\/visiorob.com.br\/index.php\/2020\/08\/09\/yocto-project\/\" title=\"Yocto Project\">[&#8230;]<\/a><\/p>\n<\/div>","protected":false},"author":27,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[13],"tags":[],"class_list":["post-1074","post","type-post","status-publish","format-standard","hentry","category-linux-embarcado"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/visiorob.com.br\/index.php\/wp-json\/wp\/v2\/posts\/1074","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/visiorob.com.br\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/visiorob.com.br\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/visiorob.com.br\/index.php\/wp-json\/wp\/v2\/users\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/visiorob.com.br\/index.php\/wp-json\/wp\/v2\/comments?post=1074"}],"version-history":[{"count":28,"href":"https:\/\/visiorob.com.br\/index.php\/wp-json\/wp\/v2\/posts\/1074\/revisions"}],"predecessor-version":[{"id":1432,"href":"https:\/\/visiorob.com.br\/index.php\/wp-json\/wp\/v2\/posts\/1074\/revisions\/1432"}],"wp:attachment":[{"href":"https:\/\/visiorob.com.br\/index.php\/wp-json\/wp\/v2\/media?parent=1074"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/visiorob.com.br\/index.php\/wp-json\/wp\/v2\/categories?post=1074"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/visiorob.com.br\/index.php\/wp-json\/wp\/v2\/tags?post=1074"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}