2023年12月8日金曜日

「pcDuino3」でYocto Project その4

前回からの続きです。

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


「Yocto Project」の構築

前回「VMware Workstation Player」上にインストールした「Ubuntu」を立ち上げましょう。

「Ubuntu」 - 1


ターミナルを起動します。

キーボードの「Ctrl」+「Alt」+「T」を同時に押すと楽です。

「Ubuntu」 - 2


Linuxを扱うと、どうしてもターミナル(コマンドライン)での作業が多くなります。

アレルギーのある方は、今のうちに慣れておきましょう。

さて「Yocto Project」を動作させるには、いくつかのプログラムを予めインストールしておくことが前提となります。

それがまた、エラい数です。

早速、これらをインストールしましょう!

下のコマンドをコピーして「Ubuntu」のターミナルにペーストしてリターンキーを押しましょう。

(頭の「$ 」以降をコピーしてください。)

Winodowsから「VMware Workstation Player」上の「Ubuntu」へコピー・アンド・ペーストできますし、逆もまた可です。


  • $ sudo apt install gawk wget git diffstat unzip texinfo gcc build-essential chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev python3-subunit mesa-common-dev zstd liblz4-tool file locales
ターミナル - 1


ね!エラい数でしょ?

こんなのイチイチ打ってられるかっ!

パスワードの入力が求められます。

yocto」でしたね。

ターミナル - 2

「sudo」は、以降のコマンドを管理者権限で実行させるコマンドで「apt install」というのが、以降に続くプログラムをダウンロード、インストールするコマンドです。

以下の画面では、作業を続行して良いかどうかを問われています。

ここは、リターンキーを押します。

ターミナル - 3


作業中…。

意外と速く進みます。

ターミナル - 4


ダウンロードとインストールが終わると、以下の表示になります。

ターミナル - 5

次に、UTF-8ロケールの設定を行います。

要は文字コードの設定なのですが「Yocto Project」はUTF-8じゃないとトラブるようです。

以下のコマンドを入力してリターンキーを押します。


$ sudo locale-gen en_US.UTF-8

ターミナル - 6


いよいよ「Yocto Project」をダウンロード/インストールします。

以下のコマンドを入力してリターンキーを押します。


$ git clone git://git.yoctoproject.org/poky

ターミナル - 7

地味に時間がかかる感じ?

終了した模様。

ターミナル - 8


以下のコマンドで、現在のホームディレクトリに「poky」というディレクトリが生成されたことが確認できます。

これが「Yocto Project」の実体です。


$ ls -l

ターミナル - 9


では、その中に突入!

ターミナルに「$ cd poky/」と入力してリターンキーを…と、その前に豆知識。

例えば、今回のようにターミナルでディレクトリを打ち込む機会って今後も結構あると思います。

今回の場合「cd po…」まで打ってから「Tab」キーを押してください。

タブ補完機能 - 1


そうすると、勝手に残りの「…ky/」が補完されます。

タブ補完機能 - 2


これは「タブ補完」と呼ばれているもので、現在のディレクトリ直下の存在するディレクトリやファイルの候補を自動的に補完してくれる機能です。

(存在しない場合は、何も起こりません。)

つまり、目的のディレクトリやファイルの頭から2~3文字だけ入力して「Tab」キーを押すことで名前が補完されるので、長いパスをタイピングする必要がなくなります。

これなら、ターミナルでのキー入力の回数が大幅に減って、大変楽になります。

実は私、若かりし頃Linuxを触りだしてから、かなり長いことこの機能を知りませんでした。

そして立派なターミナル・アレルギーになってしまいました。

でも、これを知ってからターミナルが大好き…にはなってませんがね。

まあ、…普通?


さて、話を戻して。

ターミナルに「$ cd poky/」と入力してリターンキーです。


$ cd poky/

ターミナル - 10


ここで思案のしどころ…。

一口に「Yocto Project」と言っても、ソフトウェアなので古いのやら新しいのやら、色々とバージョンがあります。

このページに一覧表があります。

どれを選びましょう?

ソフトウェアというものは、新しいほど良いという訳ではありません。

とはいえ、古すぎては「pcDuino3」に新しいディストーションを!…という、今回の趣旨に反します。

「Yocto Project」は、経験上、サポートが終わったばかりの状態が一番安定している気がします。

(最近は違うのかも?)

というわけで、今回は「Mickledore」というのを選びます。

Yocto Project Releasesページ


Mickledore」=ミクルドア…、イギリスにある山の名前みたいですね。

以下のコマンドを入力してリターンキーを押します。


$ git checkout -t origin/mickledore -b pcduino3

ターミナル - 11

このコマンドは、説明が必要かもしれません。

通常「git clone」コマンドでダウンロードされるソースコードやドキュメント類は、公開されている最新のものとなります。

しかしながら、今回は少し古い「Mickledore」を使用したいのです。

そのためには、ダウンロードされたソースコードやドキュメント類をその「時期」のものに先祖返りさせる必要があります。

この「時期」を指すのがリモートブランチと言って、上記のコマンドでは「origin/mickledore」の部分にあたります。

そして「origin/mickledore」のスナップショットをダウンロードしたソースコードやドキュメント類に反映させます。

これを「checkout」と呼びます。

リモートブランチ「origin/mickledore」は、管理者によって今後も変更されるかもしれません。

一方「checkout」したスナップショットは、今後、私達が変更するかもしれません。

この時点で「origin/mickledore」は分岐したことになります。

文字通りブランチ「枝」別れという訳です。

本家の「origin/mickledore」は、リモートブランチとして今後も「Yocto Project」のGitサーバで管理されます。

スナップショットは「pcduino3」という新たな名前のローカルブランチとして私達の開発用PCの中で管理していきます。


…とまあ、分かりにくい説明で申し訳ありません。

要は、ダウンロードした最新の「Yocto Project」を少し古いバージョンに戻したよ!ってコトで。

次に「Yocto Project」の動作に必要な環境変数の設定と「build」ディレクトリを作成します。

以下のコマンドを入力してリターンキーを押します。

環境変数が設定され、さらに「build」ディレクトリが作成されて、そこに移動した様子が分かります。


$ source oe-init-build-env

ターミナル - 12

「Ubuntu」のエクスプローラーで見ても「poky」ディレクトリ以下に「build」ディレクトリが出来ていますね。

「build」ディレクトリ

さてさて、早速「Yocto Project」の試運転と行きましょうか。

そこで、ちょっと相談があるんですが…。

今、このページを読んでくれて、実際に試そうと思っている方!


今何時ですか?


…というのも、次のコマンドは終了までにとても長い時間がかかります。

試運転ですから、最小限の軽いLinuxディストリビューションを作ろうと思っています。

まずは、いきなり「pcDuino3」用ではなく、デフォルト設定の「x86-64」アーキテクチャ用、すなわち普通のPC向けのディストリビューションです。

それでも、開発用PCのスペックと、ネットの環境によっては5時間以上は覚悟です。

「Yocto Project」のビルドツールである「bitbake」は、相当に処理が重いため、その間はPCをほぼ専有されてしまいます。

ですので、次のコマンドは就寝前に実行することをオススメします。

朝起きれば、きっとディストリビューションのビルドが成功しているはずですよ。

普段の行いが良ければ。

…というわけで、布団の入る前に、以下のコマンドを入力してリターンキーを押します。


$ bitbake core-image-minimal

ターミナル - 13

なにやら、始まりましたよ~。

これは、ディストリビューションに含まれる様々なソフトウェアのソースコードをダウンロードしてはビルドする...ということを延々と繰り返しているようです。

ターミナル - 14

そして、就寝!!


起床!!


眠い目を擦りながらも、すかさず開発用PCの画面を確認。

よし!どうやらディストリビューションのビルドに成功したみたいです。

エラーが出た時って、真っ赤なエラーメッセージがビッシリ出力されるので一目で分かります。

ターミナル - 15


ビルドの成果物は、以下のパスに生成されています。

階層、深すぎですね…。


/home/yocto/poky/build/tmp/deploy/images/qemux86-64

ビルドの生成物のディレクトリ

タイムスタンプを見てみると、ディストリビューションのイメージファイルの生成時間が「4:50」くらい。

「bitbake」コマンドを打ったのが昨晩「0:00」くらいだったので、やっぱり5時間コースですね。

仕事でLinuxを扱っていた頃、今回のように会社で帰宅時に「bitbake」コマンドを打って、夜通しビルドを行うことがよくありました。

それで、翌朝出社して画面を見ると、大量のエラーが出てビルド失敗。

その日の出鼻を挫かれた感じで、一日中スッキリしない気分…なんてことは、組み込みLinuxエンジニアあるあるです。

エラーの原因は、色々あります。

単純にパラメータの入力ミスとかなら分かるのですが、ネットワークの切断だったり「Ubuntu」のフリーズだったり、はたまたソースコードのダウンロード元のサーバが落ちていたりなどなど、納得いかない理由であることもしばしば…。

どうやら、今回構築した「Yocto Project」は、正常に動作してくれたようです。


さて、今回はここまで。

今回は試運転だったので「pcDuino3」では動かないディストリビューションを作りました。

次回以降は、これを「pcDuino3」で動くようにする作業をやっていきましょう。


<続く>

2023年12月1日金曜日

TOPPERS/ASP - Arduino UNO R4版 その3

前回からの続きです。

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


Flexible Software Package (FSP)とは?

FSPとは、ドライバ、プロトコル・スタックなどを開発者に提供するソースコードのライブラリです。

いわゆるRenesas社純正のライブラリパッケージであり、これを使用するとマイコンに内蔵されているペリフェラル(周辺機器)を簡単に利用することができるというものです。

今回の「TOPPERS/ASP Arduino UNO R4版」のカーネル内でも、I/O関連のドライバなどは、このFSPのものを使用しています。

ところが、このFSPのソースコードのライセンスの条項が不明瞭なために再配布できません。

そのため「TOPPERS/ASP Arduino UNO R4版」のソースコードが不完全なものとなり、そのままではビルドが通らず、通すためには手動で不足分のソースコードをコピーしていただくという手間を強いることになってしまいました。

面倒くさい思いをさせてしまって申し訳ありません。

ですが、このFSPを上手く利用すれば「Arduino UNO R4」に搭載されているRAマイコンのすべての周辺機器を最小限のコーディングで簡単に利用できるようになります。

後々、このFSPの便利な使い方の例も書いていきたいと思いますので、どうぞよろしく。

さて、ビルドを通すために足りていないFSPのソースコードを何処から入手すれば良いのか?

そのためには、インストールした「e2 studio」上で雛形となるプロジェクトを作って、そこで生成されたFSPのソースコードを「TOPPERS/AS Arduino UNO R4版」のソースツリーにコピーするという方法を採ります。


雛形プロジェクトの作成

まずは「e2 studio」を起動して下さい。

「e2 studio」 - 1


次に、アプリケーションメニューの「ファイル」から「新規」をクリックし「Renesas C/C++ Project」をクリック、更に展開されたメニューから「Renesas RA」をクリックします。

「e2 studio」 - 2


以下のようなダイアログが表示されたら「Renesas RA C/C++ Project」の表示をクリックして選択状態にしてから、ダイアログ下部の「次へ」ボタンをクリックしましょう。

「New C/C++ Project 」ダイアログ


以下のように「Renesas RA C/C++ Project」ダイアログが表示されたら「Project name」の下のテキストボックスにプロジェクト名を入力します。

雛形プロジェクトなので「Hinagata」とでもしましょうかね。

入力したらダイアログ下部の「次へ」ボタンをクリックです。

「Renesas RA C/C++ Project」ダイアログ - 1


以下のように表示か切り替わります。

ここでは、どんなターゲット向けのソフトウェアを作るのかを問われています。

まずは、ターゲットのマイコン(Device)が違いますね。

「Arduino UNO R4」に搭載されているマイコンは、デフォルトで表記されている型番ではありません。

ですので、これを変更する必要があります。

R7FA2A1AB3CFM」と表記されているテキストボックスの左に「...」というボタンがありますので、これをクリック!

「Renesas RA C/C++ Project」ダイアログ - 2


以下のようなダイアログが表示されますので「Arduino UNO R4」に搭載されているマイコンである「R7FA4M1AB3CFM」を正しく選択して「OK」ボタンをクリックします。

「Device Selection」ダイアログ


「Renesas RA C/C++ Project」ダイアログに戻ります。

Device Selection」の欄に正しいマイコンの型番が表示されていることを確認し、次は「Debugger」の欄に注目します。

今回は、デバッガに「E2 Lite(ARM)」を使用しますので、コンボボックスをこれに設定します。

正しく設定できたら、ダイアログ下部の「次へ」ボタンをクリックしましょう!

「Renesas RA C/C++ Project」ダイアログ - 3


次の表示は、何もせずに「次へ」ボタンをクリックしていいです。

「Renesas RA C/C++ Project」ダイアログ - 4


次の表示も、何もせずに「終了」ボタンをクリック!

「Renesas RA C/C++ Project」ダイアログ - 5


次のポップアップが表示されますので「パースペクティブを開く」ボタンをクリックしてください。

ポップアップ


これで雛形プロジェクトが作成されたはずなのですが「e2 studio」を起動したときと同じ表示のままです。

開いたはずのパースペクティブとやらは一体どこに?

実は、ちゃんと開かれているのです。

「ようこそ」ビューが邪魔しているんですね。

なので、これを除けてしまいましょう。

「e2 studio」の画面右上に「ようこそ」ビューの最小化ボタン(アンダーバーみたいなやつ)がありますので、これをクリックしてください。

「e2 studio」 - 3


すると、以下のような表示になります。

画面左側の「プロジェクト・エクスプローラー」のリストには、ちゃんと「Hinagata」プロジェクトが生成されていることが確認できますね。

「e2 studio」 - 4


マイコンのピンの設定

中央の「Summary」と書いてある「FSP Configuration」タブに注目してください。

「e2 studio」 - 5


このタブの下部には、更に複数のタブが存在しますが、その中の「Pins」タブをクリックしてください。

「e2 studio」 - 6


以下の表示に切り替わります。

「e2 studio」 - 7


ここは何をする画面かっていうと、マイコンのピンの設定です。

例えば、このピンはGPIOに使う…とか、このピンはシリアル通信に使う…とか。

すなわち、今回のターゲットである「Arduino UNO R4」で使用されるマイコンのピンの機能を設定するための作業となります。

そのためには「Arduino UNO R4」の回路図が必要ですね。

ここから、ダウンロードをお願いします。

この回路図で注目したいのは、回路図左上の「HEADERS」の部分です。

「Arduino UNO R4」の回路図 - 1


黄色い四角の左側「JANALOG」は、以下の部分に相当します。

「Arduino UNO R4」 - 1


黄色い四角の右側「JDIGITAL」は、以下の部分ですね。

「Arduino UNO R4」 - 2


例えば、今「e2studio」で開いている「Pin Configuration」で、シリアル通信「SCI2」のためのピン「P302_SCI2_TXD」と「P301_SCI2_RXD」を設定したい場合を考えます。

「Arduino UNO R4」の回路図 - 2


その場合は「Pin Configuration」の中の左側「Pin Selection」リストの中から「SCI2」を選択します。

次に、新たに切り替わった左の「Pin Configuration」の「Operaring Mode」の行の「Disabled」という表記の左側の「」マークをクリックします。

これはコンボボックスになっていて、設定できる機能が展開されます。

この中から「Asynchronous UART」(つまり普通のシリアル通信)を選択します。

「e2 studio」 - 8


すると、以下の表示に切り替わります。

「TXD_MOSI」が「P302」に、「RXD_MOSI」が「P301」に自動的に割り付けられたようです。

回路図では「P302_SCI2_TXD」と「P301_SCI2_RXD」という表記だったので、どうやらこれで正しいようですね。

「e2 studio」 - 9


「FSP Configuration」タブの左側の「FSP Visualization」のマイコンの絵でも「TXD_MOSI」と「RXD_MOSI」が表示され、このピンが「SCI2」の通信用のピンとして割り当てられたことが確認できます。

「e2 studio」 - 10


今回は「TXD_MOSI」が「P302」に、「RXD_MOSI」が「P301」に自動的に割り付けられましたが、これは偶然かもしれません。

もし、それぞれを違うピンに割り付けたい場合は「Pin Configuration」上でピン名の左側にある「」マークをクリックすることで、他のピンの候補を探して、設定することができます。

「e2 studio」 - 11


さて、このような作業を使用するすべてのピンで行うことになります。

このピンはアナログ入力、このピンはI2C通信用、などなど。

でも…


超ぉ~メンドクセエぇ!!


…ごもっとも。

ですので、今回のTOPPERS/ASPを動作させるための最低限の設定済みファイルをアタクシめが用意しときましたぜっ、ダンナ!(誰だオマエ?)

…てなわけで、ここからダウンロードしてください。

arduino_uno_r4.pincfg」というファイルがダウンロードできます。

これをインポートすれば、面倒な作業は一瞬で終わります!

ダウンロードが終わったら「Pin Configuration」の「Manage configutrations...」という表示をクリックしてください。

「e2 studio」 - 12


以下の「Manage Pin Configrations」ダイアログが開いたら「Import」ボタンをクリックします。

「Manage Pin Configrations」ダイアログ - 1


続いて、以下の「Import Configration」ダイアログが開いたら「Browse...」ボタンをクリックします。

「Import Configration」ダイアログ - 1


ダウンロードした「arduino_uno_r4.pincfg」を選択すれば良いのですが…どこにも無いじゃん!って場合は、検索する拡張子を変更しましょう。

Altium Pin Configuration File(*.pincfg)」を選択します。

「Import from pin configuration file」ダイアログ - 1


そうすると「arduino_uno_r4.pincfg」が表示されるはずです。

これを選択し、ダイアログ下部の「開く」ボタンをクリックです!

「Import from pin configuration file」ダイアログ - 2


「Import Configration」ダイアログに戻ったら、追加された「arduino_uno_r4」のチェックボックスを有効にしてから、ダイアログ下部の「終了」ボタンをクリックです。

「Import Configration」ダイアログ - 2

「Manage Pin Configrations」ダイアログ に戻ったら、左側のリストに「arduino_uno_r4」が追加されていることを確認してください。

「Manage Pin Configrations」ダイアログ - 2


左側のリストに元々あった「R7FA4M1AB3CFM_pincfg」は、もういらないので削除しましょう。

ていうか、残ってると後々問題になります。

R7FA4M1AB3CFM_pincfg (Current)」を選択状態にしてから、右側の「Remove」ボタンをクリックします。

「Manage Pin Configrations」ダイアログ - 3

左側のリストで「R7FA4M1AB3CFM_pincfg (Current)」が削除されて「arduino_uno_r4 (Current)」だけが残っていることを確認して、ダイアログ下方の「OK」ボタンをクリックしてください。

ダイアログが消えて「Pin Configuration」に処理が戻ります。

「Manage Pin Configrations」ダイアログ - 4


するとどうでしょ?

ピンの設定が「arduino_uno_r4.pincfg」の内容に更新されていることが分かります。

「FSP Configuration」タブの左側の「FSP Visualization」のマイコンの絵も、設定を反映して、なにやら賑やかになってませんか?


クロックの設定

さて、お次は「Arduino UNO R4」のクロックの設定を行わなければなりません。

この雛形プロジェクトを作成した時点では、外部クロックのXTALを使用するように初期設定されているのですが、実際「Arduino UNO R4」には外部クロックのXTALが搭載されていません。

その代わりに、内部クロックを使用するように設定してあげなければいけません。

これを行うには「FSP Configuration」タブの下部の「Clock」タブをクリックして設定画面を開きます。

「e2 studio」 - 13


クロックの設定画面が開いたら、以下のように外部クロックのXTALを使用する設定から、内部クロック(HOCO 48MHz)を使用する設定に切り替えます。

変更は三箇所

「e2 studio」 - 14


<追記>

「Arduino UNO R4」には、サブクロックが実装されていません。

回路図を見るとRAマイコンの「XTAL」と「EXTAL」端子が未実装になっていることが分かると思います。

したがって、サブクロックを使用しない設定にしなければなりません。

これをやらないと、これから吐き出すコードの中のRTC設定処理でフリーズします。

(「FSP_HARDWARE_REGISTER_WAIT(R_RTC->RCR2_b.RESET, 0);」という行でデッドロック!)

サブクロックの設定は「FSP Configuration」タブの下部の「BSP」タブをクリック、更にその下部に配置されているビューの「プロパティ」タブをクリックして現れるリストボックスから行います。

もし「Subclock Populated」の項目が「Populated」になっていたら「Not Populated」へ変更しましょう。

(どうやら「e2 studio」のバージョンによってデフォルトの設定が変わるみたいです…。)

「e2 studio」 - 14.5


ソースコードの出力

時は来た!

設定内容をソースコードとして出力します。

「FSP Configuration」タブにおいて「Pin Configuration」の右側に「Generate Project Content」という表示があります。

これの「」マークをクリックです!

「e2 studio」 - 15


以下のポップアップが表示されますので「続行」ボタンをクリックします。

これで、設定内容に沿ったソースコードが雛形プロジェクトに出力されたはずです。

「Generate Project Content」ダイアログ


どんなふうに出力されたのかな?…って気になりませんか?

確認してみましょう。

「e2studio」を現在の「FSP Configuration」モードから「C/C++」モードに切り替えましょう。

この切り替えは、画面右上の「C/C++」ボタンで行います。

クリックしてみましょう。

「e2 studio」 - 16


画面左側の「プロジェクト・エクスプローラー」のリストから「Hinagata」、「ra_gen」の順に展開し「pin_data.c」をダブルクリックします。

すると、画面中央にソースコードが表示されます。

これが、今まで作業してきたピンの設定が出力されたものです。

ちょっと複雑ですが、定義名などの内容から「それっぽい」内容になっていることは分かりますね。

「e2 studio」 - 17


以上で、マイコンのピンの設定は完了です。


さて、今回は「TOPPERS/ASP Arduino UNO R4版」を動かす上で足りないソースコードを出力するための雛形プロジェクトを作りました。

また、その雛形プロジェクトで「Arduino UNO R4」に搭載されているマイコンのピン設定を行い、それを反映したソースコードも出力しました。

次のステップは「TOPPERS/ASP Arduino UNO R4版」のソースコードをダウンロードし、雛形プロジェクトで得られたソースコードをそこにコピーします。

その上で「TOPPERS/ASP Arduino UNO R4版」をターミナル(コマンドライン)でビルドするところまでを行っていきましょう。


<続く>

MLAA License

 名称:「MLAAライセンス」(MLAA) タイプ: ・コピーレフト…× ・ライセンス文の掲示…〇(ソースコード頒布のみ) ・コピーライト(著作権)…〇(ソースコード頒布のみ) ・その他…〇(バイナリ頒布のみ) 原文: Copyright: 2010 Jorge Jimenez ...