2024年11月18日月曜日

Simplicity Studioを使ってみた! その1

「Simplicity Studio」のインストール

急遽、Silicon Labs社のマイコンを使用することになり、その統合開発環境「Simplicity Studio」をインストールしました。

手順が多く結構ハマったので、その備忘録です。

まずは、インストーラーのダウンロードです。

以下のページにアクセスします。

このページを少し下にスクロールして行くと…


https://www.silabs.com/developer-tools/simplicity-studio

ダウンロード・ページ - 1


インストーラーへのリンクのバナーが並んでいます。

ここでは「Windows Installer >」のバナーをクリックします。

ダウンロード・ページ - 2


すると、ログインを促されます。

アカウントを作成するには「Create an Acount」の表示をクリックして諸々入力する必要があります。

面倒ですが、これは必須です。

ダウンロード・ページ - 3


アカウントを作成したら、いざログインです。

メールアドレスパスワードを入力し「Login」ボタンをクリックします。

ダウンロード・ページ - 4


即座に保存場所を問われます。

ディレクトリを指定して「保存」ボタンをクリック!

保存場所ダイアログ


ダウンロードが終了すると指定したディレクトリに「SimplicityStudio-5.iso」というファイルが生成されています。

これは「.exe」ではなくディスクイメージ「.iso」ですね。

「SimplicityStudio-5.iso」を右クリックして表示されたメニューから「マウント」をクリックします。

ディスクイメージのマウント


以下の警告が出たら「開く」ボタンをクリックです。

警告ダイアログ


マウントが終了すると、新たにエクスプローラーが開きます。

これは、マウントされたディスクイメージの中身を表示しています。

この中から「setup.exe」をダブルクリックしてインストーラーを起動しましょう。

エクスプローラー


インストーラーが起動すると、まずはライセンスの確認と承諾です。

ラジオボタンを「I acept the terms of the license agreement」に設定し「Next >」ボタンをクリックしてください。

インストーラー - 1


特別な事情がない限り、ここは「Next >」ボタンをクリック!

インストーラー - 2


Install」ボタンをクリックするとインストール作業が始まります。

インストーラー - 3


インストール作業が始まりました。

ここまでは、スムーズに進みます。

インストーラー - 4


問題はココ!!

インストール作業の後半で以下のスプラッシュスクリーンが表示されます。

でも、このプログレスバーが全く進まない!

まるでフリーズしたように物凄く長い時間待たされます。

明らかに異常と判断して、ここで、何度インストールを中断してしまったことか…。

エラーではありませんので、ここはグッと我慢して待っていてください。

スプラッシュスクリーン


以下の画面が表示されるとホットします。

ここでは、画面右上の「Log In」という表示をクリックします。

インストーラー - 5


表示されたメニューの中から「Log In」をクリックしましょう。

インストーラー - 6


すると、以下のダイアログが表示されますので、メールアドレスパスワードを入力し「Login」ボタンをクリックします。

ログイン・ダイアログ


間髪入れずに以下のポップアップが表示されます。

今後の開発のために、お客さんの使用状況が知りたいのでユーザーデータを下さい!って言ってます。

ヤダ!という選択肢は無しか…。

ここは一旦「OK」ボタンをクリックです。

ポップアップ - 1


ココも問題!

以下のポップが表示されます。

先ほどのユーザーデータを収集しているのか何なのか分かりませんが、これのプログレスバーも待てど暮らせど全く進まない!

Silicon Labs社のサーバーが遅いのか、私の家のネットワークが悪いのか?

私は、ここでたまらず「Cancel」ボタンをクリックしてしまいましたが、インストールに支障はないようです。

義理堅い方は、終わるまで待っていてあげてください。

ポップアップ - 2


ふー…ようやく元の画面に戻りました。

ここでは、画面下部の「Accept all agreements」のチェックボックスにチェックを入れて(片方だけチェックすると両方チェックされます。)右下の「Done」ボタンをクリックします。

インストーラー - 7


次に、以下の画面が表示されます。

まずは「Run demos on connected devices」という部分をクリックしましょう。

インストーラー - 8


以下の画面に切り替わったら…。

インストーラー - 9


このタイミングでターゲットボードをパソコンに接続しましょう。

私が使っているのは「Z-Wave 800 Pro キット」というものです。

高いです!

ターゲットボード


これをUSB経由でパソコンに接続すると、以下のようにインストーラーに認識されるはずです。

自分が接続したターゲットボードが正しく認識されたことを確認してから「Start」ボタンをクリックします。

インストーラー - 10


次に「Install Developer Tools」という表示をクリックすると…

インストーラー - 11


…以下の画面に戻ります。

次は真ん中の「Install by connecting device(s)」をクリックします。

ここでは、ツールチェーンやSDKなどをアップデート/インストールします。

インストーラー - 12


アップデートを検索しているようですね。

ちょっと待ちましょう…。

インストーラー - 13


以下の画面に切り替わったらアップデートやインストールが可能なソフトウェアが表示されます。

特に事情がなければ右下の「Update All」をクリックします。

インストーラー - 14


アップデート作業が始まります。

デバッガーなどのデバイスドライバもアップデートされる場合があるため、途中で数回セキュリティ警告が出るかもしれません(いずれも「OK」で大丈夫です。)。

これも結構時間がかかります…。

インストーラー - 15


アップデートが終わると、以下の表示となります。

Restart」ボタンをクリックしてください。

インストーラー - 16


その後、再び以下の画面が表示されます。

今度こそ最後か!?

右側の「Install by technology type...」をクリックです。

ここでは、Silicon Labs社のマイコンの特徴である無線関係のプロトコルスタックやライブラリをインストールします。

インストーラー - 17


またまたアップデートの検索です。

インストーラー - 18


以下の画面に切り替わったらインストールが可能なソフトウェアが表示されます。

「Select All」としても良いのでしょうが、今回はお目当ての「32-bit and Wireless MCUs」をチェックし、画面右下の「Next」ボタンをクリックしました。

インストーラー - 19


以下の表示では、特に事情がない限り「Auto」を選択し。画面右下の「Next」ボタンをクリックします。

インストーラー - 20


再びライセンスの確認と承諾です。

ここでも、画面下部の「Accept all agreements」のチェックボックスにチェックを入れて(片方だけチェックすると両方チェックされます。)右下の「Next」ボタンをクリックします。

インストーラー - 21


インストール作業が開始されます。

これまたかなりの時間待たされます…。

ゆっくりお茶でも飲んでいた方が良いです。

インストーラー - 22


インストール作業が終わると、以下の表示となります。

Restart」ボタンをクリックしてください。

インストーラー - 23


スプラッシュスクリーンの後、以下のようにEclipseベースの開発環境が立ち上がれば「Simplicity Studio」のインストールは完了です。

「Simplicity Studio」


「Simplicity Studio」のインストールは、全体として待たされることが多く、安定性も今一つな印象です。

よほど時間のある時に実施しましょう!


さて、次は動作確認も兼ねてSilicon Labs社のSDKを使った簡単なプログラムを動かしてみましょうかね~。


<続く>

2024年11月10日日曜日

「pcDuino3」でYocto Project その10

前回からの続きです。

このテーマを最初からご覧になる場合はこちらからどうぞ。


「core-image-sato」のビルド(完結編)

試行錯誤の末、前回までに「core-image-sato」のbitbakeまで漕ぎ付けました。

長いビルド時間をかけて、ようやく絵の出せるディストリビューションを完成させたと思いきや…。

出来上がったイメージをSDカードにコピーし「pcDuino3」に挿入、起動させましたが、以下の画面でフリーズという残酷な結果。

スプラッシュスクリーン


このスプラッシュスクリーンは「core-image-minimal」の時には出ていなかったので、全くダメというわけでもないのでしょうけど…。

何が悪いんだろう?

再びネット検索で調査します。

キーワードは「meta-sunxi」など、問題の有りそうなレイヤーやレシピの名前を使うと良いです。

すると、このページが引っかかりました。

これは、Chelさん(って言うのかな?)のブログで「pcDuino3」と同じくAllWinner製のプロセッサを搭載している「Cubieboard2」というボードで「Yocto Project」を使用した際の記録です。

このように、自分が使おうとしているボードと同じプロセッサの情報でも、案外良いヒントになったりします。

この情報を使わせていただきましょう。

Chelさん、ありがとうございます!


さて、このページの情報によると「core-image-sato」を動かすために更に必要な作業は、以下の通りです。


◯「local.conf」へ必要なパラメータの追記

◯「sunxi-mali_git.bb」の修正

◯「gstreamer1.0-plugins-base_%.bbappend」ファイルの作成


まずは「local.conf」へ必要なパラメータの追記からやってみましょう。

パスは、以下の通り。


/home/yocto/poky/build/conf/local.conf


最終的に、以下のように追記しました。

  • ...
  • #
  • # for pcDuino3
  • #
  • #CORE_IMAGE_EXTRA_INSTALL += "nodejs nodejs-npm openssh git"

  • PACKAGECONFIG:remove_pn-xserver-xorg = "glamor"
  • XSERVER:append = " xserver-xorg-extension-glx xf86-video-modesetting xf86-video-fbdev"
  • XSERVER:remove = "xf86-input-keyboard xf86-input-mouse"
  • IMAGE_FEATURES += "x11"
  • DISTRO_FEATURES:append = " opengl x11"
  • DISTRO_FEATURES:remove = "wayland"
  • MACHINEOVERRIDES .= ":use-mailine-graphics"
  • VOLATILE_LOG_DIR = "no"


この内「XSERVER:remove =」の行は、前回の修正。

「MACHINEOVERRIDES .=」の行は、こちらのREADMEを根拠に。

「VOLATILE_LOG_DIR =」の行は、こちらにある通り、「/var/log」以下のログを保存しておきたかったので追記しています。

これ以外は、ほぼChelさんの情報から必要と思われるものを抜粋しています。

追記が終わったら「local.conf」の保存をお忘れなく!


次に「sunxi-mali_git.bb」の修正です…ってこのファイル前回も修正しましたよね?

まだ足りないってか?

パスは、以下の通り。


/home/yocto/poky/meta-sunxi/recipes-graphics/libgles/sunxi-mali_git.bb


ここでは、ファイルの最後の方、一行だけ修正します。

わかりにくいかもしれませんが「RPROVIDES:${PN} +=」の行を「#」でコメントアウトして、その直下に新たに「RPROVIDES:${PN} =」の行を付け加えています。

  • ...
  • # Packages like xf86-video-fbturbo dlopen() libUMP.so, so we do need to ship the .so files in ${PN}
  • PACKAGES =+ "${PN}-test"

  • #RPROVIDES:${PN} += "libGLESv2.so libEGL.so libGLESv2.so libGLESv1_CM.so libMali.so"
  • RPROVIDES_${PN} = "libGLESv1_CM.so libGLESv2.so libEGL.so"
  • #RDEPENDS:${PN}-test = "${PN}"

  • FILES:${PN} += "${libdir}/lib*.so"
  • FILES:${PN}-dev = "${includedir} ${libdir}/pkgconfig/*"
  • FILES:${PN}-test = "${bindir}/sunximali-test"
  • ...


変数に「+=」 とした場合、元の変数の中身に加えて、これ以降に表記する要素を加えます。

対して「=」の場合は、元の変数の中身に関係なく、これ以降に表記する要素をそのまま代入します。

つまり、元の表記では余計なものが「RPROVIDES」変数に加えられてしまうのでしょう。

修正が終わったら「sunxi-mali_git.bb」の保存をお忘れなく!


最後に「gstreamer1.0-plugins-base_%.bbappend」ファイルの作成です。

この長ったらしい名前のファイル、以下のディレクトリに作成します。


/home/yocto/poky/meta-sunxi/meta-sunxi/recipes-multimedia/gstreamer/

ファイル・ブラウザ - 1


この「gstreamer1.0-plugins-base_%.bbappend」ファイルの中身は、以下のように表記します。

  • RDEPENDS_libgstgl-1.0 += "sunxi-mali"
  • RDEPENDS_${PN}-opengl += "sunxi-mali"


これまでの経験からレシピ・ファイルの拡張子は「.bb」であることがお分かりでしょう。

今回の「.bbappend」ファイルというのは、同名のレシピ・ファイル「.bb」の後にbitbakeにより解析され、同名のレシピ・ファイル「.bb」の中で行われた内容を変更したり、補完したりするものです。

例えば、どこかのレイヤーに「hogehoe.bb」というレシピがあって、その中で「HOGEHOGE = "fuga"」とあるとします。

このとき、どこかのレイヤーに「hogehoe.bbappend」というファイルがあって、その中で「HOGEHOGE = "piyo"」とあった場合、最終的に「HOGEHOGE 」変数は「"piyo"」となります。

一方、「hogehoe.bb」というレシピがあったとしても、その中で「HOGEHOGE 」変数の操作が行われていない場合を考えてみましょう。

このケースでは「hogehoe.bbappend」というファイルがあって、その中で「HOGEHOGE = "piyo"」とあった場合は、この内容で「HOGEHOGE 」変数が定義されることになります。

この「.bbappend」ファイルというのは、元のレシピ・ファイルを不用意に変更したり、汚さないようにするために多様されます。

今回の場合「gstreamer1.0-plugins-base_x.xx.x.bb」は、恐れ多くも「Yocto Project」の根幹であり、最上位のレイヤーである「meta」に属するレシピです。


/home/yocto/poky/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.22.6.bb


サードパーティとしては、自分の都合でこれを書き換えてもらえるはずもない(ボードやベンダーごとにそんなことやってたら収集が付かなくなる)ので、このような変更方法を採ります。

また「gstreamer1.0-plugins-base_%.bbappend」の「%」は、ワイルドカードです。

レシピ・ファイルは、名前の後にリビジョン番号が付くことがあります。

つまり今回の場合は、全てのリビジョンの「gstreamer1.0-plugins-base」に適応される「.bbappend」ファイルという意味になります。


さて、これで修正作業は完了。

以下のコマンドで「core-image-sato」をbitbakeします!

うぉりゃ、行け~ぃ!!


$ bitbake core-image-sato

ターミナル - 1


今回はそんなに時間はかからないはず!

というわけでbitbake無事終了!!

ターミナル - 2


以下のディレクトリを確認すると…


/home/yocto/poky/build/tmp/deploy/images/pcduino3/


ちゃんと「core-image-sato-pcduino3.wic.gz」というのが出来ていますね!

ファイル・ブラウザ - 2


こちらの記事を参考にSDカードを作成して「pcDuino3」を起動させましょう。

簡単におさらいすると…。

まずは、以下のコマンドで圧縮されている「core-image-sato-pcduino3.wic.gz」を解凍。


$gunzip -k -f ./tmp/deploy/images/pcduino3/core-image-sato-pcduino3.wic.gz

ターミナル - 3


以下のディレクトリで解凍された「core-image-sato-pcduino3.wic」を確認してください。


/home/yocto/poky/build/tmp/deploy/images/pcduino3/

ファイル・ブラウザ - 3

ここでパソコンにSDカードを挿入して、以下のコマンドでUbuntuに何処に認識されたかを確認します。


$ df

ターミナル - 4

今回の場合「/dev/sdb1」が「/media/yocto/boot」、「/dev/sdb2」が「/media/yocto/c748ecdf-46b6-4795-82ca-bb519c856946」として認識されていますね。

これは、私の環境の場合ですので、みなさん各自必ず確認してください。

SDカードにOSのイメージを書き込む前に、これらをアンマウントする必要があります。

今回の場合は、そのコマンドは以下の通りです。


$ sudo umount /media/yocto/boot

$ sudo umount /media/yocto/c748ecdf-46b6-4795-82ca-bb519c856946

ターミナル - 5

SDカードへアクセスするための権限を付与します。

今回の場合、SDカードは「sdb」と認識されていたので、以下の通り。

b」の部分は環境によって異なる可能性がありますので注意。


$ sudo chmod 666 /dev/sdb

ターミナル - 6

いよいよ以下のコマンでOSイメージの書き込みです。


$ oe-run-native bmap-tools-native bmaptool copy ./tmp/deploy/images/pcduino3/core-image-sato-pcduino3.wic /dev/sdb

ターミナル - 7


書き込みが終了したら、SDカードを正しくパソコンから取り出し「pcDuino3」に挿入して、電源投入です!

今度は、上手くいくはず!!

冒頭のスプラッシュスクリーンでフリーズすることなく、無事に起動…、いや、でもヤケに地味な画面ですな!

これが佐藤さん?

操作にはマウスが使えますので「pcDuino3」に挿入しましょう。

SATO - 1


デスクトップと思われる画面には、いくつかのアイコンが…。

「Media Player」っていうのは、ちょっと気になる。

SATO - 2


これだけしか無いの?

苦労したのに、淋しいねぇ。

SATO - 3


おっと、右上に何かリンクっぽいものが?

これをクリックすると…。

SATO - 4


おお!ゲームと思しきアプリのアイコンが沢山現れました!!

SATO - 5


ちょっと遊んでみようかな…。

これは、アレだ…パネルをずらしていって、1から15まで並べるヤツ。

「Fiteen」っていうのか~?

SATO - 6


お馴染みのマインスイーパー「Mines」。

SATO - 7


こちらもお馴染み、さめがめ。

…一瞬、何だか分からなかった。

「Samegame」です。

SATO - 8


数独もありました!

これは時間の経つのを忘れちゃう系。

SATO - 9


その他にも、遊び方が分からないものも含めて多くのゲームが入っていました。

すべて単純なものではありますが、デモンストレーションとしては親しみやすいですね。


さて、これで無事に絵の出るディストリビューション「core-image-sato」を「pcDuino3」上で動かすことができました。

これまで御覧頂いた通り「Yocto Project」でのディストリビューション作成は、相当に難易度が高いです。

マスターしようとしても、特に初期の段階では成長曲線の上がりは鈍いです。

しかしながら、bitbake中に起こるエラーには一定のパターンがあり、過去のエラーの内容と回避方法を覚えておけば、次に同じ問題に遭遇したときに応用が効くため、その後の作業は楽になっていきます。

また、今回のように自分の力だけではどうにもならない場合は、必要な情報をネットで検索するためのコツを掴むことによって、問題解決へと繋げることもできます。

そこに行き着くまでの道のりが長いことが課題と言えます。

しかしながら、NXPにせよ、TIにせよ、Renesasにせよ、STMicroもそうだったかな?

アプリケーションプロセッサのベンダーは、自社のプロセッサを搭載した評価ボードをリリースしており、そのためのレイヤーやレシピを提供しています。

つまり、これらをリファレンスとして利用する製品開発のためには「Yocto Project」を使用することが前提となっているのです。

組み込みエンジニアとして働いていれば、いつ「Yocto Project」を使用しなければならない案件が飛び込んでくるとも限りません。

事前に、今回の「pcDuino」や、メジャーどころの「Raspberry Pi」などで「Yocto Project」に慣れておいて損はないはずです。


Yocto関連の記事は、今回で終了です。

長々とお付き合いくださいまして、ありがとうございました。

今後は「Raspberry Pi5」などで、もっと深いレベルで「Yocto Project」を使用する例などもトライしたいと思います。

…むしろ「pcDuino3」などのマイナーなボードよりも情報量が多いので、最初から「Raspberry Pi5」にしておけば…って、後の祭りです!!


<終わり>

Simplicity Studioを使ってみた! その3

前回からの続き です。 このテーマを最初からご覧になる場合は こちら からどうぞ。 「Simplicity Studio」でプログラミング インストールしたSilicon Labs社のマイコン用の統合開発環境「 Simplicity Studio 」で、テストプログラムを動かして...