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 „.

Olinuxino A13 Yocto kompilacja

Przewodnik pozwala w prosty sposób skompilować Linuxa dla zestawu Olinuxino – Allwinner A13

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

Zestaw Olinuxino – Allwinner A10

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-olinuxino-a13.git –depth 1 -b dunfell

source oe-init-build-env ~/yocto/build/olinuxino-a13

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-olinuxino-a13 \

w local.conf dodajemy i aktualizujemy wpisy

„MACHINE ??” ustawiamy „olinuxino”

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 „.

Cubieboard Yocto kompilacja

Przewodnik pozwala w prosty sposób skompilować Linuxa dla zestawu CUBIEBOARD 1 – Allwinner A10

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

Zestaw CUBIEBOARD 1 – Allwinner A10

Cubieboard - Wikipedia

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-cubieboard.git –depth 1 -b dunfell

source oe-init-build-env ~/yocto/build/cubieboard-1

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

w 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-cubieboard \

w local.conf dodajemy i aktualizujemy wpisy

„MACHINE ??” ustawiamy „cubieboard”

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 „.

DIGI CONNECTCORE i.MX6UL Yocto kompilacja

Przewodnik pozwala w prosty sposób skompilować Linuxa(od DIGI) dla zestawu DIGI CONNECTCORE i.MX6UL

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

Zestaw DIGI CONNECTCORE i.MX6UL

Digi CC-SBE-WMX-JN58 - Express Systems & Peripherals

Aby przeprowadzić kompilację wymagany jest system Ubuntu 18.04, 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

sudo curl http://commondatastorage.googleapis.com/git-repo-downloads/repo -o /usr/local/bin/repo

sudo chmod a+x /usr/local/bin/repo

sudo install -o user -g group -d /usr/local/dey-3.0

Uwaga: user to po prostu użytkownik, w group(grupę można sprawdzić wpisując w konsoli polecenie groups) również można wpisać nazwę użytkownika. Zakładając że mam nazwę użytkownika mw komenda będzie wyglądać

sudo install -o mw -g mw -d /usr/local/dey-3.0

cd /usr/local/dey-3.0

repo init -u https://github.com/digi-embedded/dey-manifest.git -b zeus

repo sync -j8

mkdir -p $HOME/digi-yocto/ccimx6ulsbc

cd $HOME/digi-yocto/ccimx6ulsbc

source /usr/local/dey-3.0/mkproject.sh -p ccimx6ulsbc

bitbake dey-image-qt

Instrukcję powyższą zbudowano w oparciu o

https://www.digi.com/resources/documentation/digidocs/embedded/dey/2.4/cc6ul/yocto_t_create-build-projects

Beaglebone Black uruchomienie systemu z karty karty SD

Istnieją 2 możliwości uruchomienia system operacyjnego z karty SD. Wszystko zależy od tego czy na wbudowanej karcie pamięci EMMC jest już jakiś działający system czy nie.

Krótkie wyjaśnienie dlaczego tak jest.

Większość MPU posiada tak zwaną konfigurowalną procedurę startową. MPU w momencie startu musi dostać informację z którego nośnika danych ma wystartować. Nośnikami tymi mogą być karta SD, NAND Flash, SPI Flash, EMMC, SPI, USB, I2C, Ethernet, Serial Port lub jeszcze inne media nie wymienione.

Przyjrzyjmy się więc jak to jest zrealizowane dla płytki Beaglebone Black

Poniżej zamieszczam fragment schematu wskazujący sekwencję.

Spróbujmy przeanalizować ten fragment schematu. Na początku jednak należy zaznaczyć że większość producentów umieszcza piny startowe na liniach wyświetlacza. Dlaczego tak, odpowiedź jest prosta piny startowe pracują jedynie krótką chwilę zaraz po włączeniu zasilania. MPU sprawdza konfigurację tych pinów, zazwyczaj piny te są podciągnięte dużymi rezystancjami do plusa zasilania bądź masy, generując tym samym ciąg binarny. Am335x ma w środku w krzemie zapisanych kilkadziesiąt takich konfiguracji. Jeśli MPU natrafi na odpowiedni ciąg to rozpocznie skanowanie zgodnie z dokumentacją.

Dla MPU AM335x wygląda to nieco skomplikowanie dlatego też ograniczymy zasięg wyłączenie do 5 pierwszych pinów startowych. Na schemacie mają one oznaczenie SYSBOOT[4:0]. Należy w tym miejscu zauważyć że jeden z pinów startowych SYSBOOT2 podłączony jest do przycisku S2 . I tu właśnie jest klucz wszystkiego, w przypadku gdy przycisk S2 nie jest wciśnięty sekwencja startowa wygląda następująco 11100b, czyli ustawienie to mówi nam że MPU będzie próbować wystartować najpierw z interfejsu MMC1 do którego podłączony jest pamięć EMMC, później z MMC0 do którego podłączona jest karta SD następnie UART0 (port debugowy) i na końcu USB0. Jeśli natomiast przycisk S2 zostanie włączony to system rozpocznie skanowanie od SPI0 następnie MMC0 (karta SD) USB0 i na końcu UART0 (port debugowy).

Wniosek z tego jest następujący, system uruchomi się z karty SD wyłącznie w dwóch przypadkach

  1. Brak bootowalnego systemu(brak u-boota pierwszego poziomu) w wewnętrznej pamięci EMMC lub pamięć ta jest pusta.
  2. Włączony przycisk S2 podczas podłączania zasilania. W tym przypadku sekwenser w ogóle ominie pamięć EMMC

Przycisk S2 zlokalizowany jest jak na zdjęciu poniżej

Beaglebone Black przygotowanie obrazu karty SD

Krótki opis przygotowania karty SD z nowym systemem dla płytki Beaglebone Black

Po pierwsze należy ściągnąć bądź przekompilować własny system operacyjny używając Yocto, Buildroota bądź innego narzędzia.

Gotowy obraz systemu Debian dla Beaglebone Black można pobrać z linku poniżej

https://debian.beagleboard.org/images/bone-debian-10.3-iot-armhf-2020-04-06-4gb.img.xz

Aby nagrać powyższy obraz w systemie Linux można skorzystać z narzędzia Etcher

wybrać ściągnięty obraz oraz medium na które ma zostać nagrany obraz „Select target”

Po tych czynnościach obraz powinien zostać poprawnie nagrany na kartę SD.

Beaglebone Black Can Bus Interfejs

Jak uruchomić interfejs CAN BUS na Embedded Linuxie? Czy to na prawdę takie trudne? Jak zacząć, co zrobić.

Należy zadać sobie pytanie co chcę uczynić. W poście tym zobaczymy jak szybko uruchomić CAN BUS-a dla popularnej płytki Beaglebone Black.

Kilka uwag przed przystąpieniem do dalszych czynności. Kluczowym elementem poprawnego działania interfejsu jest zainstalowanie odpowiedniego systemu operacyjnego. Może to być własna dystrybucja wytworzona na bazie Yocto, Buildroota lub innej platformy, bądź skorzystanie z gotowej dystrybucji dostępnej na przykład z linku poniżej

https://debian.beagleboard.org/images/bone-debian-10.3-iot-armhf-2020-04-06-4gb.img.xz

Sposób instalacji systemu znajduje w linku poniżej

https://mwlinux.eu/2021/05/07/beaglebone-black-przygotowanie-obrazu-karty-sd/
Przygotowanie karty SD
https://mwlinux.eu/2021/05/07/beaglebone-black-uruchomienie-systemu-z-karty-karty-sd/
Uruchomienie system operacyjnego z karty SD

Aby zobaczyć cały proces uruchamiania procesów należy podłączyć serial debuga.

Musimy dysponować na przykład takim przyrządem

Piny debugowe płytki Beaglebone Black

Oczywiście należy podłączyć odpowiednie piny ze sobą (TXD_bbb z RX, RXD_bbb z TX no i GND z GND)

Serial port powinien być ustawiony z następującymi parametrami

Badurate = 115200, 1 stop bit, brak parzystości, brak kontroli przepływu, 8 bitów danych

Aplikacji obsługujących port szeregowy jest kilka, najpopularniejsze to na przykład Teraterm, CoolTerm, Minicom, Gtkterm

Po poprawnym uruchomieniu powinno się pojawić wiele wpisów informujących uruchomione peryferia, porty aplikacje etc.

Jeśli korzystamy z oryginalnego systemu Debian to należy wprowadzić na końcu procesu uruchamiania użytkownika i hasło.

Standardowy użytkownik i hasło to

debian

temppwd

Po zalogowaniu w konsoli należy zdecydować który z dwóch CAN-ów chcemy uruchomić bądź obydwa na raz. Oczywiście wszystko to wykonujemy z konsoli. W pierwszej kolejności należy skonfigurować porty do pracy z CAN-em

dla CANA 1 oznaczanego jako DCAN1 będą to

sudo config-pin p9.24 can
sudo config-pin p9.26 can

dla CANA 0 oznaczanego jako DCAN0 będą to

sudo config-pin p9.19 can
sudo config-pin p9.20 can

Na końcu uruchamiamy CAN busa z odpowiednimi parametrami

na przykład dla CAN-a 1 i Bitrate-u będzie to

sudo /sbin/ip link set can1 up type can bitrate 500000

a dla CAN-a 0 i Bitrate-u będzie to

sudo /sbin/ip link set can0 up type can bitrate 125000

Chcąc wyłącznie nasłuchiwać magistralę można po prostu wpisać w konsoli

candump can0

lub

candump can1