Blog

Stm32mp1-DK2 Yocto compilation

Openstlinux STM32MP1 DK2 Yocto kompilacja

Przewodnik pozwala w prosty sposób skompilować OpenStLinuxa dla zestawu STM32MP1 DK2

Aby przeprowadzić poprawnie instalację wymagany jest następujący sprzęt

Zestaw  STM32MP1 DK2

Aby przeprowadzić kompilację wymagany jest system Ubuntu 20.04 lub kompatybilny

Na początku należy upewnić się że następujące pakiety są zainstalowane w naszym systemie

sudo apt-get install curl gawk wget git diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev xterm libncurses-dev python libegl1-mesa libssl-dev pylint python3-git python3-jinja2 python3-pip libmpc-dev libgmp-dev

W kolejnym kroku należy ściągnąć w odpowiednią lokalizację aplikację ’repo

mkdir ~/usr
mkdir ~/usr/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/usr/bin/repo
sudo cp ~/usr/bin/repo /usr/bin
sudo chmod a+rx /usr/bin/repo
rm -rf ~/usr/bin/

Następnie przygotowujemy niezbędne narzędzia i Yocto

mkdir openstlinux-5.10-dunfell-mp1-21-03-31
cd openstlinux-5.10-dunfell-mp1-21-03-31
repo init -u https://github.com/STMicroelectronics/oe-manifest.git -b refs/tags/openstlinux-5.10-dunfell-mp1-21-03-31
repo sync
DISTRO=openstlinux-weston MACHINE=stm32mp1-disco source layers/meta-st/scripts/envsetup.sh
bitbake st-image-weston

Po kilku godzinach lub minutach w zależności od sprzętu powinniśmy otrzymać gotowy obraz

Gotowy obraz można znaleźć w katalogu

/.../openstlinux-5.10-dunfell-mp1-21-03-31/build-openstlinuxweston-stm32mp1-disco/tmp-glibc/deploy/images

Kolejnym krokiem jest przygotowanie karty SD

cd ~/openstlinux-5.10-dunfell-mp1-21-03-31/build-openstlinuxweston-stm32mp1-disco/tmp-glibc/deploy/images/stm32mp1-disco/scripts

./create_sdcard_from_flashlayout.sh ../flashlayout_st-image-weston/trusted/FlashLayout_sdcard_stm32mp1-disco-trusted.tsv

Na końcu wypalamy przygotowany obraz na karcie SD pamiętając o odpowiednim wstawieniu urządzenia karty „/dev/sdx„. UWAGA! – błędne podanie wartości ’x’ zniszczy system plików komputera na którym było wszystko przygotowywane.

sudo dd if=/home/mw/openstlinux-5.10-dunfell-mp1-21-03-31/build-openstlinuxweston-stm32mp1-disco/tmp-glibc/deploy/images/stm32mp1-disco/FlashLayout_sdcard_stm32mp1-disco-trusted.raw of=/dev/sdx bs=8M conv=fdatasync status=progress

Jupiter Nano

Instruction how to build an image for Jupiter Nano in Yocto

Products:

Jupiter Nano based on SAMA5D27C-LD1G (Cortex-A5)

Meet the Jupiter Nano, The Tiny, high-performance computer that runs Linux,  and the NuttX RTOS - Electronics-Lab.com

General Note:

Assumed that Linux Ubuntu 20.04 or higher is installed

List of tested elements

Nothing currently

List of not tested elements

Nothing currently

How to build images

  1. First, make sure to following packages are installed in the system
sudo apt-get install gawk wget diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev xterm libgmp3-dev libmpc-dev

Note: More information can be found on the Yocto reference manual.

2. Download the necessary Yocto packaged listed below. Be sure to be at the root of the home folder.

mkdir yocto 
cd yocto 
mkdir build 
git clone git://git.yoctoproject.org/poky --depth 1 -b dunfell
cd poky 
git clone git://git.openembedded.org/meta-openembedded --depth 1 -b dunfell
git clone https://github.com/meta-qt5/meta-qt5.git --depth 1 -b dunfell
git clone git@github.com:voloviq/meta-jupiternano.git --depth 1 -b dunfell

3. Select directory to build LinuxNano version


source oe-init-build-env ~/yocto/build/jupiternano

4. Modify bblayers.conf(located in ~/yocto/build/jupiternano/conf)

BBLAYERS ?= ” \
${HOME}/yocto/poky/meta \
${HOME}/yocto/poky/meta-poky \
${HOME}/yocto/poky/meta-openembedded/meta-oe \
${HOME}/yocto/poky/meta-openembedded/meta-networking \
${HOME}/yocto/poky/meta-openembedded/meta-python \
${HOME}/yocto/poky/meta-qt5 \
${HOME}/yocto/poky/meta-jupiternano \

Note: Please adapt PATH of conf/bblayers.conf if necessary.

5. Modify local.conf(located in ~/yocto/build/jupiternano/conf) file

modify line with „MACHINE ??” to add „jupiternano”

align DL_DIR = „${HOME}/yocto/downloads”

align SSTATE_DIR = „${HOME}/yocto/sstate-cache”

align TMPDIR = „${HOME}/yocto/tmp”

add at the end following records

RM_OLD_IMAGE = „1”
INHERIT += „rm_work”

Note: Please adapt the rest of conf/local.conf parameters if necessary.

6. Build objects

console image
bitbake console-image

qt5 image
bitbake qt5-image

qt5 toolchain sdk
bitbake meta-toolchain-qt5

7. After compilation images appears in Nano version


~/yocto/tmp/deploy/images/jupiternano

8. Insert SD CARD into dedicated CARD slot and issue the following command to write an image

Note:
Be 100% sure to provide a valid device name (of=/dev/sde/mmcblk0). Wrong name „/dev/sde/mmcblk0” dameage Your system file !

Jupiter Nano version
sudo dd if=~/yocto/tmp/deploy/images/jupiternano/qt5-image-jupiter-nano.wic of=/dev/mmcblk0 bs=1024

Cubieboard 1 GPIO handle from the console in the root file system

To handle any GPIO pin there is common rule

Port should be calculated as follow

For instance PA5, PB11, PE12

PA5 this would be (1 - 1) * 32 + 5 = 0+5 = 5 (since 'a' is the 1st letter)

PB11 this would be (2 - 1) * 32 + 11 = 32+11 = 43 (since 'b' is the 2nd letter)

PE12 this would be (5 - 1) * 32 + 12 = 128+12 =  140 (since 'e' is the 5th letter)

First is export

echo 43 > /sys/class/gpio/export

than port direction configure

as input

echo "in" > /sys/class/gpio/gpio43/direction

as output

echo "out" > /sys/class/gpio/gpio43/direction

To read port

cat /sys/class/gpio/gpio43/value

To set '0′ or '1′

echo 0 > /sys/class/gpio/gpio43/value
echo 1 > /sys/class/gpio/gpio43/value

To release port

echo 43 > /sys/class/gpio/unexport

Openstlinux OSD32MP1-BRK Yocto kompilacja

Przewodnik pozwala w prosty sposób skompilować OpenStLinuxa dla zestawu OCTAVO – OSD32MP1-BRK

Aby przeprowadzić poprawnie instalację wymagany jest następujący sprzęt

Zestaw OCTAVO – OSD32MP1-BRK

OSD32MP1-BRK Octavo Systems | Mouser Polska

Aby przeprowadzić kompilację wymagany jest system Ubuntu 20.04 lub kompatybilny

Na początku należy upewnić się że następujące pakiety są zainstalowane w naszym systemie

sudo apt-get install curl gawk wget git diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev xterm libncurses-dev python libegl1-mesa libssl-dev pylint python3-git python3-jinja2 python3-pip libmpc-dev libgmp-dev

W kolejnym kroku należy ściągnąć w odpowiednią lokalizację aplikację ’repo

mkdir ~/usr
mkdir ~/usr/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/usr/bin/repo
sudo cp ~/usr/bin/repo /usr/bin
sudo chmod a+rx /usr/bin/repo
rm -rf ~/usr/bin/

Następnie przygotowujemy niezbędne narzędzia i Yocto

mkdir openstlinux-5.10-dunfell-mp1-21-11-17
cd openstlinux-5.10-dunfell-mp1-21-11-17
repo init -u https://github.com/STMicroelectronics/oe-manifest.git -b refs/tags/openstlinux-5.10-dunfell-mp1-21-11-17
repo sync
cd layers/meta-st
git clone -b dunfell https://github.com/voloviq/meta-osd32mp1-brk.git
cd ../../
DISTRO=openstlinux-weston MACHINE=osd32mp1-brk source layers/meta-st/scripts/envsetup.sh
bitbake st-image-weston

Po kilku godzinach lub minutach w zależności od sprzętu powinniśmy otrzymać gotowy obraz

Gotowy obraz można znaleźć w katalogu

~/openstlinux-5.10-dunfell-mp1-21-11-17/build-openstlinuxweston-osd32mp1-brk/tmp-glibc/deploy/images/osd32mp1-brk

Kolejnym krokiem jest przygotowanie karty SD

cd ~/openstlinux-5.10-dunfell-mp1-21-11-17/build-openstlinuxweston-osd32mp1-brk/tmp-glibc/deploy/images/osd32mp1-brk/scripts

./create_sdcard_from_flashlayout.sh ../FlashLayout_sdcard_stm32mp157c-osd32mp157c-512m-baa_minimalconfig-mx-trusted.tsv

Na końcu wypalamy przygotowany obraz na karcie SD pamiętając o odpowiednim wstawieniu urządzenia karty „/dev/sdx„. UWAGA! – błędne podanie wartości ’x’ zniszczy system plików komputera na którym było wszystko przygotowywane.

sudo dd if=~/openstlinux-5.10-dunfell-mp1-21-11-17/build-openstlinuxweston-osd32mp1-brk/tmp-glibc/deploy/images/osd32mp1-brk/FlashLayout_sdcard_stm32mp157c-osd32mp157c-512m-baa_minimalconfig-mx-trusted.raw of=/dev/sdx bs=8M conv=fdatasync status=progress

Uproszczony przewodnik pokazujący w jaki sposób skonfigurować serwer NFS i uruchomić system dla modułu Cubieboard A10

Pierwszą czynnością jaką należy wykonać na stacji roboczej(przez stację roboczą rozumie się system z zdalną zawartością root-fsa)

sudo apt-get install nfs-kernel-server xinetd tftpd tftp tftpd-hpa

Konfiguracja serwera tftp

sudo nano /etc/xinetd.d/tftp

należy zaktualizować wpis zmieniając katalog dostępowy na najbardziej nam odpowiadający

service tftp
{
protocol = udp
port = 69
socket_type = dgram
wait = yes
user = nobody
server = /usr/sbin/in.tftpd
server_args = /home/mw/tftpboot
disable = no
}

Dla Ubuntu 22.04 należy zaktualizować wpis

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/mw/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"
service tftp
{
protocol = udp
port = 69
socket_type = dgram
wait = yes
user = nobody
server = /usr/sbin/in.tftpd
server_args = /home/mw/tftpboot
disable = no
}

następnie tworzymy katalog dostępowy i nadajemy uprawnienia

sudo mkdir /home/mw/tftpboot
sudo chmod -R 777 /home/mw/tftpboot
sudo chown -R nobody /home/mw/tftpboot

Na końcu uruchamiamy proces

sudo service xinetd restart

Dla Ubuntu 22.04

sudo systemctl restart tftpd-hpa

Następnie konfigurujemy serwer nfs poprzez utworzenie katalogu dostępowego i nadanie mu odpowiednich uprawnień

mkdir -p /home/mw/nfs/cubieboard-nfs
sudo chmod 777 /home/mw/nfs/cubieboard-nfs

Kolejnym krokiem jest modyfikacja pliku

sudo nano /etc/default/nfs-kernel-server
NEED_SVCGSSD="no"
Obrazek posiada pusty atrybut alt; plik o nazwie nfs-pic1.png

Należy się również upewnić że niżej wymienione wpisy istnieją w pliku

/etc/idmapd.conf

Obrazek posiada pusty atrybut alt; plik o nazwie image-3-1024x371.png

Jedną z ostatnich czynności jest podpięcie klienta poprzez dodanie odpowiedniego wpisu w pliku

sudo nano /etc/exports

dodać odpowiednio przygotowany wpis

/home/mw/nfs/cubieboard-nfs   192.168.0.49/24(rw,fsid=root,no_root_squash,no_subtree_check)

Ostatnią czynnością jest zrestartowanie

sudo /etc/init.d/nfs-kernel-server restart

Oczywiście należy się upewnić że w katalogu serwera nfs-a znajduje się odpowiednio przygotowany system plików dla urządzenia. Można to podczas kompilacji wykonać na przykład tak

tar -C /home/mw/nfs/cubieboard-nfs -xzf /home/mw/yocto/tmp/deploy/images/cubieboard/console-image-cubieboard.tar.gz

Należy również zadbać aby w katalogu tftpboot znalazły się najbardziej aktualne pliki kernela i dts-a (pliki muszą mieć dokładnie takie nazwy)

Po skonfigurowaniu tftp oraz nfs-a na stacji roboczej można przystąpić do konfiguracji modułu Cubieboard

Podstawowym warunkiem konfiguracji jest wgrany bootloader 1 i 2 poziomu na płytkę(na pamięć NAND lub SD kartę)

Po wystartowaniu U-Boot-a drugiego poziomu należy od razu go zatrzymać naciskając w konsoli dowolny przycisk

Pierwszą czynnością jest ustawienie adresu IP Cubieboard-a oraz adresu serwera sieciowego. Wykonujemy to poprzez wprowadzenie dwóch wpisów

setenv ipaddr 192.168.0.70
setenv serverip 192.168.0.34
setenv bootcmd 'tftp $kernel_addr_r zImage; tftp $fdt_addr_r sun4i-a10-cubieboard.dtb; tftp 0x43100000 boot.scr; source 0x43100000'
saveenv

W powyższym przykładzie założono że adres modułu Cubieboard to 192.168.0.70 natomiast stacji roboczej zawierającej rootfs-a dostępnego po NFS-ie to 192.168.0.34

Beaglebone Black uruchamianie sieciowe rootfs z NFS, kernel+dtb z TFTP

Uproszczony przewodnik pokazujący w jaki sposób skonfigurować serwer NFS i uruchomić system dla modułu Beaglebone Black

Pierwszą czynnością jaką należy wykonać na stacji roboczej(przez stację roboczą rozumie się system z zdalną zawartością root-fsa)

sudo apt-get install nfs-kernel-server xinetd tftpd tftp

Konfiguracja serwera tftp

sudo nano /etc/xinetd.d/tftp

należy zaktualizować wpis zmieniając katalog dostępowy na najbardziej nam odpowiadający

service tftp
{
protocol        = udp
port            = 69
socket_type     = dgram
wait            = yes
user            = nobody
server          = /usr/sbin/in.tftpd
server_args     = /home/mw/tftpboot
disable         = no
}

następnie tworzymy katalog dostępowy i nadajemy uprawnienia

sudo mkdir /home/mw/tftpboot
sudo chmod -R 777 /home/mw/tftpboot
sudo chown -R nobody /home/mw/tftpboot

Na końcu uruchamiamy proces

sudo service xinetd restart

Następnie konfigurujemy serwer nfs poprzez utworzenie katalogu dostępowego i nadanie mu odpowiednich uprawnień

mkdir -p /home/mw/nfs/bbb-nfs
sudo chmod 777 /home/mw/nfs/bbb-nfs

Kolejnym krokiem jest modyfikacja pliku

sudo nano /etc/default/nfs-kernel-server
NEED_SVCGSSD="no"

Należy się również upewnić że niżej wymienione wpisy istnieją w pliku

/etc/idmapd.conf

Jedną z ostatnich czynności jest podpięcie klienta poprzez dodanie odpowiedniego wpisu w pliku

/etc/exports

dodać odpowiednio przygotowany wpis

/home/mw/nfs/bbb-nfs    192.168.0.49/24(rw,fsid=root,no_root_squash,no_subtree_check)

Ostatnią czynnością jest zrestartowanie

sudo /etc/init.d/nfs-kernel-server restart
sudo ln -s bin/busybox init

Można zamiast montować system plików manualnie zastąpić go automatycznym wpisem, modyfikując plik

sudo nano /etc/fstab

Oczywiście należy się upewnić że w katalogu serwera nfs-a znajduje się odpowiednio przygotowany system plików dla urządzenia. Można to podczas kompilacji wykonać na przykład tak

tar -C /home/mw/nfs/bbb-nfs -xzf /home/mw/yocto/tmp/deploy/images/beaglebone/console-image-beaglebone.tar.gz

Należy również zadbać aby w katalogu tftpboot znalazły się najbardziej aktualne pliki kernela i dts-a (pliki muszą mieć dokładnie takie nazwy)

Po skonfigurowaniu tftp oraz nfs-a na stacji roboczej można przystąpić do konfiguracji modułu Beaglebone Black

Podstawowym warunkiem konfiguracji jest wgrany bootloader 1 i 2 poziomu na płytkę(na pamięć MMC lub SD kartę)

Po wystartowaniu U-Boot-a drugiego poziomu należy od razu go zatrzymać naciskając w konsoli dowolny przycisk

Pierwszą czynnością jest ustawienie adresu IP Beaglebone-a oraz adresu serwera sieciowego. Wykonujemy to poprzez wprowadzenie dwóch wpisów

setenv ipaddr 192.168.0.70
setenv serverip 192.168.0.34
setenv bootcmd 'tftp 0x81000000 zImage; tftp 0x82000000 am335x-boneblack.dtb; bootz 0x81000000 - 0x82000000'
setenv bootargs root=/dev/nfs rw ip=dhcp console=ttyO0,115200n8 nfsroot=192.168.0.34:/home/mw/nfs/bbb-nfs,v3,tcp
setenv mmcrootfstype nfs

na końcu zapisujemy wyżej wprowadzone ustawienia wydając komendę

saveenv

i uruchamiamy system poprzez wydanie komendy

boot

Oczywiście należy się upewnić że 'kernel’ został skompilowany z opcją 'CONFIG_ROOT_NFS’

W powyższym przykładzie założono że adres modułu Beaglebone Black to 192.168.0.70 natomiast stacji roboczej zawierającej rootfs-a dostępnego po NFS-ie to 192.168.0.34

C.H.I.P Yocto kompilacja

Przewodnik pozwala w prosty sposób skompilować Linuxa dla zestawu C.H.I.P – Allwinner R8

Aby przeprowadzić poprawnie instalację wymagany jest następujący sprzęt

Zestaw C.H.I.P – Allwinner R8

Aby przeprowadzić kompilację wymagany jest system Ubuntu 20.04 lub kompatybilny

Na początku należy upewnić się że następujące pakiety są zainstalowane w naszym systemie

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

Następnie przygotowujemy niezbędne narzędzia i Yocto

mkdir yocto

cd yocto

mkdir build

git clone git://git.yoctoproject.org/poky –depth 1 -b dunfell

cd poky

git clone git://git.openembedded.org/meta-openembedded –depth 1 -b dunfell

git clone https://github.com/meta-qt5/meta-qt5.git –depth 1 -b dunfell

git clone https://github.com/voloviq/meta-chip.git –depth 1 -b dunfell

source oe-init-build-env ~/yocto/build/chip

W następnym kroku należy zaktualizować pliki bblayers.conf oraz local.conf

bblayers.conf aktualizujemy wpisy do postaci jak poniżej

BBLAYERS ?= „\
${HOME}/yocto/poky/meta \
${HOME}/yocto/poky/meta-poky \
${HOME}/yocto/poky/meta-openembedded/meta-oe \
${HOME}/yocto/poky/meta-openembedded/meta-networking \
${HOME}/yocto/poky/meta-openembedded/meta-python \
${HOME}/yocto/poky/meta-qt5 \
${HOME}/yocto/poky/meta-chip \

w local.conf dodajemy i aktualizujemy wpisy

„MACHINE ??” ustawiamy „chip”

Aktualizujemy i odznaczamy wpisy

DL_DIR = „${HOME}/yocto/downloads”

SSTATE_DIR = „${HOME}/yocto/sstate-cache”

TMPDIR = „${HOME}/yocto/tmp”

Na końcu pliku dodajemy 2 wpisy

RM_OLD_IMAGE = „1

INHERIT += „rm_work”

Kompilację rozpoczynamy w konsoli wydaniem komendy

bitbake console-image

lub

bitbake qt5-image

UWAGA:

W HTML-u znak ” użyty jest źle kopiowany ze strony do notatnika na przykład. Należy zwrócić uwagę aby użyć prawidłowego znaku „.