Skip to main content

reTerminal用Yocto

pir

概要

Yocto Project®とは?

Yocto Projectは、ハードウェアアーキテクチャに関係なく、開発者が組み込み製品向けのカスタムLinuxベースシステムを作成するのを支援するオープンソースコラボレーションプロジェクトです。

このプロジェクトは、柔軟なツールセットと、世界中の組み込み開発者が技術、ソフトウェアスタック、設定、ベストプラクティスを共有できるスペースを提供し、組み込みデバイス向けのカスタマイズされたLinuxイメージの作成に使用できます。

このプロジェクトは、ハードウェアサポートとソフトウェアスタックの提供における標準を提供し、ソフトウェア設定とビルドの交換を可能にします。これらのツールにより、ユーザーは保守可能でスケーラブルな方法で、複数のハードウェアプラットフォームとソフトウェアスタック向けのカスタマイゼーションを構築およびサポートできます。

なぜYoctoを使用するのか?

Yocto Projectには、他の単純なビルドシステムとは異なる組み込みLinux作成のための開発モデルがあります。これはレイヤーモデルと呼ばれています。

レイヤーモデルは、コラボレーションとカスタマイゼーションの両方を同時にサポートするように設計されています。レイヤーは、ビルドシステムに何をすべきかを指示する関連する命令セットを含むリポジトリです。ユーザーはレイヤーをコラボレーション、共有、再利用できます。レイヤーには、いつでも以前の命令や設定への変更を含めることができます。

この強力なオーバーライド機能により、以前のコラボレーティブまたはコミュニティ提供のレイヤーを製品要件に合わせてカスタマイズできます。

ビルド内の情報を論理的に分離するために、異なるレイヤーを使用します。例として、BSPレイヤー、GUIレイヤー、ディストリビューション設定、ミドルウェア、またはアプリケーションを持つことができます。ビルド全体を1つのレイヤーに入れることは、将来のカスタマイゼーションと再利用を制限し、複雑にします。一方、情報をレイヤーに分離することは、将来のカスタマイゼーションと再利用を簡素化するのに役立ちます。

Yoctoの機能

Yoctoには以下の機能があります:

  • CIIベストプラクティス: Linux Foundation(LF)Core Infrastructure Initiative(CII)ベストプラクティスバッジは、Free/Libre and Open Source Software(FLOSS)プロジェクトがベストプラクティスに従っていることを示す方法です。Yocto Projectは登録されており、以下のバッジレベルを持っています。

  • バイナリ再現性: ディストリビューションが依存関係をサポートするためにどのパッケージを取り込むか、またはその順序について具体的でない場合、ビルドシステムは依存関係が満たされるタイミングに基づいて任意にパッケージを含めることができます。Yocto Projectは汚染を避けるために依存関係を制御し、「core-image minimal」で99.8%の再現性を達成し、拡張テストではわずかに低い再現性を実現しています。

  • クロスプラットフォーム開発フレームワーク(CROPS): CROPSは、Dockerコンテナを活用して、開発者がWindows、Linux、Mac OS Xホスト上で様々なアーキテクチャ向けのバイナリを構築できる、簡単に管理可能で拡張可能な環境を提供するオープンソースのクロスプラットフォーム開発フレームワークです。

  • 拡張可能SDK: Yocto Project拡張可能SDK(eSDK)には、イメージに新しいアプリケーションやライブラリを簡単に追加し、既存のコンポーネントのソースを変更し、ターゲットハードウェア上で変更をテストできるツールがあります。

  • Toaster: ToasterはYocto Projectで使用されるビルドシステムであるOpenEmbeddedとBitBakeのWebインターフェースです。Toasterを使用すると、ビルドを設定および実行でき、ビルドプロセスに関する情報と統計を提供します。

  • マルチ設定: ビルドシステムは、1つのコマンドで指定された複数のアーキテクチャを自動的かつ効率的にビルドできます。

  • バイナリビルド: Yocto Projectでは、対応するソースコードファイルを含めることなく、バイナリファイルをビルドに含めることができます。

  • オープンソースライセンスマニフェスト生成: Yocto Projectは、ビルドで使用されるすべてのオープンソースライセンスを追跡し、それらのライセンスとソース参照のマニフェストを提供できます。

以下のガイドに従うことで、Yoctoを使用して独自のreTerminalシステムイメージを構築できるようになります。それでは始めましょう!

Yoctoソースコードのコンパイル

ローカルマシンでの手動コンパイル - Bitbakeの使用(コマンドライン)

ここでは、コマンドラインを通じてYoctoを使用してreTerminal用のシステムイメージを手動でコンパイルする方法に進みます。

注意: このガイドは、Ubuntu 20.04がインストールされたホストPCでテストした後に作成されました。ただし、他のLinuxシステムでも動作します。

reTerminalのデフォルト設定でコンパイル

以下の手順に従って、reTerminalのデフォルト設定でコンパイルを開始してください

  • ステップ 1. 以下のパッケージをインストールして、ホストPC上で開発環境を準備します
sudo apt update
sudo apt install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat python3-distutils

注意: ホストPCが異なるLinuxディストリビューションを実行している場合は、こちらを確認してください

  • ステップ 2. 新しい作業ディレクトリを作成して入る
mkdir reterminal-yocto
cd reterminal-yocto
  • ステップ 3. レイヤーを追加するための新しいディレクトリを作成し、そこに移動します
mkdir layers 
cd layers
  • Step 4. Clone the following GitHub repo
git clone -b dunfell git://git.yoctoproject.org/poky
  • ステップ 5. 以下のリポジトリをクローンします
git clone -b dunfell https://github.com/Seeed-Studio/meta-seeed-cm4.git
git clone -b master git://git.yoctoproject.org/meta-raspberrypi
git clone -b dunfell https://github.com/meta-qt5/meta-qt5.git
git clone -b dunfell https://github.com/openembedded/meta-openembedded.git
  • ステップ 6. meta-raspberrypi レイヤーでカーネルバージョンを 5.4 から 5.10 に変更する
cd meta-raspberrypi/
cp -r recipes-kernel/linux/ ../
git checkout dunfell
rm -r recipes-kernel/linux/
mv -f ../linux/ recipes-kernel/
cd ../../
  • Step 7. Initialize the build environment
source layers/poky/oe-init-build-env
  • ステップ 8. ビルド環境にレイヤーを追加する
bitbake-layers add-layer ../layers/meta-raspberrypi
bitbake-layers add-layer ../layers/meta-seeed-cm4
bitbake-layers add-layer ../layers/meta-qt5
bitbake-layers add-layer ../layers/meta-openembedded/meta-oe
bitbake-layers add-layer ../layers/meta-openembedded/meta-python
  • Step 9. Move back to the build directory and execute the following to start compiling
MACHINE="seeed-reterminal" bitbake rpi-test-image

コンパイル済みイメージの検索

コンパイルが完了したら、build ディレクトリに移動し、以下のコマンドを実行して システムイメージ が正常に生成されているかを確認してください

cd tmp/deploy/images/seeed-reterminal/;ls -lh rpi-test-image*.wic.bz2

pir

上記の画像に示すように、rpi-test-image-seeed-reterminal.rootfs.wic.bz2 が生成されたシステムイメージです

便利なBitbakeコマンド

以下を参照して、便利なBitbakeコマンドに慣れ親しんでください

イメージのコンパイルを開始する
  • bitbake <image>

このコマンドはイメージのコンパイルを開始します。エラーが見つかっても継続してコンパイルするために -k を追加できます。失敗したターゲットとそれに依存するものはビルドできませんが、停止する前に可能な限り多くのものがビルドされます。

例 1:

bitbake rpi-test-image

例 2:

bitbake rpi-test-image -k
イメージ内のパッケージを表示する
  • bitbake -g <image> && cat pn-buildlist | grep -v -e '-native' | grep -v digraph | grep -v -e '-image' | awk '{print $1}' | sort | uniq

これにより、イメージ内のパッケージが pn-buildlist という名前のファイルに保存され、コンソールに一覧表示されます

例:

bitbake -g rpi-test-image && cat pn-buildlist | grep -v -e '-native' | grep -v digraph | grep -v -e '-image' | awk '\{print $1\}' | sort | uniq

pir

パッケージの依存関係を表示
  • bitbake -g <package> && cat pn-buildlist | grep -v -e '-native' | grep -v digraph | grep -v -e '-image' | awk '{print $1}' | sort | uniq

これにより、パッケージの依存関係が pn-buildlist という名前のファイルに保存され、コンソールに一覧表示されます

例:

bitbake -g i2c-tools && cat pn-buildlist | grep -v -e '-native' | grep -v digraph | grep -v -e '-image' | awk '\{print $1\}' | sort | uniq

pir

タスク依存関係エクスプローラー UI
  • bitbake <image> -g -u taskexp

これはタスク依存関係エクスプローラー UI を表示するのに役立ちます。タスク間の依存関係を表示します

例:

bitbake rpi-test-image -g -u taskexp

pir

パッケージのdevshellを起動する
  • bitbake <package> -c devshell

これにより、パッケージに必要なシステム値がすでに定義された新しいシェルが開きます

例:

bitbake evtest -c devshell

pir

パッケージタスクの一覧表示
  • bitbake -c listtasks

これはパッケージのすべてのタスクを一覧表示します

例:

bitbake evtest -c listtasks

pir

インタラクティブカーネル設定
  • bitbake virtual/kernel -c menuconfig

これにより、インタラクティブなカーネル設定ウィンドウが開き、必要に応じて設定を変更できます

pir

レイヤーの表示
  • bitbake-layers show-layers

これにより、現在使用中のレイヤーのリストとその優先度が表示されます。パッケージが2つ以上のレイヤーに存在する場合、より高い優先度を持つレイヤーからビルドされます

pir

レシピの表示
  • bitbake-layers show-recipes

これにより、利用可能なすべてのレシピが表示されます

以下のように入力すると、以前に使用したレシピである rpi-test-image を確認できます

bitbake-layers show-recipes | grep rpi

pir

パッケージの確認
  • bitbake -s | grep

これは現在のYoctoセットアップに特定のパッケージが存在するかどうかを確認します

bitbake -s | grep openssl

pir

詳細なビルドログを保存する
  • bitbake -v <image> 2>&1 | tee image_build.log

これにより、イメージのビルドが開始されるとコンソールに出力され、詳細モードで image_build.log に出力が保存されます

例:

bitbake -v rpi-test-image 2>&1 | tee image_build.log 
ビルド環境のクリーンアップ
  • bitbake -c cleanall [package]

これにより、作業ディレクトリ、状態キャッシュ、およびパッケージに関連する以前にダウンロードされたすべてのソースファイルが削除されます。特定のパッケージでビルドの問題が発生している場合に役立ちます

例:

bitbake -c cleanall i2c-tools

ローカルマシンでの手動コンパイル - Toaster(GUI)の使用

次に、Toasterを使用してreTerminal用のシステムイメージを手動でコンパイルする方法に進みます。

ToasterはYocto Project®で使用されるビルドシステムであるOpenEmbeddedとBitBakeのWebインターフェースです。Toasterを使用すると、ビルドの設定と実行が可能で、ビルドプロセスに関する情報と統計を提供します。

注意: このガイドはUbuntu 20.04がインストールされたホストPCでテストした後に作成されました。

  • ステップ 1. パッケージリストを更新する
sudo apt update
  • ステップ 2. 以下のパッケージをインストールして、ホストPC上で開発環境を準備します
sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \
build-essential chrpath socat cpio python3 python3-pip python3-pexpect \
xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev \
pylint3 xterm

注意: ホストPCが異なるLinuxディストリビューションを実行している場合は、こちらをクリックしてお使いのOSに応じてインストールが必要なパッケージを確認してください

  • ステップ 3. 以下のGitHubリポジトリをクローンします
git clone -b master git://git.yoctoproject.org/poky
  • Step 4. Navigate to the poky directory
cd poky
  • ステップ 5. 以下のtoasterパッケージをインストールします
pip3 install --user -r bitbake/toaster-requirements.txt
  • ステップ 6. poky ディレクトリを以下のコミットに戻す
git reset --hard 7ade8346b3a09983257589d22aaada47e0eec010
  • Step 7. Source the build environment script
source oe-init-build-env
  • Step 8. From the build directory, start toaster
source toaster start
  • ステップ 9. Toaster ウェブインターフェースにアクセスするには、お気に入りのブラウザを開いて以下を入力してください
http://127.0.0.1:8000

注意: デフォルトでは、Toasterはポート8000で開始されます。WEBPORTパラメータを使用して異なるポートを設定できます。例えば、以下のコマンドはポートを"9000"に設定します

source toaster start webport=9000
  • Step 10. Toaster ウェブインターフェースに入ったら、New project をクリックします

pir

  • Step 11. Project name を入力し、project typeNew project に設定し、Release の下で Local Yocto Project を選択し、最後に Create project をクリックします

pir

  • Step 12. Configuration タブ内で、Machine の下で名前を raspberrypi4-64 に変更し、Save をクリックします

pir

  • Step 13. Import layer をクリックします

pir

  • Step 14. 以下のように情報を入力します

  • Step 15. Import and add to project をクリックします

  • Step 16. 上記の手順を繰り返して、以下のようにさらにレイヤーをインポートします

  • meta-qt5

  • meta-seeed-reterminal

  • meta-oe

  • meta-python

  • Step 17. すべてのレイヤーがインポートされたら、Layers タブをクリックして追加したレイヤーを確認します

pir

  • Step 18. BitBake variables に移動し、以下の新しい変数を追加します
- Variable:RPI_KERNEL_DEVICETREE_OVERLAYS_append
- Value: overlays/reTerminal.dtbo overlays/i2c3.dtbo

Note: Make sure to add a space before overlays/xxxx

  • Step 19. Repeat the same to add the following
- Variable:PACKAGECONFIG_append_pn-qtbase
- Value: eglfs

注意: eglfs の前にスペースを追加することを確認してください

- Variable:DISTRO_FEATURES_remove
- Value: x11 wayland vulkan

注意: x11 xxx の前にスペースを追加することを確認してください

pir

  • ステップ 20. 最後に rpi-test-image と入力し、Build をクリックしてプロジェクトのビルドを開始します

pir

以下のようにビルドプロセスが表示されます

pir

ビルドが完了すると、以下のように表示されます

pir

  • ステップ 21. rpi-test-image をクリックして、イメージビルドの詳細を確認します

  • ステップ 22. Image files の下で、tar.bz2 をクリックしてコンパイル済みイメージをダウンロードします

pir

  • ステップ 23. このページをさらに下にスクロールして、Build Summary について詳しく学習します

pir

既にコンパイル済みのイメージをダウンロード

Yoctoを使用して既にコンパイル済みのreTerminalシステムイメージをダウンロードしたい場合は、以下の手順に進んでください。

  • ステップ 1. このリンクを開いて、meta-seeed-reterminal GitHub リポジトリの Actions ページに入ります

  • ステップ 2. 最新の Seeed reTerminal Yocto embedded linux ワークフローをクリックします

pir

  • ステップ 3. Artifacts の下で、yocto deploy をクリックしてイメージのダウンロードを開始します

pir

  • ステップ 4. イメージをダウンロードした後、イメージは yocto deploy.zip という名前になります。この .zip ファイルを展開すると、yocto-image.tar.xz という名前のファイルが見つかります

  • ステップ 5. この yocto-image.tar.xz ファイルを展開すると、yocto-image.tar という名前のファイルが見つかります

  • ステップ 5. この yocto-image.tar ファイルを展開し、deploy > images > raspberrypi4-64 に移動します。拡張子が .rootfs.wic.bz2 のファイルを探してください。それがシステムイメージファイルです

pir

reTerminalにイメージをフラッシュ

次に、reTerminal上のCM4のeMMCにイメージをフラッシュする作業に移ります。

このwikiの手順に従い、以下のステップに注意してください:

注意: Raspberry Pi Imager を開いたら、CHOOSE OS をクリックし、Use custom を選択して、ダウンロードした .rootfs.wic.bz2 ファイルを選択してください。

pir

reTerminalでの初回起動

システムイメージをreTerminalにフラッシュした後、reTerminalの電源を入れます。ここでreTerminal LCDにカーネルログがポップアップし、最後にQtを使用して作成されたデモアプリケーションが開きます。

デフォルトシステムイメージの起動時間は約17秒です

pir

シリアルコンソール経由でPCからreTerminalにログイン

シリアルコンソール接続を使用してreTerminal内のOSにログインすることをお勧めします。ハードウェア接続を行い、rootとしてログインするには、このwikiを確認してください

Yoctoイメージのテスト

上記のYoctoイメージをreTerminalでテストするには、reTerminal Hardware and Interfaces Usage wikiにアクセスして、記載されている手順を参照してください。

Yocto Project Summit 2021での講演

この講演は主に、Yoctoプロジェクトを使用してCM4キャリアボード、X86、STM32ボード用のカスタムLinuxイメージを簡単に作成する方法について説明することに焦点を当てています。また、講演の最後には、Qt、LVGLに基づく2つのHMIデモと、Menderを使用してこれらのSBCに安全で堅牢なOTAアップデートを提供するデモがあります。

リソース

技術サポートと製品ディスカッション

弊社製品をお選びいただきありがとうございます!弊社製品での体験ができるだけスムーズになるよう、さまざまなサポートを提供いたします。さまざまな好みやニーズに対応するため、複数のコミュニケーションチャンネルを提供しています。

Loading Comments...