2024年1月2日火曜日

「pcDuino3」でYocto Project その6

前回からの続きです。

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


「meta-sunxi」レイヤーの取得

さて、前回までに述べた通り「Yocto Project」で「pcDuino3」用のLinuxディストリビューションを作成するには「meta-sunxi」というレイヤーが必要であることが分かりました。

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

ログイン後は、キーボードの「Ctrl」+「Alt」+「T」を同時に押すなどして、ターミナルを起動させます。

「Ubuntu」


次に、以下のコマンドをターミナルで入力してリターンキーを押すことにより「Yocto Project」の実体である「poky」ディレクトリに移動します。


$ cd poky/

ターミナル - 1


続いて「Yocto Project」の動作に必要な環境変数の設定を設定します。

これは「poky」ディレクトリ以下にある「oe-init-build-env」シェルスクリプトを「source」コマンドで実行することによって行います。

もし、前々回「「pcDuino3」でYocto Project その4」からブッ通しで作業してくれている方の場合、これを行う必要はありません。

しかしながら、一度でもターミナルを閉じてしまったり、ましてやLinuxを再起動してしまった場合などは、再びこの手順を行う必要があります。

なお、前々回にこのコマンドを実行した際は「poky」直下に「build」ディレクトリも作成されたはずですが、これは初回だけです。

すでに「build」ディレクトリが作成されている場合には、これを再生成することはなく、単純に環境変数の設定のみが行われます。


$ source oe-init-build-env

ターミナル - 2


上記のコマンドの実行の結果、強制的に「/home/poky」から、その直下の「/home/poky/build」に移動させられてしまっています。

これだと次の手順で都合が悪いので、一個上の「/home/poky」に戻りましょう。


$ cd ..

ターミナル - 3


続いて、件の「meta-sunxi」レイヤーを取得しましょう。

それが何処にあるかは、前回ご紹介した「OpenEmbedded Layer Index」の「meta-sunxi」レイヤーのページに記述があります。

これによると、リポジトリのURLは「https://github.com/linux-sunxi/meta-sunxi.git」ですね。


https://layers.openembedded.org/layerindex/branch/master/layer/meta-sunxi/

「OpenEmbedded Layer Index」 - 1


これに従い、以下のコマンドを入力します。


$ git clone https://github.com/linux-sunxi/meta-sunxi.git

ターミナル - 4

上記のコマンドの実行の結果「/home/poky」ディレクトリ以下に「meta-sunxi」が生成されたはずです。

ファイル・ブラウザで確認しておきましょう。

ファイル・ブラウザ - 2


お次は、この「meta-sunxi」のリモートブランチ「origin/mickledore」をローカルブラン「pcduino3」としてチェックアウトします。

…って、長嶋茂雄さんの会話みたいになってしまいましたね…。

この意味は、前々回「「pcDuino3」でYocto Project その4」を参照してください。

要するに「meta-sunxi」のバージョンを今回使用する「Yocto Project」の少しだけ古いバージョンである「mickledore」の時期のものへ先祖返りさせますよ、ってことで。

これを行うためには、生成されたばかりの「meta-sunxi」ディレクトリの中へ移動する必要があります。

以下のコマンドを入力です。


$ cd meta-sunxi/

ターミナル - 5

そして、以下のコマンドでチェックアウトです。


$ git checkout -t origin/mickledore -b pcduino3

ターミナル - 6

チェックアウトが終わったら、一個上の「/home/poky」に戻りましょう。


$ cd ..

ターミナル - 7


さて、前回も説明しましたとおり、レイヤーはディレクトリの配置だけではダメで、そのディレクトリのパスを「/home/yocto/poky/build/conf/bblayers.conf」ファイルに記述する必要があります。

今回の場合、以下の部分に「meta-sunxi」のパスを記述すれば良さそうなのですが…

「/home/yocto/poky/build/conf/bblayers.conf」ファイル


…これは、非常にお行儀の悪いやり方だそうです。

では、お上品なやり方とは?

それは、レイヤーを操作するための「bitbake-layers」コマンドを使うことです。

それでは、以下のように「bitbake-layers」コマンドを使用して、レイヤーを追加してみましょう。

「bitbake-layers」コマンドに、レイヤーの追加を指示する「add-layer」オプションを加え、そのパスを指定します。

ですが…


$ bitbake-layers add-layer ../poky/meta-sunxi/

ターミナル - 8


エラーメッセージが出て失敗しましたね…。

内容は…

「sunxi」レイヤーは「meta-python」レイヤーに依存するが、このレイヤーはアンタの設定では有効ではない!

…とか何とか。

うむ、どうやら依存関係の問題で「meta-sunxi」の前に他のレイヤーを追加しておく必要があるみたいですね。

これは「bitbake-layers」コマンドがレイヤーの依存関係を検証した結果、出力されたエラーメッセージです。

もし、レイヤーを追加するために直接「/home/yocto/poky/build/conf/bblayers.conf」ファイルを書き換えていたら、このエラーには気が付かずに、後々ドツボにハマっていたかもしれませんね。

そういう意味で、ちゃんと「bitbake-layers」コマンドを使用して、レイヤーを追加するのが正しい…というか、間違いのない作法ということなのでしょう。

では「meta-sunxi」が依存するレイヤーとは?

答えは、先程も開いた「OpenEmbedded Layer Index」の「meta-sunxi」レイヤーのページにあります。

右側の「Dependencies」という欄に注目。

これによると「meta-sunxi」レイヤーは、以下の4つの別のレイヤーに依存しているとのことです。


●openembedded-core

●meta-oe

●meta-python

●meta-arm

「OpenEmbedded Layer Index」 - 2


というわけで、これらのレイヤーから先に導入しましょう。


依存レイヤーの導入

上記に挙げた「meta-sunxi」が依存するレイヤーを順番に導入していきましょう。

まずは「openembedded-core」レイヤーです。

このレイヤーの導入については、特にやることはありません。

何故ならば「Yocto Project」、すなわち「poky」ディレクトリを生成した時点で既に導入されているからです。

その場所は「/home/poky/meta」ディレクトリです。

ファイル・ブラウザ - 3


「OpenEmbedded」は「Yocto Project」の基となったフレームワークであることは前述のとおりです。

つまりopenembedded-core」レイヤーとは、その上に被せる全てのレイヤーの基底となるレイヤーであると考えてください。

したがって、最初から導入されているんですね。


次に「meta-oeレイヤーです。

このレイヤーの「OpenEmbedded Layer Index」のページを見てみましょう。

「meta-sunxi」レイヤーのページの右側の依存レイヤーのリストからから「meta-oe」をクリックします。

「OpenEmbedded Layer Index」 - 3


開かれた「meta-oe」レイヤーのページで、レポジトリのURLがわかります。

git://git.openembedded.org/meta-openembedded」ですね。

「OpenEmbedded Layer Index」 - 4


これに従い、ターミナルで以下のコマンドを実行することでダウンロードを行います。


$ git clone https://github.com/linux-sunxi/meta-sunxi.git

ターミナル - 9


ファイル・ブラウザで「meta-openembedded」が生成されているのを確認しましょう。

「meta-oe」っていう名前じゃない理由は、後で述べます。

ファイル・ブラウザ - 4


「meta-sunxi」の時と同様「meta-openembedded」のリモートブランチ「origin/mickledore」をローカルブラン「pcduino3」としてチェックアウトします。

以下のコマンドで、生成されたばかりの「meta-openembedded」ディレクトリの中へ移動します。


$ cd meta-openembedded/

ターミナル - 10


以下のコマンドでチェックアウトです。


$ git checkout -t origin/mickledore -b pcduino3

ターミナル - 11


チェックアウトが終わったら、一個上の「/home/poky」に戻りましょう。


$ cd ..

ターミナル - 12


次に「meta-pythonレイヤーです。

このレイヤーの「OpenEmbedded Layer Index」のページを見てみましょう。

「meta-sunxi」レイヤーのページの右側の依存レイヤーのリストからから「meta-python」をクリックします。

「OpenEmbedded Layer Index」 - 5


開かれた「meta-python」レイヤーのページで、レポジトリのURLがわかります。

git://git.openembedded.org/meta-openembedded」ですね…って、コレさっきの「meta-oe」の時と一緒じゃん!?

「OpenEmbedded Layer Index」 - 6


これはどういうことか?

種明かしのために「/home/poky/meta-openembedded」ディレクトリをファイル・ブラウザで開いてみてください。

すると、その中に「meta-oeディレクトリと「meta-python」ディレクトリが配置されていることが分かります。

ファイル・ブラウザ - 5


これはつまり「meta-openembedded」という、いかにもレイヤーっぽい名前のディレクトリの直下にmeta-oe」、meta-python」とその他複数のレイヤーが格納されているという状態です。

したがって「meta-python」は既に取得済みであることが分かります。

このような一つのレポジトリに複数のレイヤーが含まれる例は、大規模なカテゴリの場合に、ママ目にすることがありますので、ご用心を。


それでは、ここいらで「meta-oe」と「meta-python」の両レイヤーを「/home/yocto/poky/build/conf/bblayers.conf」ファイルに追加してしまいましょう。

お作法として「bitbake-layers」コマンドに、レイヤーの追加を指示する「add-layer」オプションを加え、そのパスを入力することによって行うのでしたね?

まずは「meta-oe」レイヤーから。


$ bitbake-layers add-layer ../poky/meta-openembedded/meta-oe/

ターミナル - 13


続いて「meta-python」レイヤー。


$ bitbake-layers add-layer ../poky/meta-openembedded/meta-python/

ターミナル - 14


さて、次はmeta-armレイヤーです。

このレイヤーの「OpenEmbedded Layer Index」のページを見てみましょう。

「meta-sunxi」レイヤーのページの右側の依存レイヤーのリストからから「meta-arm」をクリックします。

「OpenEmbedded Layer Index」 - 7


開かれた「meta-arm」レイヤーのページで、レポジトリのURLがわかります。

git://git.yoctoproject.org/meta-arm」ですね。

「OpenEmbedded Layer Index」 - 8


これに従い、ターミナルで以下のコマンドを実行することでダウンロードを行います。


$ git clone git://git.yoctoproject.org/meta-arm

ターミナル - 15

ファイル・ブラウザで「meta-arm」が生成されているのを確認しましょう。

ファイル・ブラウザ - 6


続いて「meta-arm」のリモートブランチ「origin/mickledore」をローカルブラン「pcduino3」としてチェックアウトします。

以下のコマンドで、生成されたばかりの「meta-arm」ディレクトリの中へ移動します。


$ cd meta-arm/

ターミナル - 16


以下のコマンドでチェックアウトです。


$ git checkout -t origin/mickledore -b pcduino3

ターミナル - 17


チェックアウトが終わったら、一個上の「/home/poky」に戻りましょう。


$ cd ..

ターミナル - 18

次は「meta-armレイヤーを「bitbake-layers」コマンドを使って「/home/yocto/poky/build/conf/bblayers.conf」ファイルに追加しましょう。

ここで、一つご注意を。

「OpenEmbedded Layer Index」の「meta-arm」のページを今一度御覧ください。

右側の「Dependencies」という欄によると「meta-arm」レイヤーは、以下の3つの別のレイヤーに依存しているとのことです。


●openembedded-core

●meta-python

●meta-arm-toolchain


このうち「openembedded-core」と「meta-python」に関しては、既に導入済みです。

問題は「meta-arm-toolchain」というレイヤーです。

これをどうやって入手するか?

meta-arm-toolchain」の表示をクリックしてください。

「OpenEmbedded Layer Index」 - 9


移動した「meta-arm-toolchain」のページでは、レポジトリのURLが「git://git.yoctoproject.org/meta-arm」となっています。

これは、先程「git clone」とチェックアウトを行った「meta-arm」レイヤーと同一です。

「OpenEmbedded Layer Index」 - 10


つまりこれは「meta-openembedded」の時と同じような、一つのレポジトリに複数のレイヤーが格納されているタイプなのではないだろうか?…と推測できます。

確認のために「/home/poky/meta-arm」ディレクトリをファイル・ブラウザで開いてみてください。

すると、案の定その中に「meta-armディレクトリと「meta-arm-toolchain」ディレクトリが配置されていることが分かります。

すなわち「meta-arm-toolchain」レイヤーは既に取得済みということが分かります。

ファイル・ブラウザ - 7


では「/home/yocto/poky/build/conf/bblayers.conf」ファイルに「bitbake-layers」コマンドを使って、これらのレイヤーを追加しましょう。

まずは「meta-arm-toolchain」からです。

「meta-arm」が「meta-arm-toolchain」に依存しているので「meta-arm-toolchain」の方が先です。


$ bitbake-layers add-layer ../poky/meta-arm/meta-arm-toolchain/

ターミナル - 19

次に「meta-arm」です。


$ bitbake-layers add-layer ../poky/meta-arm/meta-arm/

ターミナル - 20


これで「meta-sunxi」が依存するすべてのレイヤーの導入が完了したはずですね。


「meta-sunxi」レイヤーの導入

紆余曲折ありましたが、いよいよ当初の目的である「mets-sunxi」レイヤーを導入します。

ディレクトリは既に取得済みで、チェックアウトも終えています。

満を持して「/home/yocto/poky/build/conf/bblayers.conf」ファイルに「bitbake-layers」コマンドを使って「meta-sunxi」レイヤーを追加しましょう。

以下のコマンドを実行します。


$ bitbake-layers add-layer ../poky/meta-sunxi/

ターミナル - 21

ヨシっ!

今度はエラーが出力されることなく導入に成功したみたいですね。

それでは最終確認。

今まで散々「bitbake-layers」コマンドで「/home/yocto/poky/build/conf/bblayers.conf」ファイルにレイヤーを追加してきましたが、正しく出来ているでしょうか?

「/home/yocto/poky/build/conf/bblayers.conf」ファイルを開いて確認してみましょう。

以下のように今までの作業が反映されているでしょうか?

「/home/yocto/poky/build/conf/bblayers.conf」ファイル - 2


これで「BBLAYERS」という変数に必要なレイヤーのパスが代入されるようになりました。

いよいよ「pcDuino3」用のLinuxディストリビューションをビルドしましょう…と思いますが、まだまだ若干の作業が必要です。


さて、長くなってしまうので、一度区切りましょう。

遅ればせながら…

皆様、明けましておめでとうございます。

本年が皆様によって素晴らしい年になりますように。


<続く>

2023年12月26日火曜日

「MSX DEVCON」アムステルダム報告会

「MSX DEVCON」アムステルダム報告会 概要

12月26日、「MSX DEVCON」アムステルダム報告会に参加してきました。

今回のイベントは、西 和彦さんによりオランダ、アムステルダムで12月9日に開かれた「DEVCON」の報告会です。

会場は、東京国立博物館・平成館大講堂で13:00より行われました。

東京国立博物館・平成館大講堂


以下のように、事前にX(旧Twitter)で参加人数を調査され、300人ほどの会場を用意されたとのことですが…


実際に会場に集ったのは、多くて100人を少し超える程度。

しかしこれは、決して日本での「MSX3」への関心が低くなったわけではないでしょう。

まず、この年末の多忙な時期というタイミング、それに加え、ネット配信や録画で自宅で参加したいというニーズが高かったものと考えられます。

それでも、アムステルダムでのイベントの報告をいち早く日本のファンに届けたいという西さんの思いは伝わってきます。

「MSX3」は、あくまでも「Made in Japan」の精神にブレはありません。

おそらく、後日、会場の模様は録画でも配信されるでしょうから、あえてこのブログで報告会の内容を細々と記述する必要はないでしょう。

ここでは、個人的な感想を勝手に述べさせていただきたいと思います。

会場の様子


「MSX3」は高価なHDMIセレクタ?

すでに公開されている「MSX3」のプロトタイプの姿は以下の通りです。


今回の報告会において、初めて「MSX3」の具体的な姿、そして目指す方向性が見えてきました。

まず「MSX3」は、どのカテゴリーの製品なのかということです。

今、私たちが普段使用している情報機器は、パソコンとスマートフォンの二つです。

40年前に発売されたMSXは、一般的にはパソコンというカテゴリに属する製品でした。

したがって、その後継としての「MSX3」もまたパソコンであると考える方が自然ではあります。

では、現在広く使われているWindowsやMacOSと競合するものを目指すのか?

答えはノーです。

パソコンよりも遥かに気軽でウェアラブルなスマートフォンの立ち位置ではどうでしょう。

「MSX3」は、iOSやAndroidと競合するものを目指すのか?

こちらも、答えはノーです。

いずれの方向も、既に双璧がシェアを争う構図が確定しており、今後数年に渡って大きな変化はないでしょう。

MSXが、今からこれらの分野の3番手を狙うのは現実的ではありません。

では、どうするか?

そもそも、40年前に発売されたMSXが単なる「パソコン」であったのかどうかを疑う必要があります。

当時、人々が直に使い得る情報機器は、非常に高価なオフィスコンピュータくらいなものでした。

(PC88や、ましてやPC98は、非常に高価でした。)

それより規模は小さいものの、安価で、一般の人が購入できる価格でコンピュータを提供したことが、MSXの偉業と言えるでしょう。

それが、日本のその後のモノづくり、技術者の育成にどれだけの貢献をしたかを含めて。

このように、MSXとは「パソコン」とういう概念に囚われず「安価に入手できる、本来手にできなかったモノ」と定義すれば、「MSX3」は必ずしも第3のパソコンでなくても良いのです。

では現在、個人ではなかなか手にできない情報機器とは何でしょうか?

それは、富岳などに代表されるスーパーコンピュータです。

西さんの思い描く近未来とは、誰もがスーパーコンピュータ…つまり「MSX3」を使って、ユーザが個人でメタバースを運営したり、AIを育てたり、気象予報が可能となる世界でしょう。

更には、日本のモノづくりへの貢献です。

国立研究開発法人、産業技術総合研究所のスーパーコンピュータ、AI橋渡しクラウド(AI Bridging Cloud Infrastructure、ABCI) は、多くの企業によって、数カ月先まで予約が埋まっている状態だと聞きます。

スーパーコンピュータを使いたくても使えない状況。

「MSX3」には、このような状況を打開し、スピーディーに企業や個人が大規模なシステムの開発を推進できる起点になる可能性すら感じさせます。

重要なことは、MSXは、それらが可能な砂場(サンドボックス)を安く提供するまではやります、と。

しかし、その砂場でどういう遊びをするのかは、ユーザに委ねられている点です。

したがって「MSX3」は、ユーザが何も手を加えなければ、高価なHDMIセレクタに過ぎないと、西さんは仰られました。

用意されていないものは、自分で作る。

この精神性もまた、MSXの伝統と言えるでしょう。


「MSX3」を簡単にまとめると…


◯インターネット接続

◯HDMI接続の映像出力

◯32bitと64bitのCPU

◯メタバースに対応し得るビデオとオーディオ

◯すべての人にスーパーコンピュータを

◯IoTへの新たなるアプローチ


これらは、既にプロトタイプに実装されているといいます。

より具体的な中身については、今後発表されるSDK(Software Development Kit)を精査する必要があります。

待ち遠しいですね!


「MSX3」と「MSX turbo」の関係は?

「すべての人にスーパーコンピュータを」

このベクトルは、本来、3つある新しいMSXの内の一つ「MSX turbo」が担う分野だったはずです。

私も「MSX3」とは全く別のラインで、スーパーコンピュータ「MSX turbo」が登場するものと思っていましたが、どうやら違ったようです。

「MSX3」は、そのCPUボードを最大16枚スタックすることができるそうです。

すなわち、ユーザのニーズ、必要な処理速度に合わせてCPUボードを増設することによって、メニコアのシステムに育てて行くことが可能とのこと。

つまり「MSX turbo」とは「MSX3」の延長であると解釈するのが正解のようです。


「お前のMSX、何段?」

「今は8段だけど、次のボーナスで12段にするぜ!」


…なんて会話が、ヘビーユーザの間で交わされるのでしょうか?

「MSX3」のOSはLinuxベースであり、その上に「TAOX」というレイヤーを被せます。

「TAOX」自体は、OSというよりもPosixに依存するフレームワークのようで、ロボット・アプリケーションの分野で普及する「ROS」に近いイメージでしょうか。

おそらく、この「TAOX」が、CSP(Communicating sequential processes)すなわち、並行処理を担うレイヤーになるでしょう。

「TAOX」は、以前から開発されているものですが、一般的に情報は少なく、こちらについても詳細はSDK待ちということになるでしょう。

以前のDEVCONでは、プログラミング言語として「Occam」を使用すると説明がありましたが、今回は触れられていません。

流石に古すぎたか?

個人的には、CSPの思想を受け継ぐのであれば、今であれば「Go lang」が使えると面白いと思います。


ゲームは重要!

ゲームに関しては、西さん独特のシニカルな言い回しで仰いました。

「わたしゃゲームは嫌いだ。でも、MSXにとってゲームは非常に重要だ。

同時に、現在「kibidango」でのクラウドファンディングで募集中のMSX0各機種が、非常に苦戦しているとのことでした。

確かにキツそうです。

(購入予定はなかったけど、急遽応援します。)

クラウドファンディング苦戦中


この原因について、西さんは「ゲームを置き去りにしてしまった。ゲームは今までMSXが生き残ってきた重要な要素であり、今後はそれを無視できない。」と仰っています。

西さんのことですから、今後、この分野でも大きな動きを起こすでしょう。

また、この日も「株式会社D4エンタープライズ」の鈴木代表も登壇されましたが、ゲームの供給という点でプレッシャーは大きいでしょう。

そもそも「MSX3」は「メタバースに対応し得るビデオとオーディオ」を搭載できます。

8K対応の「ORIN GPU」で「Open GL」に対応するとのことで、旧作ばかりではなく、新しい、そして、かなり高度なゲームを開発できる土壌はあるはず。

有力なサードパーティの参入に期待したいところですが、それには何より、まずユーザサイドで盛り上がる必要がありますね。

メーカーに、活発な市場と思わせなければなりません。

配布資料の黄色リボン


西さん、ここまでのMSX3に開発経緯を記した「反省記2」の執筆も進めているそうです。

前作の「反省記」も、モノづくりに関わる人間の一人として、着眼点やその発想の方法に大きな感銘を受けた内容でした。

こちらも楽しみです。

さて、まだまだ目が離せないMSX界隈の状況。

今後も注目していきたいと思います。

皆様、良いお年を!

2023年12月22日金曜日

「pcDuino3」でYocto Project その5

前回からの続きです。

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


「Yocto Project」におけるレシピとは?

「Yocto Project」を使う上で、絶対に避けて通れないのが「レシピ」という概念です。

レシピって聞いて、皆さん何を思い浮かべるでしょうか?

そう、お料理のレシピですよね。


はい、これでもう「Yocto Project」のレシピは理解できたも同然です!


例えば、今晩の夕食はカレーライスにしようと思います。

カレーライス


まず「ご飯」のレシピを想像してみましょう。

「ご飯」を炊くためには、まず、お米が必要です。

お米は、何処で買いましょう?

どうやって、どのくらい研ぎましょうか?

炊飯器にどのくらいの水を入れましょうか?

どのくらいの時間蒸らしましょうか?

…などなど、細かく書くと意外と複雑ですよね。

次に「カレールー」のレシピです。

これは「ご飯」よりも、もっと複雑です。

何処産のターメリックをどれくらい使いましょうか?

何処産のカルダモンをどれくらい使いましょうか?

何処産のシナモンをどれくらい使いましょうか?

何処産のコリアンダーをどれくらい使いましょうか?

辛さは?

…こりゃキリがないですね。

他にも「野菜」や「お肉」の調理方法が書いてあるレシピが、カレーライスを作るためには必要です。


これを「Yocto Project」でLinuxディストリビューションを作る場合に置き換えてみます。

まず「Linuxカーネル」のレシピがあります。

「Linuxカーネル」をビルドするには、ソースコードが必要です。

ソースコードは、どこからダウンロードしましょう?

どのアーキテクチャでビルドしましょうか?

どういったオプションでビルドしましょうか?

どのようなモジュールを追加しましょうか?

…などなど「ご飯」の時と似てますよね。

他にも「ブートローダー」や「BusyBox」など、Linuxが動作するために必要な部材のレシピが存在します。

前回「git clone」して生成された「poky」というディレクトリの中には、これらのレシピがたくさん入っています。

料理のレシピは、紙のメモ等かもしれませんが、そこはLinuxなので「Yocto Project」のレシピはテキストファイル形式で存在しています。

拡張子は「.bb」です。

以下の通り「poky」ディレクトリの下層、たとえば「~/poky/meta/recipes-kernel/」ディレクトリの中には、たくさんのソフトウェアごとのディレクトリがあって…

「poky」ディレクトリの下層 - 1


その中に、それぞれの「.bb」ファイルが存在するのを確認できますね。

「poky」ディレクトリの下層 - 2


興味のある方は、レシピがどういう風に書かれているか、見てみるのも良いかもしれません。

(但し、訳が分かんなくてもヘコタレナイこと!)


「bitbake」コマンドとは?

さて、カレーライスの場合は、私たち自身がレシピを読みながら料理をしなければなりません。

では、Linuxディストリビューションの場合は?

それを行うのが、ビストロ「Yocto Project」の料理長「bitbake」コマンドさんだったのです。

前回、以下のようなコマンドを打ちましたよね?

終わるまでに5時間くらい掛かった例のヤツ。


$ bitbake core-image-minimal


これは、料理長「bitbake」さんに「core-image-minimal」というお料理を注文したことになります。

「bitbake」さん、料理長なのにお客さんの注文取ったり、色々大変なので「グズグズすんな」とか「トロトロしてんじゃねー」とか「ぁくしろよ!」とか言っちゃダメ。

でもって「core-image-minimal」の注文を受けた「bitbake」料理長、厨房に戻ると「core-image-minimal」に必要な食材を買い出しに行きます。

…え、今からかいっ!?

まあ、そういったツッコミは、例え話なんでご勘弁を。

たくさんのレシピに書かれている部材をすべて買い揃えた「bitbake」料理長、厨房に戻って、これまたレシピ通りに各食材を調理していきます。

こうして「bitbake」料理長の大車輪の活躍で出来上がったのが「core-image-minimal」というお料理、すなわち、Linuxディストリビューションとなります。


「Yocto Project」におけるレイヤーとは?

コスプレする人のことじゃないです。

「Yocto Project」には、レシピの他、もう一つ重要な概念「レイヤー」というものがあります。

前回ビルドした「core-image-minimal」は、いわばプレーンなカレーライス、学食の300円のカレーみたいなもんで、なんのヒネリもないシンプルなものです。

(今思うと、アレはアレで美味しかったなぁ。)

これをグレードアップして、カツカレーライスにしたいと思います。

しかし、カツカレーライスを作るためには、ベースのプレーンなカレーライスのレシピに加えて、上に乗せるカツのレシピも必要になります。

カツも一から作るとなれば、結構大変です。

お肉は何処で買えば良いのか?

油の量や温度はどうするのか?

...などなど。

カレーライスとは別の料理として、複数のレシピが必要になりそうです。

これを「Yocto Project」風に言えば、カレーライスの上に、カツのレシピが含まれた、カツの「レイヤーを加える」必要があるわけです。

おまけに、このカツカレーライスに福神漬をトッピングしちゃった日にゃ、ダイコンやらレンコンやら、それらの味付けやらで、複数のレシピが含まれた福神漬の「レイヤーを加える」ことになります。

すなわち、レイヤーとは、ある要素を一纏めにしたレシピの集合体と言えます。

前回作った「core-image-minimal」が、プレーンなカレーライス。

今後、この記事で作ろうとする「pcDuino3」向けの「core-image-minimal」が、カツカレーライス。

このように例えるなら「pcDuino3」向けのLinuxディストリビューションは、前回作った「core-image-minimal」に「レイヤーを加える」ことによって作成することになります。

レイヤーは原則として「meta-xxx」というディレクトリ名が付けられます。

このディレクトリの中に、関連するレシピ、すなわち「.bb」ファイルがたくさん配置されています。

(「.bb」ファイル以外のものもありますが、それは今は気にしないで。)

ディレクトリを配置しただけではダメです。

レイヤーの場所を教えてあげないと「bitbake」料理長、その中のレシピが見れなくて困っちゃう。

それをやっているのが以下のパスの「bblayers.conf」ファイルです。


/home/yocto/poky/build/conf/bblayers.conf

「bblayers.conf」のあるディレクトリ


この「bblayers.conf」ファイル、中身はこんな感じのテキストです。

「bblayers.conf」の内容

これを見ると、なにやら「BBLAYERS」という変数に、パスのリストを代入しているように見えます。

この代入により「meta」と「meta-poky」と「meta-yocto-bsp」の3つレイヤーが登録されていることになります。

わずか3つ!

すなわち、前回作った「core-image-minimal」は、非常に少ないレイヤーで構成されていたことが分かります。

そりゃ学食の300円カレーだもの…。


「meta-sunxi」レイヤー

さて「pcDuino3」用のLinuxディストリビューションを作るために必要なレイヤーを手に入れなければなりません。

ところで「pcDuino3」のような名の通ったボードでLinuxを動かすために、白紙の状態から独自のレシピを書いてレイヤーを作ることは、まず無いと思います。

そういったものは、大概はコミュニティの方々が既に開発して、公開している上にメンテナンスまでやってくれています。

本当にありがたいですよね。

お仕事で独自のLinuxボードを作って、それにLinuxを動かす場合でも、使用したCPUのベンダーが必要なレシピやレイヤーを提供していることがほとんどで、最小限のカスタマイズで移植可能です。

では「pcDuino3」に必要なレイヤーがどこにあるか?

結論から言うと、まず以下の「meta-sunxi」レイヤーのページを御覧ください。

このページは「Yocto Project」の元となった、組み込み機器用のLinuxディストリビューションを作るためのソフトウェアフレームワーク「OpenEmbedded」がサポートする、公式の各種レイヤー情報ページです。

そして、このページの「Machines」タブをクリックしてください。


https://layers.openembedded.org/layerindex/branch/master/layer/meta-sunxi/

「OpenEmbedded Layer Index」 - 1


このページを下の方へスクロールしますと…。

「OpenEmbedded Layer Index」 - 2


pcduino3」という表記がありますね。

どうやら、このレイヤーを使えば良いらしいことが分かります。

「OpenEmbedded Layer Index」 - 3


因みに「sunxi」って何?って思いますよね。

これは「pcDuino3」に搭載されている、中国Allwinner Technology社のCPUシリーズの型番に由来します。

「pcDuino3」に搭載されているものは「A20(sun7i)」です。

他にも、このシリーズには「A10 (sun4i)」や「A13 (sun5i)」などが存在します。

つまり「sunxi」の「x」は、型番の番号のアスタリスクになっているわけです。

スンシィー、寸志!?…なんか中国語っぽい意味かと思ったけど違ったみたい。


さて、今回は作業無くウンチクだけで終了。

次回から、実際にこのレイヤーをどのように「Yocto Project」に組み込むか?をやっていきたいと思います。


<続く>

2023年12月15日金曜日

TOPPERS/ASP - Arduino UNO R4版 その4

前回からの続きです。

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


Cygwinターミナルでのビルド

雛形プロジェクトができましたので、ここで生成されたソースコードの一部を「TOPPERS/ASP Arduino UNO R4版」のソースコードを補完しましょう。

その前に「Cygwin」のインストールをお願いします。

このページ(TOPPERS/ASPのビルドからデバッグまで~Cygwinの導入)を参考にしてください。


次に「TOPPERS/ASP Arduino UNO R4版」のソースコードをゲットしちゃいましょう。

今、インストールしたばかりの「Cygwin」を起動させてください。

起動したターミナルで、以下のコマンドを使ってソースコードのクローンを行います。


$ git clone https://github.com/RyutaroMorita/asp_arduino_uno_r4_gcc.git

Cygwinターミナル - 1


上記のコマンドの結果、以下のパスにasp_arduino_uno_r4_gcc」というディレクトリが生成されたはずです。

エクスプローラを開いて、確認してみてください。


C:\cygwin64\home\<ユーザ名>

エクスプローラ - 1


この「asp_arduino_uno_r4_gcc」というディレクトリの名前を「asp_1.9.2」と改名してください。

(深い意味はないです…説明がしやすいだけ。)

エクスプローラ - 2


改名した「asp_1.9.2」ディレクトリの中身は、こんな風になっていると思います。

エクスプローラ - 3


この「asp_1.9.2」ディレクトリの下層、以下のパスを表示してみてください。


C:\cygwin64\home\<ユーザ名>\asp_1.9.2\target\arduino_uno_r4_gcc

ターゲットディレクトリのエクスプローラ - 1


ここには、TOPPERS/ASPカーネルのターゲットボード、すなわち、今回の場合は「Arduino UNO R4」依存のソースコードが格納されています。

このターゲットディレクトリのエクスプローラ、開いておいてくださいね。


さて、前回作成した雛形プロジェクトのディレクトリを別のエクスプローラで開きます。

記事のとおりに作業していただいた場合は、以下のパスに生成されています。


C:\Users\<ユーザ名>\e2_studio\workspace\Hinagata

エクスプローラ - 4


この中の以下の4つのディレクトリを予め開いておいたターゲットディレクトリのエクスプローラにコピーしてください。


●ra

●ra_cfg

●ra_gen

●src

エクスプローラ - 5


コピーが終わった時点で、ターゲットディレクトリのエクスプローラは、こんな感じの表示になりましたか?

ターゲットディレクトリのエクスプローラ - 2


この作業でコピーした雛形プロジェクトのディレクトリの中に入っているソースコードを補完することによって、不完全だった「TOPPERS/ASP Arduino UNO R4版」のソースコードは、完璧なものになりました。


試しに「Cygwin」ターミナルを使ってTOPPERS/ASPのビルドを通してみましょう。

「Cygwin」ターミナルを開いて、以下のコマンドでTOPPERS/ASPソースツリーの場所まで移動しましょう。


$ cd asp_1.9.2/


次にその直下の「OBJ」ディレクトリに移動します。


$ cd OBJ/


コンフィギュレーターのパーミッションを実行可能に設定します。


$ chmod 755 ../cfg/cfg/cfg.exe


ここまで、大丈夫ですか?

Cygwinターミナル - 2


そうしたら「OBJ」ディレクトリの中にあるコンフィグファイル(sample1.cfg)の情報を元に、OSに必要な定義を記したソースコード(「kernel_cfg.c」と「kernel_cfg.h」)を生成します。

これは、以下のコマンドで実行します。


$ make depend


以下のような表示にならずエラーが出力される場合は、残念ながらこれまでの作業に誤りがあります。

お手数ですが、最初からご確認を!

Cygwinターミナル - 3


ここまで上手くいったら、ホンチャンのビルド。

以下のコマンドを実行します。


$ make all


以下のように無事にビルドが通ったでしょうか?

Cygwinターミナル - 4


さて、ターミナルでのビルドが通ったら、次はIDE(統合開発環境)の「e2studio」を使ってデバッグできるようにしたいと思います…が。

その前に、デバッガの「E2 emulator Lite」とターゲットの「Arduino UNO R4」とを接続するためのケーブルを作らなければなりません。

というわけで、次回は半田付け作業です。


<続く>

2023年12月13日水曜日

TOPPERS/ASP - PIC32MX版 目次

絶滅危惧の「MIPS」アーキテクチャのマイコン「PIC32MX」。

今後、たとえ「ARM」アーキテクチャに移行してしまっても、PICはPICらしく。

DIPパッケージをラインナップするなど、あくまでもホビーユーザーに寄り添ったマイコンであり続けて欲しいでものですね。

以下、TOPPERS/ASP PIC32MX版に関する記事の目次です。


■TOPPERS/ASP - PIC32MX版 その1

TOPPERS/ASP - PIC32MX版 概要

必要なもの

ダウンロード/GitHub


■TOPPERS/ASP - PIC32MX版 その2

開発環境の構築(MPLAB X IDE編)


■TOPPERS/ASP - PIC32MX版 その3

開発環境の構築(XC32コンパイラ編)


■TOPPERS/ASP - PIC32MX版 その4

開発環境の構築(Eclipse編)


■TOPPERS/ASP - PIC32MX版 その5

MPLAB Harmonyとは?

MPLAB Harmonyのインストール

MPLAB HarmonyのIDEへの登録


■TOPPERS/ASP - PIC32MX版 その6

雛形プロジェクトの作成


■TOPPERS/ASP - PIC32MX版 その7

Harmony Frameworkのコピー

雛形プロジェクトで生成したソースコードのコピー

コマンドラインでのビルド


■TOPPERS/ASP - PIC32MX版 その8

プロジェクトの作成(Eclipse編)

プロジェクトの作成(MPLAB X IDE編)


■TOPPERS/ASP - PIC32MX版 その9

シリアル通信用の配線の引き出し

プログラムの転送とデバッグ


■TOPPERS/ASP - PIC32MX版 その10

サンプルプロジェクトの説明

PIC32MX版カーネルについて

ライセンスについて


なお、Qiitaにも上記の記事を1ページにまとめたダイジェスト版を投稿しました。

こっちの方が読み易いです。

よろしければ参考にしてください。

Qiita

TOPPERS/ASP - PIC32MX版 - Qiita

MLAA License

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