Message-ID: <245175771.5209.1711629282372.JavaMail.root@dns3> Subject: Exported From Confluence MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_Part_5208_1394275405.1711629282372" ------=_Part_5208_1394275405.1711629282372 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/exported.html pITX-MX8M-PLUS-BSP-Gatesgarth

pITX-MX8M-PLUS-BSP-Gatesgarth

=20 =20
=20 =20 = =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20 =20
=20 =20
=20
=20
=20

Building N= XP/Embedian=E2=80=99s Yocto Gatesgarth BSP Distribution

Eric Lee

version 1.0a, 08/18/2022

Introduction


 

This document describes how Embedian builds a customized version of NXP= =E2=80=99s i.MX8M Plus official Yocto Gatesgarth BSP release for Embed= ian's pITX-MX8M-PLUS product platform. The approach is t= o pull from Embedian's public facing GIT repository and build that using bi= tbake. The reason why we use this approach is that it allows co-development= . The build output is comprised of binary images, feed packages, and a= n SDK for pITX-MX8M-PLUS specific development.

 

Freescale makes their i.MX series official bsp build scripts available v= ia the following GIT repository:

=20 =20

 

Freescale community BSP release build sc= ript is available via the following repository:  

 

=20 =20

It is this repository that actually p= ulls in the fsl-bsp-relea= se project to perform the Li= nux BSP builds for NXP's i.MX8M Plus ARM Cortext-A53 chips.  

Generating SSH Keys


 We recommend you use SSH= keys to establish a secure connection between your computer and Embedian G= itlab server. The steps below will walk you through generating an SSH key a= nd then adding the public key to our Gitlab account. 

Step 1. Check for SSH keys


First, we need to check for existing ssh keys on your computer. Open up&= nbsp;Git Bash and run: 

=20
$ cd ~/.ssh
$ ls
# Lists the files in your .ssh directory
=20

 Check the directory list= ing to see if you have a file named either id_rsa.pub&nbs= p;or id_dsa.pub. If you don't have either of those files = go to step 2. Otherwise, you already have an existing= keypair, and you can skip to step 3. 

Step 2. Generate a new SSH key


 To generate a new SSH ke= y, enter the code below. We want the default settings so when asked to ente= r a file in which to save the key, just press enter.

=20
$ ssh-keygen -t rsa -C "your_email@example.com"
# Creates a new ssh key, using the provided email as a label
# Generating public/private rsa key pair.
# Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press en=
ter]
$ ssh-add id_rsa
=20

 Now you need to enter a = passphrase.

=20
Enter passphrase (empty for no passphrase): [Type a passphrase]
Enter same passphrase again: [Type passphrase again]
=20

 Which should give you so= mething like this:

=20
Your identification has been saved in /c/Users/you/.ssh/id_rsa.
Your public key has been saved in /c/Users/you/.ssh/id_rsa.pub.
The key fingerprint is:
01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db your_email@example.com=20

Step 3. Add your SSH key to E= mbedian Gitlab Server


 Copy the key to your cli= pboard.

=20
$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAABDAQABAAABAQDQUEnh8uGpfxaZVU6+uE4bsDrs/tEE5/BPW7j=
MAxak
6qgOh6nUrQGBWS+VxMM2un3KzwvLRJSj8G4TnTK2CSmlBvR+X8ZeXNTyAdaDxULs/StVhH+QRtF=
EGy4o
iMIzvIlTyORY89jzhIsgZzwr01nqoSeWWASd+59JWtFjVy0nwVNVtbek7NfuIGGAPaijO5Wnshr=
2uChB
Pk8ScGjQ3z4VqNXP6CWhCXTqIk7EQl7yX2GKd6FgEFrzae+5Jf63Xm8g6abbE3ytCrMT/jYy5OO=
j2XSg
6jlxSFnKcONAcfMTWkTXeG/OgeGeG5kZdtqryRtOlGmOeuQe1dd3I+Zz3JyT your_email@exa=
mple.c
om
=20

Go to Embedian Git Server. At Profile Setting --> SSH Keys --> Add SSH Key 

Paste your public key and press "Add Key" and your are done.

Overview of the meta-pitximx8mp-gatesga= rth Yocto Layer


The supplied meta-pitximx8mp-gatesgarth Yocto compliant layer has the following organization:

=20
=20
=20

.
|-- conf
|&nbs= p;  |-- layer.conf
|   |-- site.conf
| = ;  |-- machine
|       |-- pit= ximx8mp2g.conf
|       |-- pitximx8= mp4g.conf
|   |   `-- pitximx8mp6g.conf
|-- R= EADME
|-- recipes-bsp
|   |-- u-boot
|  &nb= sp;    `-- u-boot-potximx8mp_2020.04.bb
| &nb= sp; |-- imx-vpu-hantro-vc
|     &nb= sp; `-- imx-vpu-hantro-vc_1.3.0.bbappend
|   |--&n= bsp;alsa-state
|       |  = ; |-- alsa-state
|       |&nbs= p;  |   `-- asound.state
|  &n= bsp;    `-- alsa-state.bbappend
|  =  |-- pm-utils
|       `--=  pm-utils_%.bbappend
|   |-- imx-mkimage
|       `-- imx-boot_1.0.bbappend<= /span>
|-- recipes-core
|&n= bsp;  |-- busybox
|      =  `-- busybox_%.bbappend
|      &nbs= p;|   |-- busybox
|      =  |   |   |-- ftpget.cfg
| &nbs= p;     |   |   `--&n= bsp;defconfig
|   |-- base-files
|  = ;     `-- base-files_%.bbappend
|  =      |   |-- base-files
| = ;      |   |   = |-- issue
|       |  &nbs= p;|   `-- issue.net
|   |-- pa= ckagegroups
|       `-- packag= egroup-core-tools-testapps.bbappend
|   |-- psplas= h
|       `-- psplash_git.bbappend<= br />|       |   |-- file= s
|       |   | = ;  |-- 0001-psplash-Change-colors-for-the-Embedian-Yocto-logo.pat= ch
|       |   |&nbs= p;  |-- psplash-poky.png
|     &nbs= p; |   |   `-- psplash-bar.png
|   |-- udev
|      = ; |   |-- files
|     &nb= sp; |   |   |-- pitximx8mp2g
| = ;      |   |   = |   `-- usb-power.rules
|    &= nbsp;  |   |   |-- pitximx8mp4g
|       |   | &nbs= p; |   `-- usb-power.rules  
| &nbs= p;     |   |   |-- p= itximx8mp6g
|       |  &n= bsp;|   |   `-- usb-power.rules
|&n= bsp;      `-- udev-rules-imx.bbappend|-- recipes-support

|&= nbsp;  |-- vim
|   |   `-- vim_%.bbappend
|-- recipes-kernel
|   |-- linux
|   =     `-- linux-pitximx8mp_5.10.bb
`-- scripts
|   `-- emb_mk_yocto_sdcard

=20
=20
=20


Notes on 
meta-pitximx8mp-gatesgarth layer content
<= /strong>

conf/machine/*

This folder contains the machine definiti= ons for the pitximx8mp2g/pit= ximx8mp4g/pitximx8mp6g platform and backup repository in E= mbedian. These select the associated kernel, kernel config, u-boot, u-boot = config, and tar.bz2 image settings.

recipes-bsp/u-boot/*

This folder contains recipes used to buil= d DAS U-boot for pitximx8mp2= g/pitximx8mp4g/pitximx8mp6g platform.

recipes-bsp/alsa-state/*

This folder contains sgtl5000 sound chip = default state for pitximx8mp2g/pitximx8mp4g/pitximx8mp6g platform.

recipes-bsp/imx-mkimage/*<= /code>

This folder contains imx-mkimage tool for=  pitximx8mp2g/pitximx8mp4g/pitximx8mp6g p= latform.

recipes-bsp/imx-vpu-hantro= -vc/*

This folder adds compatible machine for pitximx8mp2g/pitximx8mp4g/pitximx8mp6g pla= tform

recipes-core/busybox/*

This folder remove telnetd from bysybox f= or pitximx8mp2g/pitximx8mp4g/pitximx8mp6g = ;platform.  

recipes-core/psplash/* 

This folder customized Yocto boot psplash= for pitximx8mp2g/pitximx8mp= 4g/pitximx8mp6g platform.

recipes-support/vim/* 

This folder fixes xwayland build error fo= r pitximx8mp2g/pitximx8mp4g/= pitximx8mp6g platform.

recipes-kernel/linux/*

Contains the recipes needed to build the&= nbsp;pitximx8mp2g/pitximx8mp4g/pi= tximx8mp6g Linux kernels.

Setting Up the Tools and Build Env= ironment


To build the latest NXP i.MX8M Plus fsl-bsp-release, yo= u first need an Ubuntu 16.04 0r 18.04LTS installation. Since bitbake does n= ot accept building images using root privileges, please do not=  login as a root user when performing the instructions in thi= s section. 

Once you have Ubuntu 16.04 or 18.04 LTS running, install the additional re= quired support packages using the following console command:<= /p>=20

=20
=20

$ sudo apt-get install gawk = wget git-core diffstat unzip texinfo build-essential chrpath libsdl1.2-dev = xterm python-m2crypto bc libsd= l1.2-dev pv=

=20
=20
=20

If you are using a 64-bit Linux, then= you'd also need to install 32-bit support libraries, needed by the pre-bui= lt Linaro toolchain and other binary tools.

=20
=20
=20

$ sudo dpkg --add-architectu= re i386
$ sudo apt-get update
$ sudo apt-get install curl g++-mul= tilib gcc-multilib lib32z1-dev libcrypto++9v5:i386 libcrypto++-dev:i386 lib= lzo2-dev:i386 libusb-1.0-0:i386 libusb-1.0-0-dev:i386 uuid-dev:i386

=20
=20
=20

 

To get the BSP you need to have 'repo' installed and use it as:

Install the 'repo' utility:

=20
=20
=20

$ mkdir ~/bin
$ curl http://commondatastorage.googleapis.com/git= -repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ PATH=3D${PATH}:~/bin&n= bsp;

=20
=20
=20

Download the BSP Yocto Project Environme= nt.

=20
=20
=20

$ mkdir ~/pitx-imx8mp-gatesg= arth-release

$ cd ~/pitx-imx8mp-gatesgart= h-release

$ repo init -u https://source.co= deaurora.org/external/imx/imx-manifest -b imx-linux-ga= tesgarth -m imx-5.10.9-1.0.0.xml

$ repo sync=20

=20
=20

Download the Embedian Yocto build script= and meta layer.

 

=20
=20
=20

$ wget ftp://ftp.embedian.co= m/public/dev/minfs/pitx-imx8mp-bsp-release/pitximx8mp-setup-release.sh<= /a>

$ chmod 444 pitximx8mp-setup= -release.sh

$ cd sources

$ git clone git@git.embedian= .com:developer/meta-pitximx8mp.git meta-pitximx8mp-gatesgarth -b pitx8mp_5.= 10.9_1.0.0_gatesgarth

$ cd ~/pitx-imx8mp-gatesgart= h-release

$ DISTRO=3Dfsl-imx-wayland M= ACHINE=3Dpitximx8mp4g source pitximx8mp-setup-release.sh -b build-wayland&n= bsp;

=20
=20
=20
Choose "y&=
quot; to accept EULA.
This script wil=
l create and bring you to ~/pitx-imx8mp-gatesgarth-release/buil=
d-wayland directory.

 

=20
=20

Note

=20 Icon=20
=20

The last line of the above script

$ DISTRO=3D<distro name> MACHINE=3D<machine name> sour= ce pitximx8mp-setup-release.sh= -b <build dir>

  1. <distro name> 
    • fsl-imx-x11 - Only X11 graphics
    • fsl-imx-wayland - Wayland weston graphics

    • fsl-imx-xwayland - Wayland graphics and X11. X11 applications = using EGL are not supported

    • fsl-imx-fb - Frame Buffer graphics - no X11 or Wayland (Frame Buffer DISTRO is not supported on i.M= X8M Plus.)

  2. <machine name>

    • pitximx8mp2g - if your board is with 2GB LPDDR4.<= /em>

    • pitximx8mp4g - if your board is with 4GB LPDDR4.

    • pitximx8mp6g - if your board is with 6GB LPDDR4.

In this document, we will use pitximx8mp4g as the example of machine name. Users need to cha= nge different machine name if you have different LPDDR4 variants.

=20
=20
=20  
Building the target platforms

  To build Embedian/Freescale Yocto BSP,&n= bsp; use the following commands:
=20
=20
=20

$ MACHINE=3Dpitximx8mp4g= bitbake -k fsl-image-qt5-validation-imx
or
$ MACHI= NE=3Dpitximx8mp4g bitbake -k fsl-image-validation-imx

=20
=20
=20


=20
=20

Note

=20 Icon=20
=20

fsl-image-validation-imx provides a gui image without QT5.&= nbsp;

fsl-image-qt5-validation-imx provides a Qt5 image for X11, wayland= or FB backends depending on your distro name.

If your machine name is pitximx8mp4g and your gui image is without= QT5 , the following command gives you as an example.

$ MACHINE=3Dpitximx8mp4g= bitbake -k fsl-image-validation-imx

The first build takes time.

=20
=20
=20

 

Once it done, you can find all required images under ~/pitx-imx8mp-gatesgarth-release/<buil=
d directory>/tmp/deploy/images/<machine name>/

You may want to build programs that aren=E2=80=99t installed into a root= file system so you can make them available via a feed site (described belo= w.) To do this you can build the package directly and then build the packag= e named package-index&nbs= p;to add the new package to the feed site.

 

The following example builds the tcpdump program and makes it available on the feed site:=20

=20
=20

$ MACHINE=3Dpitximx8mp4g bit= bake tcpdump
$ MACHINE=3Dpitximx8mp4g bitbake package-index

=20
=20
=20

Once the build(s) are completed you=E2= =80=99ll find the resulting images, rpm and licenses in folder  ~/pitx-imx8mp-gatesgarth-re= lease/<build directory>/tmp/deploy .

deploy/images/<machine name>/* 

This folder contains the binary images for = the root file system and the Embedian pITX-MX8M-PLUS specific= version of the boot file, Image and device tree file. Specifically the ima= ges are:

deploy/images/<machine name>/imx-boot-<machine name>-sd= .bin-flash_evk&n= bsp;

This boot file binary for pITX-MX8M-PLUS 

deploy/images/<machine name>/Image

The k= ernel Image for pITX-MX8M-PL= US.&nbs= p; 

deploy/images/<machine name>/<device tee file>

Select= ing display configuration is a matter of selecting an appropriate DTB file = under deploy/images/<machine name>/<device tee file>=

All available DTB files are listed in= the table below.

 

DTB File Name Description
= imx8mp-pitx.dtb Device tree b= lob for no display configuration.
= imx8mp-pitx-hdmi.dtb Device tree b= lob for HDMI display configuration.
= imx8mp-pitx-lvds.dtb Device tree b= lob for LVDS display configuration.
= imx8mp-pitx-m7.dtb Device tree b= lob for Cortex-M7 co-processor configuration.

 

deploy/images/<machine name>/fsl-image-validation-imx-&l= t;machine name>.*

Embedian root file system images for softwa= re development on Embedian=E2=80=99s pITX-MX8M-PLUS  pla= tforms without QT5.

deploy/images/<machine name>/fsl-image-qt5-validation-= imx-<machine name>.*

Embedian root file system images for softwa= re development on Embedian=E2=80=99s pITX-MX8M-PLUS  wit= h QT5.


deploy/deb/*

  This folder contains all the packages used to construct the root file s= ystem images. They are in deb format (similar format to Debi= an packages) and can be dynamically installed on the target platform via a = properly  constructed feed file. Here is an example of the feed file (named base-fee= ds.conf) that is used internally = at Embedian to install upgrades onto a pITX-MX8M-PLUS platform without reflashing the file system:<= /span>

=20
=20
=20

src/gz all http://<ip add= ress>/al<= span style=3D"color: rgb(0,51,102);">l

src/gz aarch64 http://<ip address>/aarch64

src/gz aarch64-mx8mp http://<ip addresss>/aarch64-mx8m

src/gz pitximx8mp4g http://<ip addresss>/pitximx8mp4g

=20
=20
=20

deploy/licenses/* 
A = database of all licenses used in all packages built for the system.<= /span>

Setup microSD Card Manually


For these instruction, we are assuming: DISK=3D/dev/mmcblk0, "lsblk= " is very useful for determining the device id.

=20
=20
=20
$ export DISK=3D/dev/mmcblk0
=20
=20
=20

Erase microSD card:

=20
=20
=20

$ sudo = dd if=3D/dev/zero of=3D${DISK} bs=3D1M count=3D160

=20
=20
=20

Create Partition Layout: Leave 2MB offset for boot file.

With util-linux v2.26, sfdisk was rewritten and is now based on = libfdisk.

=20
=20

sfdisk

=20
=20
$ sudo sfd= isk --version
sfdisk from util-linux 2.27.1
=20
=20
=20

Create Partitions:

=20
=20

sfdisk >=3D2.26.x

=20 Icon=20
=20
$ sudo sfdisk ${DISK} <<-__EOF__
2M,48M,0x83,*
50M,,,<= br />__EOF__
=20
=20
=20
=20

sfdisk <=3D2.25

=20 Icon=20
=20
$ sudo sfdisk --in-order --Linux --=
unit M ${DISK} <<-__EOF__
2,48,0x83,*
,,,-
__EOF__=20
=20
=20

Format Partitions:

=20
=20
=20
for: DISK=3D/dev/mmcblk0
$ sudo mkf= s.vfat -F 16 ${DISK}p1 -n boot
$ sudo mkf= s.ext4 ${DISK}p2 -L rootfs
 
for: DISK=3D/dev/sdX
$ sudo mkf= s.vfat -F 16 ${DISK}1 -n boot
$ sudo mkf= s.ext4 ${DISK}2 -L rootfs
=20
=20
=20

Mount Partitions:

On some systems, these partitions may be auto-mounted...

=20
=20
=20
$ sudo mkd= ir -p /media/boot/
$ sudo mkd= ir -p /media/rootfs/
 
for: DISK=3D/dev/mmcblk0
$ sudo mou= nt ${DISK}p1 /media/boot/
$ sudo mou= nt ${DISK}p2 /media/rootfs/
 
for: DISK=3D/dev/sdX
$ sudo mou= nt ${DISK}1 /media/boot/
$ sudo mou= nt ${DISK}2 /media/rootfs/
=20
=20
=20

Install = Boot File (imx-boot-<machine name>-sd.bin-flash_evk)

Boot file is factory default flashed at on-module eMMC flash.

If on-module eMMC Flash is empty<= /strong>

In some cases, when eMMC flash is erased = or the u-boot is under development, we need a way to boot from microSD card= first. Users need to set the SW2 port 1-3 as (ON ON ON). In this way, = ;pITX-MX8M-PLUS will always boot up from SD card. 

Fuse flash.bin to the microSD card. =

=20
=20

~/smarc-imx8mp-gatesgarth-release/<build dir>/tmp/= deploy/images/<machine name>/

=20
=20

$ sudo dd if=3D<boot file> of=3D${DISK} bs=3D1024 seek=3D32
=20
=20
=20

If on-module eMMC Flash is not em= pty

The <boot file> = is pre-installed in on-module eMMC flash at factory default. pITX-= MX8M-PLUS is designed to always boot up from on-module eMMC flash= and to load Image, device tree blob and root file systems based on the set= ting of SW2 port 1-3. If users need to fuse your own flash.bin or perf= orm u-boot upgrade. This section will instruct you how to do that.

Copy <boot file> to the second part= ition home directory of your microSD card and boot into microSD card. Go to= home directory and you should see flash.bin file. 

=20
=20

~/smarc-imx8mp-gatesgarth-release/<build dir>/tmp/= deploy/images/<machine name>/

=20
=20

$ sudo cp -v <boot file> /media/rootfs/home/root/
=20
=20
=20

Fuse <boot file> to the on-module e= MMC flash. (The eMMC flash is emulated as /dev/mmcblk2 in pITX-MX8= M-PLUS)

=20
=20

home directory

=20
=20

$ sudo dd if=3D<boot file> of=3D/dev/mmcblk2 bs=3D1024 see= k=3D32

=20
=20
=20
=20 Icon=20
=20
  1. If your u-boot hasn't been finalized= and still under development, it is recommended to set the SW2 port 1-3 as = (ON ON ON) and boot directly from microSD card first. Once your u-boot is f= ully tested and finalized, you can fuse your <boot file> to eMMC flash= .
  2. When SW2 port 1-3 is set (OFF ON OFF= ) in pITX-MX8M-PLUS, it will always boot up from on-module eMMC fl= ash. U-boot will read the SW2 configuration and determine where it= should load Image and device tree blob. When SW2 port 1-3 is set (ON ON ON= ) it will always boot up from microSD card.
=20
=20
=20

uEnv.txt based bootscript

Create "uEnv.txt" boot script: ($ vim uEnv.txt)

=20
=20

~/uEnv.txt

=20
=20

optargs=3D"video=3DHDMI-A-1:1920x1080-32@60 consoleblank=3D0"<= br />#optargs=3D"video=3DHDMI-A-1:3840x2160-32@30 consoleblank=3D0&quo= t;
#optargs=3D"video=3DHDMI-A-1:3840x2160-32@60 consoleblank=3D0&= quot;
console=3Dttymxc3,115200 earlycon=3Dec_imx6q,0x30a60000,115200mmcdev=3D1
mmcpart=3D1
image=3DImage
loadaddr=3D0x404800= 00
fdt_addr=3D0x43000000
mmcroot=3D/dev/mmcblk1p2 rw
usbroot= =3D/dev/sda2 rw
mmcrootfstype=3Dext4 rootwait fixrtc
netdev=3Deth= 0
ethact=3DFEC0
ipaddr=3D192.168.1.150
serverip=3D192.168.1.= 53
gatewayip=3D192.168.1.254
mmcargs=3Dsetenv bootargs console=3D= ${console} root=3D${mmcroot} rootfstype=3D${mmcrootfstype} ${optargs}
= uenvcmd=3Drun loadimage; run loadfdt; run mmcboot
# USB Boot
#usb= args=3Dsetenv bootargs console=3D${console} root=3D${usbroot} rootfstype=3D= ${mmcrootfstype} ${optargs}
#uenvcmd=3Drun loadusbimage; run loadusbfd= t; run usbboot

=20
=20
=20

Copy uEnv.txt to the boot partition:

=20
=20

~/

=20
=20
$ sudo cp -v ~/uEnv.txt /media/boot/
=20
=20
=20

Install Kernel Image

Copy Image to the boot partition:

=20
=20

~/smarc-imx8mp-gatesgarth-release/<build dir>/tmp/= deploy/images/<machine name>/

=20
=20
$ sudo cp -v Image /media/boot
=20
=20
=20

Install Kernel Device Tree Binary<= /h3>=20
=20

~/smarc-imx8mp-gategarth-release/<build dir>/tmp/d= eploy/images/<machine name>/

=20
=20

$ sudo mkdir -p /media/boot/dtbs

$ sudo cp -v <device tree= name> /media/boot/dtbs/imx8mp-pitx.dtb

= =20
=20
=20

All available DTB files are listed in= the table below.

DTB File Name Description
= imx8mp-pitx.dtb Device tree b= lob for no display configuration.
= imx8mp-pitx-hdmi.dtb Device tree b= lob for HDMI display configuration.
= imx8mp-pitx-lvds.dtb Device tree b= lob for LVDS display configuration.
= imx8mp-pitx-m7.dtb Device tree b= lob for Cortex-M7 co-processor configuration.
=20
= =20
=20

The device tree name in your microSD card has be to imx8mp-pit= x.dtb

=20
=20
=20

Install Root File System


Copy Root File System:

Yocto Built Rootfs:

=20
=20

~/smarc-imx8mp-gatesgarth-release/<build dir>/tmp/= deploy/images/<machine name>/

=20
=20
$ sudo tar jxvf <filename.tar.bz2> -C /media/rootfs
=20
=20
=20
=20

Note

=20 Icon=20
=20
  1. pITX-MX8M-PLUS always boots up from on-module eMMC flash first= . The firmware in eMMC flash is factory pre-installed from Embedian. It wil= l read the SW2 port 1-3 configuration on your carrier board and lo= ad Image and device tree blob from the partition one of the device (could b= e microSD card or eMMC) that you selected.
  2. MAC address is factory pre-installed at on board I2C EEPROM at offset 6= 0 bytes. It starts with Embedian's vendor code 10:0D:32. u-boot wi= ll read it and pass this parameter to kernel.
  3. The kernel modules is included in the Yocto rootfs.
=20
=20
=20

Remove microSD card:

=20
=20
=20
$ sync
$ sudo umo= unt /media/boot
$ sudo umo= unt /media/rootfs
=20
=20
=20

Setup microSD Card Automatically

This section tells you how to set up an microSD card automatically. It m= ainly uses a script to do all the steps in the above section.

=20
=20
=20

$ cd ~/pitx-imx8mp-gatesgart= h-release

$ sudo MACHINE=3Dpitximx8mp4g sources/meta-pitximx8mp-gatesgarth/scripts/emb= _mk_yocto_sdcard/emb-create-yocto-sdcard.sh /dev/sdX=20

=20
=20
=20 Icon=20
=20

The default output display is HDMI. If you need to use other device tree= output, change "DISPLAY" parameters in the script.

=20
=20
=20

Set SW2 port 1-3 as (ON ON ON). Th= e module will boot up from microSD card.  

Feed Packages 


You need to setup Apache2 web server = on your development host machine first.

The Apache server default web page directory is /var/w= ww/html .We need to pop= ulate it with a link pointing to our deb package repository.

 

=20
=20 Icon=20
=20
sudo ln -s /path/to/build-yocto/tmp/deploy/deb /var/www/html/deb
= =20
=20
=20

 

The following procedure can be used o= n a Embedian pITX-MX8M-PLUS<= /em> device to download and utilize the feed file show above to= install the tcpdump<= /em> terminal emulation prog= ram:

=20
=20
=20

# vim /etc/apt/sources.list.= d/yocto.list

Only keep the following four lines= :

deb https://<ip address&g= t;/all ./

deb http://<ip address>= ;/cortexa53-crypto ./

deb http://<ip address>= ;/cortexa53-crypto-mx8mp ./

deb http://<ip address>= ;/pitximx8mp4g ./

=20
=20
=20
=20
=20 Icon=20
=20

# apt-get update

# apt-get upgrade

# apt-get install tcpdump

=20
=20
=20

 

Writing Bitbake Recipes


In order to package your application and include it in the root filesyst= em image, you must write a BitBake recipe for it.

When starting from scratch, it is easiest to learn by example from exist= ing recipes. 

Example HelloWorld recipe using autotools

For software that uses autotools (./configure; make; make install), writ= ing recipes can be very simple:

 

DESCRIPTION =3D  "Hello World Recipe using autotools"
HOMEPAGE =3D  "http://www.embedian.com/"
SECTION =3D  "console/utils"
PRIORITY =3D  "optional"
LICENSE =3D  "GPL"
PR =3D  "r0"
  
SRC_URI =3D  "git://git@git.embedian.com/developer/hello= world-autotools.git;protocol=3Dssh;tag=3Dv1.0"
S =3D  "${WORKDIR}/git"
  
inherit autotools

 

SRC_URI sp= ecifies the location to download the source from. It can take the form of a= ny standard URL using http://, ftp://, etc. It can also fetch from SCM syst= ems, such as git in the example above.

PR is the = package revision variable. Any time a recipe is updated that should require= the package to be rebuilt, this variable should be incremented.

inherit autotools brings in support for the package to be built using autotools, and = thus no other instructions on how to compile and install the software are n= eeded unless something needs to be customized.

S is the s= ource directory variable. This specifies where the source code will exist a= fter it is fetched from SRC_URI and unpacked. The default value is ${WORKDIR}/${PN}-${PV}, where PN&n= bsp;is the package name and PV is the package version. Both PN and PV are set by default using the = filename of the recipe, where the filename has the format PN_PV.bb.

Example HelloWorld recipe using a single source file

This example shows a simple case of building a helloworld.c file directl= y using the default compiler (gcc). Since it isn=E2=80=99t using autotools = or make, we have to tell BitBake how to build it explicitly.

 

DESCRIPTION =3D  "HelloWorld"
SECTION =3D  "examples"
LICENSE =3D  "GPL"
  
SRC_URI =3D  "file://helloworld.c"
  
S =3D  "${WORKDIR}"
  
do_compile() {
     ${CC} ${CFLAGS} ${LDFLAGS} helloworld.c -o hellow= orld
}
  
do_install() {
     install -d ${D}${bindir}
     install -m 0755 helloworld ${D}${bindir}
}

 

In this case, SRC_URI specifies a file that must exist locally with the recipe. = Since there is no code to download and unpack, we set S to WORKDIR since that is where he= lloworld.c will be copied to before it is built.

WORKDIR is= located at ${OETREE}/<= build directory>/tmp/work/cortexa53-crypto-poky-linux/<package name a= nd version> for most packages. If the package is mach= ine-specific (rather than generic for the aarxh64 architecture), it may be = located in the cortexa53-crypto-poky-linux subdirectory depending on y= our hardware (this applies to kernel packages, images, etc).

do_compile = ;defines how to compile the source. In this case, we just call gcc directly= . If it isn=E2=80=99t defined, do_compile runs make in the source directory by default.

do_install = ;defines how to install the application. This example runs install to create a bin = directory where the application will be copied to and then copies the appli= cation there with permissions set to 755.

D is the d= estination directory where the application is installed to before it is pac= kaged.

${bindir} = is the directory where most binary applications are installed, typically&nb= sp;/usr/bin.

For a more in-depth explanation of BitBake recipes, syntax, and variable= s, see the Recipe Ch= apter of the OpenEmbedded User Manual.

Setup eMMC Manually


Setting up eMMC usually is the last step at development stage after the = development work is done at your microSD card or NFS environments. From sof= tware point of view, eMMC is nothing but a non-removable microSD card on bo= ard. For pITX-MX8M-PLUS= , the microSD card is always emulated as /dev/mmcblk1 and on-module = eMMC is always emulated as /dev/mmcblk2. Setting up eMMC now is nothing but= changing the device descriptor. 

This section gives a step-by-step procedure to setup eMMC flash. Users c= an write a shell script your own at production to simplify the steps.

First, we need to backup the final firmware from your microSD card or NF= S.

Prepare for eMMC binaries= from microSD card (or NFS):

Insert microSD card into your Linux PC. For these instructions, we are a= ssuming: DISK=3D/dev/mmcblk0, "lsblk" is very useful for determin= ing the device id.

For these instruction, we are assuming: DISK=3D/dev/mmcblk0, "lsblk= " is very useful for determining the device id.

=20
=20
=20
$ export DISK=3D/dev/mmcblk0
=20
=20
=20

Mount Partitions:

On some systems, these partitions may be auto-mounted...

=20
=20
=20
$ sudo mkd= ir -p /media/boot/
$ sudo mkd= ir -p /media/rootfs/
 
for: DISK=3D/dev/mmcblk0
$ sudo mou= nt ${DISK}p1 /media/boot/
$ sudo mou= nt ${DISK}p2 /media/rootfs/
 
for: DISK=3D/dev/sdX
$ sudo mou= nt ${DISK}1 /media/boot/
$ sudo mou= nt ${DISK}2 /media/rootfs/
=20
=20
=20

 

Copy Image to rootfs pa= rtition:

=20
=20

~/smarc-imx8mp-gatesgarth-release/<build dir>/tmp/= deploy/images/<machine name>

=20
=20
$ sudo cp -v Image /media/rootfs=
/home/root
=20
=20
=20

Copy uEnv.txt to rootfs= partition:

Copy and paste the following contents to /media/rootfs/home/root ($ sudo= vim /media/rootfs/home/root/uEnv.txt)

=20
=20
=20

optargs=3D"video=3DHDMI-A-1:1920x1080-32@60 consoleblank=3D0"<= br />#optargs=3D"video=3DHDMI-A-1:3840x2160-32@30 consoleblank=3D0&quo= t;
#optargs=3D"video=3DHDMI-A-1:3840x2160-32@60 consoleblank=3D0&= quot;
console=3Dttymxc3,115200 earlycon=3Dec_imx6q,0x30a60000,115200mmcdev=3D2
mmcpart=3D1=
image=3DImage
loadaddr=3D0x40480000
fdt_addr=3D0x43000000mmcroot=3D/dev/mmcblk2p2 rw=
usbroot=3D/dev/sda2 rw
mmcrootfstype=3Dext4 rootwait fixrtc
netdev=3Deth0
ethact=3DFEC0
ipaddr=3D192.168.1.150
serverip= =3D192.168.1.53
gatewayip=3D192.168.1.254
mmcargs=3Dsetenv bootar= gs console=3D${console} root=3D${mmcroot} rootfstype=3D${mmcrootfstype} ${o= ptargs}
uenvcmd=3Drun loadimage; run loadfdt; run mmcboot
# USB B= oot
#usbargs=3Dsetenv bootargs console=3D${console} root=3D${usbroot} = rootfstype=3D${mmcrootfstype} ${optargs}
#uenvcmd=3Drun loadusbimage; = run loadusbfdt; run usbboot

=20
=20
=20

Copy device tree blob t= o rootfs partition:

=20
=20

~/smarc-imx8mp-gatesgarth-release/<build dir>/tmp/= deploy/images/<machine name>

=20
=20
$ sudo cp -v <device tree blo=
b> /media/rootfs/home/root/imx8mp-pitx.dtb
=20
=20
=20

Copy real rootfs to roo= tfs partition:

=20
=20
=20
$ pushd /media/rootfs
$ sudo tar cvfz ~/pitximx8=
mp-emmc-rootfs.tar.gz .
$ sudo mv ~/pitximx8mp-emm=
c-rootfs.tar.gz /media/rootfs/home/root
$ popd
= =20
=20
=20

Remove SD card:

=20
=20
=20
$ sync
$ sudo umo= unt /media/boot
$ sudo umo= unt /media/rootfs
=20
=20
=20

Copy Binaries to eMMC from microSD c= ard:

Insert this microSD card into your pITX-MX8M-PLUS device.

Now it will be almost the same as you did when setup your microSD card, = but the eMMC device descriptor is =20

=20
$ export DISK=3D/dev/mmcblk2
=20
=20
=20

Erase eMMC:

=20
=20
=20

$ sudo = dd if=3D/dev/zero of=3D${DISK} bs=3D2M count=3D16

=20
=20
=20

Create Partition Layout:

=20
=20
=20
$ sudo sfdisk ${DISK} <<-= __EOF__
2M,<= /code>48M,0x83,*
50M,,,
__EOF__
=20
=20
=20

Format Partitions:

=20
=20
=20
$ sudo mkfs.vfat -F 16 ${DISK}p1 -n boot
$ sudo mkfs.ext4 ${DISK}p2 -L rootfs
=20
=20
=20

Mount Partitions:

=20
=20
=20
$ sudo mkd= ir -p /media/boot/
$ sudo mkd= ir -p /media/rootfs/
$ sudo mou= nt ${DISK}p1 /media/boot/
$ sudo mou= nt ${DISK}p2 /media/rootfs/
=20
=20
=20

Install binaries for partition 1

Copy uEnv.txt/Image/*.dtb to the boot partition

=20
=20
=20

$ sudo cp = -v Image uEnv.txt /media/boot/
=20
=20
=20

Install Kernel Device Tree Binary

=20
=20
=20
$ sudo mkdir -p /media/boot/dtbs=
$ sudo cp -v imx8mp-pitx.dtb /me=
dia/boot/dtbs/
=20
=20
=20

Install Root File System


=20
=20
=20
$ sudo tar -zxvf pitximx8mp-emmc=
-rootfs.tar.gz -C /media/rootfs
=20
=20
=20

 

Unmount eMMC:

=20
=20
=20
$ sync
$ sudo umo= unt /media/boot
$ sudo umo= unt /media/rootfs
=20
=20
=20

 

Switch your Boot Select to eMMC and you will be able to boot up from eMM= C now.

Setup eMMC Automatically 


Boot up the module from microSD card and run the following script. The Y= octo images will be written into on-module eMMC.

=20
=20
=20

$ emb-create-yocto-emmc.sh /= dev/mmcblk2 >/dev/null 2>&1

=20
=20
=20

 Shutdown the device. Se= t SW2 port 1-3 as (OFF ON OFF)= . The module will boot up from on-module eMMC. 

Video Decoding


For playing video, we can use three solutions to support it. <= /span>

a) # gplay-1.0 <video file>

b) # gst-launch-1.0 playbin uri=3Dfile://<video absolute path>

c) ( i ) if video container on .mp4 format

          # gst-launch-1.0 fil= esrc location=3D<file name.mp4> typefind=3Dtrue ! video/quicktime ! q= tdemux ! queue max-size-time=3D0 ! vpudec ! queue max-size-time=3D0 ! kmssi= nk force-hantrope=3Dtrue sync=3Dfalse &

    ( ii ) if video container on .ts format

         # gst-launch-1.0 filesrc location=3D&l= t;file name.ts> typefind=3Dtrue ! video/mpegts ! tsdemux ! queue max-siz= e-time=3D0 ! vpudec ! queue max-size-time=3D0 ! waylandsink

 

WiFi 


The BSP includes NXP 88W8997 wifi chi= pset. Users can choose mPCIe or M.2 key E form factor wifi modules based on= NXP 88W8997 chipset. 

M.2 Form Factor:

  • AzureWave P/N: AW-CM276MA-PUR<= /span>
  • Laird Connectivity P/N: 60-223= 0C
  • Embedded Artists 1YM M.2 Modul= e

mPCIe Factor:<= /span>

  • Globascale Technologies NXP 88= W8997 2x2 WiFi 802.11ac+BT 5.0 mini PCIe Card w/ Two External SMA Antennas<= /span>


Get 88W8997 Firmware

 

=20
=20
=20
$ git clone https://github.com/NXP/imx-firmware.git -b lf-5.10.y_1.0.0<=
/span>
=20
=20
=20

Copy the firmware imx-firmware/n= xp/FwImage_8997/pcieuart8997_combo_v4.bin into device /lib/firmware/nxp/ di= rectory. (Replace the original one)

Boot up the device and load the dr= iver modules in the kernel.

=20
=20
=20

root@pitximx8mp4g:~# modprobe= moal mod_para=3Dnxp/wifi_mod_para.conf
[ 33.83478= 2] can2-stby: disabling
[ 33.838051] VSD1_3V3: disabling<= /code>

[ 33.979809] wlan: Loading MWLAN driver
[ 33.984= 701] wlan_pcie 0000:01:00.0: enabling device (0000 -> 0002)
= [ 33.991014] Attach moal handle ops, card interface type: 0x204
[ 34.000829] PCIE8997: init module param from usr cfg[ 34.005845] card_type: PCIE8997, config block: 0
[ 34.010483] cfg80211_wext=3D0xf

[ 34.013465] wfd_name= =3Dp2p
[ 34.016011] max_vir_bss=3D1
[ 3= 4.018632] cal_data_cfg=3Dnone
[ 34.021611] drv_mode =3D 7=
[ 34.024159] ps_mode =3D 2
[ 34.026604= ] auto_ds =3D 2
[ 34.029084] fw_name=3Dnxp/pcieua= rt8997_combo_v4.bin
[ 34.033830] rx_work=3D1 cpu= _num=3D4
[ 34.037010] Attach mlan adapter operations.card= _type is 0x204.
[ 34.046917] Request firmware: nxp/pcieua= rt8997_combo_v4.bin
[ 35.013725] FW download over, size 6= 27620 bytes
[ 35.879247] WLAN FW is active
[ 35.882226] on_time is 35807347500
= [ 35.917890] fw_cap_info=3D0x18fcffa3, dev_cap_mask=3D0xffffffff
[ 35.923500] max_p2p_conn =3D 8, max_sta_conn =3D 8
[ 35.956580] wlan: version =3D PCIE8997-16.68.10.p16-MXM5X16214-GPL-(FP9= 2)

[ 35.966307] wlan: Driver loaded successfully<= /strong>
root@pitximx8mp4g:~#

=20
=20
=20


Verify that the module is no= w visible to the system.
 =

=20
=20
=20

root@pitximx8mp4g:~# ifconfig= -a
can0: flags=3D128<NOARP> mtu 16 unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuele= n 10 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
<= code> RX errors 0 dropped 0 overruns 0 frame 0

TX packet= s 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 car= rier 0 collisions 0
device interrupt 35

can1: flags=3D128<NOARP> mtu 16
unspec 00= -00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 10 (UNSPEC)=
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dr= opped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)<= /code>
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0<= /code>
device interrupt 36

eth0: flags=3D4099<UP,BROADCAST,MULTICAST> mtu 1500 ether 10:0d:32:01:00:01 txqueuelen 1000 (Ethernet)
<= code> RX packets 0 bytes 0 (0.0 B)

RX errors 0 dropped 0= overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)<= br /> TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0<= /p>

eth1: flags=3D4099<UP,BROADCAST,MULTICAST> mtu 1500 ether 10:0d:32:02:00:01 txqueuelen 1000 (Ethernet)
<= code> RX packets 0 bytes 0 (0.0 B)

RX errors 0 dropped 0= overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)<= br /> TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0<= br /> device interrupt 54

lo: flags=3D73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixle= n 128 scopeid 0x10<host>
loop txqueuelen 1000 (Loc= al Loopback)
RX packets 3452 bytes 216146 (211.0 KiB)

RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3452 bytes 216146 (211.0 KiB)

TX errors 0 d= ropped 0 overruns 0 carrier 0 collisions 0

mlan0: flags=3D4099<UP,BROADCAST,MULTICAST>= mtu 1500
ether 4a:6b:15:b3:7f:a4 txqueuelen 1000 (Etherne= t)
RX packets 0 bytes 0 (0.0 B)
RX er= rors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0= (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 coll= isions 0

p2p0: flags=3D4099<UP,BROADCAST,MULTICAST> mtu 1500 ether 2a:08:86:b1:27:cb txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)

RX errors 0 dropped 0 o= verruns 0 frame 0
TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

uap0: flags=3D4099<UP,BROADCAST,MULTICAST> mtu 1500 ether 5a:57:c4:46:2b:68 txqueuelen 1000 (Ethernet)
= RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped = 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)=
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0=

root@pitximx8mp4g:~#

=20
=20
=20


In case you need to see whic= h network and you can scan it and select the one you need.
 

=20
=20
=20

root@pitximx8mp4g:~# iwlist m= lan0 scan
mlan0 Scan completed :
Cell 01 - Address: D8:FE:E3:5F:68:98
ESSID:"Riset= ek"
Mode:Master
Frequency=3D2.41= 2 GHz (Channel 1)

=20
=20
=20


Identify the network and add= it to the WPA supplicant file.

=20
=20
=20

root@pitximx8mp4g:~# vim /etc= /wpa_supplicant.conf

=20
=20
=20
=20
=20

ctrl_interface=3D/var/run/wpa_supplicant
ctrl_in= terface_group=3D0
update_config=3D1

network=3D{
scan_ssid=3D1
ss= id=3D"embedian"
psk=3D"xxxxxxxxxx"
}

=20
=20
=20


Associate the Wi-Fi with con= fig

=20
=20
=20

root@pitximx8mp4g:~# wpa_supp= licant -B -i mlan0 -c /etc/wpa_supplicant.conf
Suc= cessfully initialized wpa_supplicant
nl80211: kernel repo= rts: Match already configured
nl80211: kernel reports: Ma= tch already configured
nl80211: kernel reports: Match alr= eady configured
nl80211: kernel reports: Match already configured
nl80211: kernel reports: Match alre= ady configured
nl80211: kernel reports: Match already con= figured
nl80211: kernel reports: Match already configured=
nl80211: kernel reports: Match already configured=
nl80211: kernel reports: Match already configured
<= code>nl80211: kernel reports: Match already configured

nl= 80211: kernel reports: Match already configured
nl80211: = kernel reports: Match already configured
nl80211: kernel = reports: Match already configured
nl80211: kernel reports= : Match already configured
nl80211: kernel reports: Match= already configured
nl80211: kernel reports: Match alread= y configured
nl80211: kernel reports: Match already confi= gured
nl80211: kernel reports: Match already configured
nl80211: kernel reports: Match already configurednl80211: kernel reports: Match already configured
nl80211: kernel reports: Match already configured

nl80= 211: kernel reports: Match already configured
rfkill: Can= not open RFKILL control device
root@pitximx8mp4g:~#

=20
=20
=20


Check if you have right SSID= associated.

=20
=20
=20

root@pitximx8mp4g:~# iwconfig= mlan0
mlan0 IEEE 802.11-DS ESSID:"em= bedian" [14]
Mode:Managed Frequency=3D5.74= 5 GHz Access Point: 48:EE:0C:ED:D7:38
Bit Rate:6.5 Mb/s = Tx-Power=3D24 dBm
Retry limit:9 RTS thr=3D2347 B Fragmen= t thr=3D2346 B
Encryption key:****-****-****-****-****-*= ***-****-****-****-****-****-****-****-****-****-****-****-****-****-****-*= ***-****-****-****-****-****-****-****-****-****-****-**** Security mode:open
Power Management:off
Link Quality= =3D3/5 Signal level=3D-66 dBm Noise level=3D-91 dBm
Rx i= nvalid nwid:0 Rx invalid crypt:0 Rx invalid
frag:27439
= Tx excessive retries:8 Invalid misc:24 Missed beacon:0

root@pitximx8mp4g:~#

=20
=20
=20


Use DHCP to get IP
=20

=20
=20

root@pitximx8mp4g:~# udhcpc -= i mlan0
udhcpc: started, v1.32.0
udhcpc: sending discover

udhcpc: sending select for 192.168.1.57

udhcpc: lease of 192.168.1.57 o= btained, lease time 86400
/etc/udhcpc.d/50default: Adding= DNS 192.168.1.254
root@pitximx8mp4g:~#

=20
=20
=20


You should be able to ping l= ocal network now.

=20
=20
=20

root@pitximx8mp4g:~# ping 192= .168.1.10
PING 192.168.1.10 (192.168.1.10) 56(84) = bytes of data.
64 bytes from 192.168.1.10: icmp_seq=3D1 t= tl=3D64 time=3D2141 ms
64 bytes from 192.168.1.10: icmp_s= eq=3D2 ttl=3D64 time=3D1120 ms
64 bytes from 192.168.1.10= : icmp_seq=3D3 ttl=3D64 time=3D95.7 ms
64 bytes from 192.= 168.1.10: icmp_seq=3D4 ttl=3D64 time=3D1.63 ms

=20
=20
=20

 

Modify /etc/resolv.conf of your preference, you will be able to ping out= .

=20
=20
=20

root@pitximx8mp4g:~# vim /etc= /resolv.conf

=20
=20
=20
=20
=20

nameserver 8.8.8.8
nameserver 8.8.4.4

= =20
=20
=20
=20
=20

root@pitximx8mp4g:/etc# ping www.google.com
PING www.google.com (172.217.163.36) 56(84) bytes of data.
64 bytes from maa05s01-in-f4.1e100.net (172.217.163.36): icm= p_seq=3D1 ttl=3D117 time=3D7.23 ms
64 bytes from tsa01s13= -in-f4.1e100.net (172.217.163.36): icmp_seq=3D2 ttl=3D117 time=3D39.7 ms
64 bytes from maa05s01-in-f4.1e100.net (172.217.163.36): ic= mp_seq=3D3 ttl=3D117 time=3D7.50 ms
64 bytes from tsa01s1= 3-in-f4.1e100.net (172.217.163.36): icmp_seq=3D4 ttl=3D117 time=3D5.29 ms
64 bytes from tsa01s13-in-f4.1e100.net (172.217.163.36): i= cmp_seq=3D5 ttl=3D117 time=3D4.65 ms
64 bytes from tsa01s= 13-in-f4.1e100.net (172.217.163.36): icmp_seq=3D6 ttl=3D117 time=3D5.01 ms<= /code>

--- www.google.com ping statistics ---<= br />6 packets transmitted, 6 received, 0% packet loss, time 5010ms
rtt min/avg/max/mdev =3D 4.649/11.560/39.682/12.623 ms

=20
=20
=20

 

version 1.0a, 8/18/2022

Last updated 2022-08-18

------=_Part_5208_1394275405.1711629282372--