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