Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin


...

This

...

is

...

a

...

page

...

about

...

the

...

Freescale

...

based

...

i.MX7;

...

PICO-PI-IMX7.

...

hide-comments

...

Table of Contents

...

indent

...

20px

...

style

...

disc

Availability

Boards:
1406-0013-ND

...

at

...

Digi-Key

...

Vendor Documentation

...

    • PICO-PI-IMX7-DEV:

...

...

Basic Requirements

  • Running a recent supported release of Debian, Fedora or Ubuntu on a x86 64bit based PC; without OS Virtualization Software.
  • Many of the listed commands assume /bin/bash as the default shell.
  • ARM Cross Compiler – Linaro: https://www.linaro.org

...

    • Linaro

...

    • Toolchain

...

    • Binaries:

...

...

  • Bootloader
    • Das U-Boot

...

    • the

...

    • Universal

...

    • Boot

...

    • Loader:

...

...

    • Source:

...

...

  • Linux

...

  • Kernel

...

    • Linus's

...

    • Mainline

...

    • tree:

...

...

  • ARM

...

  • based

...

  • rootfs

...

    • Debian:

...

...

    • Ubuntu:

...

...

imx_usb_loader

...

imx_usb_loader

...

USB

...

&

...

UART

...

loader

...

for

...

i.MX5/6/7/8

...

series:

...


Source:

...

https://github.com/boundarydevices/imx_usb_loader

...


Download/build:

...

:=}
Code Block
title
user@localhost:~$
git clone https://github.com/boundarydevices/imx_usb_loader
cd imx_usb_loader/
make
{code}
 
h2. ARM Cross 

ARM Cross Compiler:

...

GCC

...

This

...

is

...

a

...

pre-built

...

(64bit)

...

version

...

of

...

GCC

...

that

...

runs

...

on

...

generic

...

linux,

...

sorry

...

(32bit)

...

x86

...

users,

...

it's

...

time

...

to

...

upgrade...

...


Download/Extract:

...

:=}
Code Block
title
user@localhost:~$
wget -c https://releases.linaro.org/components/toolchain/binaries/6.5-2018.12/arm-linux-gnueabihf/gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf.tar.xz
tar xf gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf.tar.xz
export CC=`pwd`/gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
{code}

Test

...

Cross

...

Compiler:

...

:=}
Code Block
title
user@localhost:~$
${CC}gcc --version
{code}
{code:title=Test Output:}
Code Block
titleTest Output:
arm-linux-gnueabihf-gcc (Linaro GCC 6.5-2018.12) 6.5.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
{code}
 
h2. 

Bootloader:

...

U-Boot

...

Das

...

U-Boot

...

the

...

Universal

...

Boot

...

Loader:

...

http://www.denx.de/wiki/U-Boot

...


Download:

...

:=}
Code Block
title
user@localhost:~$
git clone -b v2021.01 https://github.com/u-boot/u-boot --depth=1
cd u-boot/
{code}

Configure

...

and

...

Build:

...

:=}
Code Block
title
user@localhost:~/u-boot$
make ARCH=arm CROSS_COMPILE=${CC} distclean
make ARCH=arm CROSS_COMPILE=${CC} pico-pi-imx7d_defconfig
make ARCH=arm CROSS_COMPILE=${CC}
{code}
 
h2. 

Bootloader:

...

imx_usb_loader

...

Place

...

the

...

board

...

into

...

USB

...

boot

...

mode,

...

setting

...

these

...

Jumpers:

...


Image Added
Power Board and Check lsusb:

}
Code Block
titleuser@localhost:~/u-boot$
lsusb | grep Freescale
Bus 00x Device 00y: ID 15a2:0076 Freescale Semiconductor, Inc
{code}

Load

...

the

...

SPL

...

binary

...

via

...

USB:

...

:=}
Code Block
title
user@localhost:~/u-boot$
sudo ~/imx_usb_loader/imx_usb SPL
{code}

Load

...

the

...

u-boot-dtb.img

...

binary

...

via

...

USB:

...

:=}
Code Block
title
user@localhost:~/u-boot$
sudo ~/imx_usb_loader/imx_usb u-boot-dtb.img
{code}

Using

...

any

...

key,

...

break

...

into

...

U-Boot

...

Console:

...

:=}
Code Block
title
SERIAL_CONSOLE_U_BOOT
Loading Environment from MMC... OK
In:    serial
Out:   serial
Err:   serial
Net:   FEC0
Hit any key to stop autoboot:  0 
=> 
{code}

Use

...

the

...

default

...

environment

...

variables:

...

:=}
Code Block
title
SERIAL_CONSOLE_U_BOOT
=> env default -f -a
=> setenv bootm_boot_mode nonsec
=> saveenv
{code}

Configure

...

mmc

...

0

...

to

...

boot

...

from

...

the

...

data

...

partition,

...

and

...

disable

...

access

...

to

...

boot

...

partitions:

...

:=}
Code Block
title
SERIAL_CONSOLE_U_BOOT
=> mmc partconf 0 0 7 0
{code}

Run

...

the

...

DFU

...

agent

...

so

...

we

...

can

...

flash

...

the

...

new

...

images

...

using

...

dfu-util

...

tool:

...

:=}
Code Block
title
SERIAL_CONSOLE_U_BOOT
=> dfu 0 mmc 0
{code}

Load

...

the

...

SPL

...

binary

...

via

...

dfu-util:

...

:=}
Code Block
title
user@localhost:~/u-boot$
sudo dfu-util -D SPL -a spl
{code}

Load

...

the

...

SPL

...

binary

...

via

...

dfu-util:

...

:=}
Code Block
title
user@localhost:~/u-boot$
sudo dfu-util -R -D u-boot-dtb.img -a u-boot
{code}

Remove

...

power

...

and

...

place

...

the

...

board

...

into

...

eMMC

...

boot

...

mode,

...

setting

...

these

...

Jumpers:

...


Image Added
Power Board and enable U-Boot

...

USB

...

Mass

...

Storage

...

mode:

...

:=}
Code Block
title
SERIAL_CONSOLE_U_BOOT
Loading Environment from MMC... OK
In:    serial
Out:   serial
Err:   serial
Net:   FEC0
Hit any key to stop autoboot:  0 
=> ums 0 mmc 0
{code}

Verify

...

Linux

...

loaded

...

the

...

USB

...

Mass

...

Storage

...

device,

...

this

...

will

...

be

...

the

...

SD

...

Card

...

used

...

thru

...

out

...

this

...

wiki:

...

:=}
Code Block
title
user@localhost:~/u-boot$
lsusb | grep Netchip
Bus 00x Device 00y: ID 0525:a4a5 Netchip Technology, Inc. Pocketbook Pro 903
{code}
 
h2. Linux Kernel
This script will build the kernel, modules, device tree binaries and copy them to the deploy directory.
Download:
{code:title=user@localhost:~$}

Linux Kernel

This script will build the kernel, modules, device tree binaries and copy them to the deploy directory.
Download:

Code Block
titleuser@localhost:~$
git clone https://github.com/RobertCNelson/armv7-lpae-multiplatform
cd armv7-lpae-multiplatform/
{code}

For

...

v5.10.x

...

(Stable):

...

:=}
Code Block
title
user@localhost:~/armv7-lpae-multiplatform$
git checkout origin/v5.10.x -b tmp
{code}

Build:

...

:=}
Code Block
title
user@localhost:~/armv7-lpae-multiplatform$
./build_kernel.sh
{code}
 
h2. Root File System
h3. Debian 10
|| User || Password ||
| debian | temppwd |
| root | root |
Download:
{code:title=user@localhost:~$}

Root File System

Debian 10

User

Password

debian

temppwd

root

root

Download:

Code Block
titleuser@localhost:~$
wget -c https://rcn-ee.com/rootfs/eewiki/minfs/debian-10.4-minimal-armhf-2020-05-10.tar.xz
{code}
 

Verify:

...

:=}
Code Block
title
user@localhost:~$
sha256sum debian-10.4-minimal-armhf-2020-05-10.tar.xz
{code}
{code:title=sha256sum output:}
Code Block
titlesha256sum output:
cd598e42850cbef87602bf15ee343abfbf0d8c6ba81028c741672b5f24263534  debian-10.4-minimal-armhf-2020-05-10.tar.xz
{code}
 

Extract:

...

:=}
Code Block
title
user@localhost:~$
tar xf debian-10.4-minimal-armhf-2020-05-10.tar.xz
{code}
 
h3. Ubuntu 

Ubuntu 20.04

...

LTS

...

User

Password

ubuntu

temppwd

Download:

Code Block
titleuser@localhost:~$
wget -c https://rcn-ee.com/rootfs/eewiki/minfs/ubuntu-20.04-minimal-armhf-2020-05-10.tar.xz
{code}
 

Verify:

...

:=}
Code Block
title
user@localhost:~$
sha256sum ubuntu-20.04-minimal-armhf-2020-05-10.tar.xz
{code}
{code:title=sha256sum output:}xz
Code Block
titlesha256sum output:
de0177ac9259fdbcc626ee239f4258b64070c0921dbc38c45fab6925a5becaa1  ubuntu-20.04-minimal-armhf-2020-05-10.tar.xz
{code}
 

Extract:

...

:=}
Code Block
title
user@localhost:~$
tar xf ubuntu-20.04-minimal-armhf-2020-05-10.tar.xz
{code}
 
h2. Setup microSD card
We need to access the External Drive to be utilized by the target device. Run lsblk to help figure out what linux device has been reserved for your External Drive.
{code:title=Example: for 

Setup microSD card

We need to access the External Drive to be utilized by the target device. Run lsblk to help figure out what linux device has been reserved for your External Drive.

}
Code Block
titleExample: for DISK=/dev/sdX
lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 465.8G  0 disk
├─sda1   8:1    0   512M  0 part /boot/efi
└─sda2   8:2    0 465.3G  0 part /                <- Development Machine Root Partition
sdb      8:16   1   962M  0 disk                  <- microSD/USB Storage Device
└─sdb1   8:17   1   961M  0 part                  <- microSD/USB Storage Partition
{code}
{code:title=Thus you would use:}
Code Block
titleThus you would use:
export DISK=/dev/sdb
{code}
{code:title=
}
Code Block
titleExample:
for
DISK=/dev/mmcblkX
lsblk
NAME      MAJ:MIN   RM   SIZE RO TYPE MOUNTPOINT
sda         8:0      0 465.8G  0 disk
├─sda1      8:1      0   512M  0 part /boot/efi
└─sda2      8:2      0 465.3G  0 part /                <- Development Machine Root Partition
mmcblk0     179:0    0   962M  0 disk                  <- microSD/USB Storage Device
└─mmcblk0p1 179:1    0   961M  0 part                  <- microSD/USB Storage Partition
{code}
{code:title=Thus you would use:}
Code Block
titleThus you would use:
export DISK=/dev/mmcblk0
{code}
 
Erase partition 

Erase partition table/labels

...

on

...

microSD

...

card:

...

}
Code Block
sudo dd if=/dev/zero of=${DISK} bs=1M count=10
{code}
 
Install 

Install Bootloader:

...

:=}
Code Block
title
user@localhost:~$
sudo dd if=./u-boot/SPL of=${DISK} seek=1 bs=1k
sudo dd if=./u-boot/u-boot-dtb.img of=${DISK} seek=69 bs=1k
{code}

Create

...

Partition

...

Layout:

...


With

...

util-linux

...

v2.26,

...

sfdisk

...

was

...

rewritten

...

and

...

is

...

now

...

based

...

on

...

libfdisk.

...

:= }
Code Block
title
Check
the
version
of
sfdisk
installed
on
your
pc
sudo sfdisk --version
{code}
{code:title=Example Output}
Code Block
titleExample Output
sfdisk from util-linux 2.27.1
{code}
{code:title=sfdisk >= 1
}
Code Block
titlesfdisk >= 2.26.x
sudo sfdisk ${DISK} <<-__EOF__
1M,,L,*
__EOF__
{code}
{code:title=sfdisk 
}
Code Block
titlesfdisk <=
2.25.x
sudo sfdisk --unit M ${DISK} <<-__EOF__
1,,L,*
__EOF__
{code}
 
Format 

Format Partition:

...

}
Code Block
for: DISK=/dev/mmcblkX
sudo mkfs.ext4 -L rootfs ${DISK}p1
 
for: DISK=/dev/sdX
sudo mkfs.ext4 -L rootfs ${DISK}1
{code}

Mount

...

Partition:

...


On

...

most

...

systems

...

these

...

partitions

...

may

...

be

...

auto-mounted...

...

}
Code Block
sudo mkdir -p /media/rootfs/
 
for: DISK=/dev/mmcblkX
sudo mount ${DISK}p1 /media/rootfs/
 
for: DISK=/dev/sdX
sudo mount ${DISK}1 /media/rootfs/
{code}
 
h2. Install Kernel and Root File System
To help new users, since the kernel version can change on a daily basis. The kernel building scripts listed on this page will now give you a hint of what kernel version was built.
{code}

Install Kernel and Root File System

To help new users, since the kernel version can change on a daily basis. The kernel building scripts listed on this page will now give you a hint of what kernel version was built.

Code Block
-----------------------------
Script Complete
eewiki.net: [user@localhost:~$ export kernel_version=5.X.Y-Z]
-----------------------------
{code}
 
Copy and paste that "export 

Copy and paste that "export kernel_version=5.X.Y-Z"

...

exactly

...

as

...

shown

...

in

...

your

...

own

...

build/desktop

...

environment

...

and

...

hit

...

enter

...

to

...

create

...

an

...

environment

...

variable

...

to

...

be

...

used

...

later.

...

}
Code Block
export kernel_version=5.X.Y-Z
{code}
 
h3. Copy Root File System
{code:title=Debian; Root File System: user@localhost:~$}

Copy Root File System

Code Block
titleDebian; Root File System: user@localhost:~$
sudo tar xfvp ./debian-*-*-armhf-*/armhf-rootfs-*.tar -C /media/rootfs/
sync
sudo chown root:root /media/rootfs/
sudo chmod 755 /media/rootfs/
{code}
 
{code:title=
}
Code Block
titleUbuntu;
Root
File
System:
user@localhost:~$
sudo tar xfvp ./ubuntu-*-*-armhf-*/armhf-rootfs-*.tar -C /media/rootfs/
sync
sudo chown root:root /media/rootfs/
sudo chmod 755 /media/rootfs/
{code}
 
h3. Setup 

Setup extlinux.conf

...

:=}
Code Block
title
user@localhost:~$
sudo mkdir -p /media/rootfs/boot/extlinux/
sudo sh -c "echo 'label Linux ${kernel_version}' > /media/rootfs/boot/extlinux/extlinux.conf"
sudo sh -c "echo '    kernel /boot/vmlinuz-${kernel_version}' >> /media/rootfs/boot/extlinux/extlinux.conf"
sudo sh -c "echo '    append root=/dev/mmcblk2p1 ro rootfstype=ext4 rootwait quiet' >> /media/rootfs/boot/extlinux/extlinux.conf"
sudo sh -c "echo '    fdtdir /boot/dtbs/${kernel_version}/' >> /media/rootfs/boot/extlinux/extlinux.conf"
{code}
 
h3. Copy Kernel Image
Kernel Image:
{code:title=user@localhost:~$}

Copy Kernel Image

Kernel Image:

Code Block
titleuser@localhost:~$
sudo cp -v ./armv7-lpae-multiplatform/deploy/${kernel_version}.zImage /media/rootfs/boot/vmlinuz-${kernel_version}
{code}
 
h3. Copy Kernel Device Tree Binaries
{code:title=

Copy Kernel Device Tree Binaries

}
Code Block
titleuser@localhost:~$
sudo mkdir -p /media/rootfs/boot/dtbs/${kernel_version}/
sudo tar xfv ./armv7-lpae-multiplatform/deploy/${kernel_version}-dtbs.tar.gz -C /media/rootfs/boot/dtbs/${kernel_version}/
{code}
 
h3. Copy Kernel Modules
{code:title=

Copy Kernel Modules

}
Code Block
titleuser@localhost:~$
sudo tar xfv ./armv7-lpae-multiplatform/deploy/${kernel_version}-modules.tar.gz -C /media/rootfs/
{code}
 
h3. File Systems Table 

File Systems Table (/etc/fstab)

...

:=}
Code Block
title
user@localhost:~/$
sudo sh -c "echo '/dev/mmcblk2p1  /  auto  errors=remount-ro  0  1' >> /media/rootfs/etc/fstab"
{code}
 
h3. WiFi AP6335
{code:title=

WiFi AP6335

}
Code Block
titleuser@localhost:~$
wget -c https://raw.githubusercontent.com/buildroot/buildroot/master/board/technexion/imx7dpico/rootfs_overlay/lib/firmware/brcm/brcmfmac4339-sdio.txt
sudo mkdir -p /media/rootfs/lib/firmware/brcm/
sudo cp -v ./brcmfmac4339-sdio.txt /media/rootfs/lib/firmware/brcm/
{code}
 

Status:

...

}
Code Block
debian@arm:~$ dmesg | grep brcm
[   17.000227] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac4339-sdio for chip BCM4339/2
[   17.014290] usbcore: registered new interface driver brcmfmac
[   17.032649] brcmfmac mmc1:0001:1: Direct firmware load for brcm/brcmfmac4339-sdio.technexion,imx7d-pico-pi.txt failed with error -2
[   17.265035] brcmfmac: brcmf_fw_alloc_request: using brcm/brcmfmac4339-sdio for chip BCM4339/2
[   17.277324] brcmfmac: brcmf_c_process_clm_blob: no clm_blob available (err=-2), device may have limited channels available
[   17.290080] brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM4339/2 wl0: Feb 17 2016 18:29:33 version 6.37.32.RC23.34.42 (r608406)
 
debian@arm:~$ sudo ifconfig -a wlan0
wlan0: flags=-28669<UP,BROADCAST,MULTICAST,DYNAMIC>  mtu 1500
        ether 28:ed:e0:02:64:10  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
{code}
 
h3. Remove 

Remove microSD/SD

...

card

...

}
Code Block
sync
sudo umount /media/rootfs
{code}
 
Stop 

Stop U-Boot

...

USB

...

Mass

...

Storage

...

mode,

...

with

...

CTRL-C,

...

and

...

reset

...

the

...

board:

...

:=}
Code Block
title
SERIAL_CONSOLE_U_BOOT
Loading Environment from MMC... OK
In:    serial
Out:   serial
Err:   serial
Net:   FEC0
Hit any key to stop autoboot:  0 
=> ums 0 mmc 0
UMS: LUN 0, dev0, hwpart 0, section 0x0, count 0x720000
Ctrl+C to exit ...
=> reset
{code}
 
h2. Comments
Any questions or comments please go to our TechForum: [TechForum|https://forum.digikey.com/c/linux-on-arm/]

Comments

Any questions or comments please go to our TechForum: TechForum