STM32MP157A-DK1 - OpenSTLinux cz.1

Wszytko co chcielibyście wiedzieć o STM32MP1xxx
ODPOWIEDZ
Awatar użytkownika
elvis
Użytkownik
Posty: 63
Rejestracja: 30 lis 2018, 17:50

STM32MP157A-DK1 - OpenSTLinux cz.1

Post autor: elvis »

Jak opisywałem wcześniej na STM32MP1 możemy uruchomić typowo desktopową dystrybucję Linux-a jak chociażby Debian-a. Jak zwykle ma to swoje plusy oraz minusy. Plusem jest prostota - mamy ogromną bibliotekę gotowych programów, które możemy instalować standardowymi narzędziami. Minus jest taki, że system nie jest zoptymalizowany dla naszej płytki, bo i skąd jego twórcy mieliby wiedzieć że akurat stm32mp157a przyjdzie nam do głowy używać.
W systemach embedded popularnym rozwiązaniem jest skompilowanie całego systemu ze źródeł. Dzięki temu system może wykorzystać w pełni możliwości jakie oferuje sprzęt, obraz jest znacznie mniejszy i szybciej się uruchamia. Niestety na początku praca z nim wydaje się trochę trudniejsza.
Na szczęście od producenta, czyli STMicrosystems dostajemy gotowca - którego działy marketingu ochrzciły jako OpenSTLinux.
Razem z płytką dostaliśmy kartę micro-SD na której ten system był (lub nie był) nagrany. Gotowy obraz możemy zawsze pobrać ze strony ST, nazywany jest on dla zmyłki STM32MP1Starter https://www.st.com/en/embedded-software ... arter.html
Obrazek

Do kompilacji systemu używane jest zwykłe Yocto (https://www.yoctoproject.org), więc moglibyśmy zupełnie sami przygotować taki obraz w sposób podobny jak dla Khadas-a (viewtopic.php?f=74&t=514). Jednak łatwiej będzie użyć wspomnianego gotowca.
Jak zwykle marketing zadbał o ładną nazwę i takie cudo nazywa się STM32 MPU OpenSTLinux Distribution (https://www.st.com/en/embedded-software ... ution.html). Na tej stronie znajdziemy link do Distribution package (STM32MP1Distrib) https://www.st.com/content/st_com/en/pr ... strib.html
Tutaj widzimy dwa linki - pierwszy do github-a, co jest wielkim zaskoczeniem dla mnie bo nie musimy kolejnej licencji akceptować... Ale szybko się okazuje że link prowadzi do repozytorium STM32CubeF0... jednak nie ma nic za darmo
Obrazek
Drugi link to wreszcie coś sensownego: https://wiki.st.com/stm32mpu/index.php/ ... on_Package

Tutaj znajdujemy instrukcję jak pobrać i przygotować własny obraz OpenSTLinuxa. Ja opiszę to własnymi słowami, ale postępuję według zawartych tutaj poleceń.

Najpierw tworzymy katalog w którym będziemy pracować z systemem:

Kod: Zaznacz cały

mkdir openstlinux-4.19-thud-mp1-19-02-20 
cd openstlinux-4.19-thud-mp1-19-02-20
Następnie używamy repo do pobrania yocto oraz receptur kompilacji systemu:

Kod: Zaznacz cały

repo init -u https://github.com/STMicroelectronics/oe-manifest.git -b refs/tags/openstlinux-4.19-thud-mp1-19-02-20
repo sync
Jeśli nasz system nie miał repo to możemy je zainstalować standardowo:

Kod: Zaznacz cały

sudo apt install repo
Pobieranie yocto zajmuje trochę czasu, możemy więc w międzyczasie podpatrzeć co się dzieje za naszymi plecami. Otwieramy plik .repo/manifest.xml:

Kod: Zaznacz cały

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <remote fetch="https://github.com" name="github"/>
  <remote fetch="http://git.openembedded.org" name="oe"/>
  <remote fetch="https://github.com/STMicroelectronics" name="OpenSTLinux"/>

  <default remote="OpenSTLinux"/>

  <project name="TimesysGit/meta-timesys" path="layers/meta-timesys" remote="github" revision="bf220e124514ae8129b172a5281219007421000f"/>
  <project name="bitbake" path="layers/openembedded-core/bitbake" remote="oe" revision="afee3f594e1510051a0b18e430e92549caf72fa2"/>
  <project name="meta-openembedded" path="layers/meta-openembedded" remote="oe" revision="f1511d254632a34c1deb51f4bf8b8c21e7423f51"/>
  <project name="meta-qt5/meta-qt5" path="layers/meta-qt5" remote="github" revision="fd1f0f47312e7ee80e5ca65b8b2992cb068b1656"/>
  <project name="devicetree-addons" path="layers/meta-st/meta-st-stm32mp-addons/devicetree-addons" revision="cc76f890a1ed879993961d12d2b37b9f692f9b13"/>
  <project name="meta-st-openstlinux" path="layers/meta-st/meta-st-openstlinux" revision="4e36cf0c7c7bdb24700a990f73afcda84cdcf0cf"/>
  <project name="meta-st-stm32mp" path="layers/meta-st/meta-st-stm32mp" revision="dcc955d6992cc46ce07440caaa5a17942776bbe6"/>
  <project name="meta-st-stm32mp-addons" path="layers/meta-st/meta-st-stm32mp-addons" revision="fdaf22bdb1d832893be7b9dc74a4bba0a6ea5065"/>
  <project name="meta-st-scripts" path="layers/meta-st/scripts" revision="e1055b0af6c0d7e770ad0d50e18da84771896f11"/>
  <project name="openembedded-core" path="layers/openembedded-core" remote="oe" revision="f0394e80a37f1da47042a1aa0487594f390603f9"/>

</manifest>
Tutaj są adresy używanych repozytoriów - warto na nie popatrzeć. Gdybyśmy chcieli używać "gołego" yocto może nam się ta wiedza przydać.
Gdy już doczekamy końca pobierania, czas zacząć kompilację.
Pierwszy krok to wybór dystrybucji, piszemy zgodnie z instrukcją:

Kod: Zaznacz cały

DISTRO=openstlinux-weston MACHINE=stm32mp1 source layers/meta-st/scripts/envsetup.sh
Aż dziwne że wcześniej nie musieliśmy licencji EULA akceptować - jednak teraz ST nadrabia zaległości. Musimy wyrazić zgodę (chociaż podobno bez niej też coś zadziała, ale nie będzie części pakietów).
Akceptujemy licencję, skrypt wypisze nam krótką instrukcję co mamy dalej robić:

Kod: Zaznacz cały

Available images for OpenSTLinux layers are:

  - Official OpenSTLinux images:
      st-image-weston       -   OpenSTLinux weston image with basic Wayland support (if enable in distro)

  - Other OpenSTLinux images:
      - Supported images:
          st-image-core         -   OpenSTLinux core image
      - Proposed images as example only:
          st-example-image-qt   -   ST example of image based on QT framework   (require 'openstlinux-eglfs' distro)
          st-example-image-x11  -   ST example of image based on X11            (require 'openstlinux-x11' distro)
          st-example-image-xfce -   ST example of image based on XFCE framework (require 'openstlinux-x11' distro)
          and more images are available on meta-st-openstlinux/recipes-samples/images.

You can now run 'bitbake <image>'
Do tych informacji jeszcze wrócimy. W każdym razie warto zauważyć że zmiennej DISTRO przypisaliśmy wartość openstlinux-weston, mamy więć możliwość zbudowania dwóch obrazów:
  • st-image-weston - czyli tego co dostaliśmy na karcie SD
  • st-image-core - minimalny obraz bez demo itd.
Jak widzimy są jeszcze dwie dystrybucje: openstlinux-eglfs - przeznaczona do używania z biblioteką Qt oraz openstlinux-x11 ze starym dobrym X serwerem.
Budujemy obraz demo, czyli:

Kod: Zaznacz cały

bitbake st-image-weston
Teraz mamy długą przerwę na lunch - zajmie to od 20min do kilku godzin. Do pobrania i kompilacji jest mnóstwo pakietów:
Obrazek
Mnóstwo czyli tak około 9317 :)

Jak system skończy kompilację wchodzimy do katalogu z wynikami:

Kod: Zaznacz cały

cd tmp-glibc/deploy/images/stm32mp1
OpenSTLinux wymaga jeszcze jednego kroku. Musimy wybrać dla jakiej płytki oraz rodzaju pamięci chcemy mieć obraz. Warto zobaczyć co mamy do dyspozycji:

Kod: Zaznacz cały

ls flashlayout_st-image-weston/
Nas interesują tylko te dla karty SD oraz płytki STM32MP157A-DK1, czyli:

Kod: Zaznacz cały

ls flashlayout_st-image-weston/FlashLayout_sdcard_stm32mp157a*

flashlayout_st-image-weston/FlashLayout_sdcard_stm32mp157a-dk1-basic.tsv
flashlayout_st-image-weston/FlashLayout_sdcard_stm32mp157a-dk1-optee.tsv
flashlayout_st-image-weston/FlashLayout_sdcard_stm32mp157a-dk1-trusted.tsv
Wersja basic używa tylko uboot-a, pomijając TrustZone. Domyślny obraz w zawierał optee (https://www.op-tee.org/), jest jeszcze trusted z ARM Trusted Firmware-A (https://github.com/ARM-software/arm-trusted-firmware).

Ponieważ chcemy mieć to samo co dostaliśmy w zestawie piszemy:

Kod: Zaznacz cały

scripts/create_sdcard_from_flashlayout.sh flashlayout_st-image-weston/FlashLayout_sdcard_stm32mp157a-dk1-optee.tsv
I po chwili mamy gotowy obraz, czyli plik flashlayout_st-image-weston_FlashLayout_sdcard_stm32mp157a-dk1-optee.raw.
Zajmuje on aż 1.5 GB ale w większości jest pusty, samych danych jest niecałe 400MB.

Obraz jest taki sam jak dostarczany w pakiecie "Starter" możemy go nagrać ulubionym narzędziem na kartę, np.:

Kod: Zaznacz cały

sudo dd if=flashlayout_st-image-weston_FlashLayout_sdcard_stm32mp157a-dk1-optee.raw of=/dev/sdg bs=4M && sync
Po umieszczeniu karty w czytniku płytki i podłączeniu zasilania wszystko powinno wystartować jak z firmowym obrazem.
Warto zwrócić uwagę na komunikaty podczas uruchamiania:

Kod: Zaznacz cały

optee:
I/TC: Early console on UART#4
I/TC: 
I/TC: Pager is enabled. Hashes: 1376 bytes
I/TC: Pager pool size: 116kB
I/TC: OP-TEE version: Unknown #1 Fri Aug  2 08:03:20 UTC 2019 arm
I/TC: Platform stm32mp1: flavor stm32mp157c - device tree stm32mp157a-dk1
I/TC: Model: STMicroelectronics STM32MP157A-DK1 Discovery Board
I/TC: UART console probed from DT (non secure)
I/TC: stm32mp HSI      (18): secure        
I/TC: stm32mp LSI      (19): secure        
I/TC: stm32mp HSE      (20): secure        
I/TC: stm32mp PLL2     (27): secure        
I/TC: stm32mp PLL2_R   (30): secure        
I/TC: Initialized
To jest właśnie wspomniane optee - raczej nam się nie przyda, ale jest.
Po uruchomieniu możemy jeszcze sprawdzić użycie karty:

Kod: Zaznacz cały

root@stm32mp1:~# df -h
Filesystem       Size  Used Avail Use% Mounted on
/dev/root        719M  341M  340M  51% /
Jak widzimy główny system plików ma raptem 341MB, to dużo mniej niż typowy Debian.

Jako ostatnią ciekawostkę warto jeszcze uruchomić benchmark glmark2. Obraz w 3D jest ładny, ale wydajność to chyba 2 FPS :( No i wynik też nie powala na kolana:

Kod: Zaznacz cały

glmark2 Score: 0
Na zakończenie jeszcze możliwość przygotowania SDK, czyli pakietu z kompilatorem i bibliotekami. ST dostarcza go jako Developer package (https://www.st.com/content/st_com/en/pr ... p1dev.html)
Sami możemy SDK utworzyć pisząc:

Kod: Zaznacz cały

bitbake st-image-weston -c populate_sdk
Używanie SDK jest bardzo wygodne - powstaje gotowy skrypt instalacyjny, który można uruchomić na dowolnym komputerze z Linux-em. Dzięki temu yocto nie jest potrzebne, a my możemy pisać programy na PC używając kompilacji skrośnej (cross-compile).

Utworzyliśmy obraz odpowiadający gotowemu pakietowi Starter. Jesteśmy więc gotowi do zrobienia czegoś ciekawszego - o tym będzie w kolejnym wpisie.

Awatar użytkownika
StaryAnoda_NEW
Nowy
Posty: 1
Rejestracja: 26 kwie 2019, 7:16

Re: STM32MP157A-DK1 - OpenSTLinux cz.1

Post autor: StaryAnoda_NEW »

Dzień dobry,

Jestem początkujący w tych zagadnieniach. Wykonuję wszystko zgodnie z poradnikiem napotkałem problem podczas wydawania polecenia:
bitbake st-image-weston Czy może ktoś podpowiedzieć czego nie doinstalowałem albo co poprawić?
  1. osboxes@osboxes:~/Desktop/openstlinux-4.19-thud-mp1-19-02-20/build-openstlinuxweston-stm32mp1$ bitbake st-image-weston
  2. ERROR: Unable to start bitbake server
  3. ERROR: Last 10 lines of server log for this session (/home/osboxes/Desktop/openstlinux-4.19-thud-mp1-19-02-20/build-openstlinuxweston-stm32mp1/bitbake-cookerdaemon.log):
  4.     self.cooker = bb.cooker.BBCooker(self.configuration, self.featureset)
  5.   File "/home/osboxes/Desktop/openstlinux-4.19-thud-mp1-19-02-20/layers/openembedded-core/bitbake/lib/bb/cooker.py", line 197, in __init__
  6.     self.initConfigurationData()
  7.   File "/home/osboxes/Desktop/openstlinux-4.19-thud-mp1-19-02-20/layers/openembedded-core/bitbake/lib/bb/cooker.py", line 356, in initConfigurationData
  8.     self.databuilder.parseBaseConfiguration()
  9.   File "/home/osboxes/Desktop/openstlinux-4.19-thud-mp1-19-02-20/layers/openembedded-core/bitbake/lib/bb/cookerdata.py", line 317, in parseBaseConfiguration
  10.     raise bb.BBHandledException
  11. bb.BBHandledException
  12. ERROR: The following required tools (as specified by HOSTTOOLS) appear to be unavailable in PATH, please install them in order to proceed:
  13.   chrpath gawk makeinfo
  14.  
Pozdrawiam
StaryAnoda_NEW

Awatar użytkownika
squeez
GRafik
Posty: 143
Rejestracja: 16 paź 2017, 23:52

Re: STM32MP157A-DK1 - OpenSTLinux cz.1

Post autor: squeez »

Z komunikatu wynika chyba, że brakuje: chrpath, gawk, makeinfo

Awatar użytkownika
l3n1n
Moderator
Posty: 340
Rejestracja: 28 paź 2017, 8:46
Lokalizacja: 3M

Re: STM32MP157A-DK1 - OpenSTLinux cz.1

Post autor: l3n1n »

Jak to przerabiałem to poprostu doinstalowywalem na bieżąco to co było potrzebne. Elvis nie robił step by step tylko opisywał doświadczenia

ODPOWIEDZ

Wróć do „STM32MP1”