Raspberry Piのクロスコンパイル環境構築(その1)
クロスコンパイルって何?
これからRaspberry Pi用のいろいろなファームウェア(組み込み系のソフトウェアのこと)を作って動作させながら、組み込み開発のスキルアップを行っていこうと思います。その為にファームウェアのコンパイルを行う環境を準備していこうと思います。今回使用するプログラミング言語はC言語です。組み込み系においてまだまだ主力だと思っています。
そもそも第4話でRaspberry PiにUbuntuというLinux系OSをインストールしたので、当然この環境でもファームウェアのコンパイルを行うことができます。このようにファームウェアを動作させるハードウェア(CPU)上でファーウェアをコンパイルすることを「セルフ コンパイル」といいます。例えば、Windows PC上で動作するソフトウェアをそのWindows PC上でコンパイルするのもこれに当たります。
これに対して、ファームウェアを動作させるハードウェア(CPU)とは別の環境、例えばPC上でコンパイルすることを「クロス コンパイル」といいます。なぜこのようなことを行う必要があるかというと、組み込み開発というのは一般的に複数のメンバーで開発を行いますが
- 開発メンバー全員分の組み込み機器を用意できない(費用の問題など理由は様々)
- そもそも開発時点で組み込み機器が存在していない(組み込み機器自体も開発中)
- 一般的に組み込み機器のCPUよりPCやサーバーのほうか性能が良いのでコンパイル時間が短い
などの理由があります。今回ターゲットにしている組み込み機器のRaspberry Pi 3 model Bは1.2GHzで動作し、CPUコアを4つ持つARMv8 Cortex-A53というCPUでそれなりの性能があるので、セルフコンパイルでも十分ですが、スキルアップの為と、今後、別の組み込み機器用のファーウェア開発等も行っていきた思っているのでクロスコンパイル環境を構築したいと思います。
Windows PC上に仮想環境を準備 (Virtual Box)
Linux PCを使用している人は不要ですが、私はWindows PC(未だにwindows 8ですが)しかないのでWindows上で仮想的に動作するLinuxの環境を準備します。Linux環境を準備せずWindowsで動作するクロスコンパイルの環境も構築できるようですが、Linux環境のほうが情報やツールが圧倒的に豊富なようですので準備したいと思います。ここでは、その為に私の会社のファームウェア開発部隊の多くも使用している「Virtual Box」という仮想環境を構築するソフトをインストールします。
さっそく以下からダウンロード
https://www.virtualbox.org/wiki/Downloads
2022/4/16時点では上記が表示されるようです。2つのオレンジ色の楕円は私が加工してつけたもので上がWindows用の「Virtual Box本体」で下が「拡張パック」になります。今時点ではversion 6.1.32が最新のようです。まずは本体である上の楕円箇所をクリックするとダウンロードが始まります。続けて、拡張パッケージである下の楕円箇所もクリック。
次にダウンロードした本体のほうのVirtualBox-6.1.32-149290-Win.exeを実行
基本的に「Next」クリックのみで進みます。
こちらも「Next」クリック。
こちらも「Next」クリック。
「Yes」をクリック。
「Install」をクリック。
しばらく待ちます。
Virtual Box本体のインストールは完了です。「Finish」をクリックしてウィンドウを閉じます。次に拡張パックOracle_VM_VirtualBox_Extension_Pack-6.1.32.vbox-extpackを実行します。
右のスクロールバーを下までスクロールさせると「同意します」がクリックできるようになります。「同意します」をクリックしてしばらくすると
拡張パックのインストールも完了。「OK」をクリックしてメッセージウィンドウを閉じます。これらがインストール完了した時点で以下のように「Virtual Box」が起動しています。
仮想環境(Virtual Box)にインストールするOSのダウンロード
次に仮想環境(Virtual Box)上にインストールするOSをダウンロードします。Linux系なら何でも良いのですが、第4話でターゲットのRaspberry PiにUbuntu Serverをインストールしたので、これに合わせて仮想環境にも同じ物をインストールしてみたいと思います。
PC上に以下のサイトからUbuntu Serverをダウンロードしてきます。
https://jp.ubuntu.com/download
上記のページを少し下にスクロールすると「Ubuntu Sever」の項目があります。いくつかのバージョンがありますが、2022/4/16時点では安定版の「Ubuntu Server 20.04.4 LTS」をダウンロードします。第4話でRaspberry Pi ImagerでRaspberry Pi用にダウンロードしたのもこのバーションでした。「ダウンロード」をクリックすると、下の画面に変わりダウンロードが開始します。
仮想環境(Virtual Box)にインストールするOSの為の仮想ハードウェアの準備
そして、Virtual Boxのウィンドウに戻ります。ここからは、仮想環境上のOSが使用するメモリやハードディスクなど仮想ハードウェアの設定を行っていきます。
上の「新規」ボタンをクリックします。
上記のウィンドウが現れるので「名前」の箇所に任意の文字を入れます。私は「Ubuntu」と入れてみました。「Ubu」と入れた時点で「タイプ」と「バージョン」が自動的に「Linux」と「Ubuntu(64bit)」に変わりました。
「次へ」をクリックします。
仮想環境上のOS用のメモリーサイズを指定します。私のPCのメモリーサイズは4GBしかないので、最大は4GBになります。ここではあらかじめ入力されている必要最低限の1GB(1024MB)のまま「次へ」をクリックしました。
仮想環境上のOS用のハードディスクを作成するかどうかのウィンドウです。今回インストールするOS用にハードディスクを作成したいので、あらかじめ選択されている「仮想ハードディスクを作成する」のまま「作成」をクリックします。ちなみに、Virtual Box上には複数のOSをインストールできるので、既に他のOSをインストール済みで、その時に作成したハードディスクも使用する際は「すでにある仮想ハードデイスクを使用する」を選択します。
ハードディスクのタイプを選ぶウィンドウです。書かれているメッセージの通り「ほかの仮想ソフトウェアを使用する必要」がないので、そのままで「次へ」をクリック。
書かれているメッセージの通り「使用した分だけ物理ハードディスクの領域を消費」としたいので、「可変サイズ」のまま「次へ」をクリック。
仮想ハードディスクのサイズを指定するウィンドウです。私は必要最低限とされているサイズの10GBのまま「作成」をクリックしました。
上記のウィンドウの左側に「Ubuntu」と名前をつけた仮想ハードウェア用のメニューが追加されました。このメニューが選択されている状態で「設定(S)」と書かれたオレンジ色の歯車のアイコンをクリックします。
作成した仮想ハードウェア(ここでは「Ubuntu」と名付けた)の設定ウィンドウが開きます。ここでは1つだけ設定を行います。後ほど詳しく説明しますが、PCから仮想環境上のOSへアクセスする為の設定になります。
左側のメニューから「ネットワーク」を選択し、その後、右側の「アダプター2」タブをクリックします。
「ネットワークアダプタを有効(E)」にチェックを入れ、「割り当て(A)」のプルダウンメニューから「ホストオンリーアダプター」を選択し「OK]をクリック。これでOSインストールの準備は完了です。
仮想環境(Virtual Box)にインストールするOSのファイルを指定
いよいよ上記で用意した仮想ハードウェアにダウンロードしておいたUbuntu Serverをインストールしていきます。ここではダウンロードしたUbuntu Serverのファイルを仮想環境上のインストールメディア(CDやDVD)として扱う設定を行います。現実のPCにLinuxをインストールする場合はCDやDVD等をドライブに入れてインストールしますが、それを仮想環境上で行うイメージです。
以下のウィンドウの左側の「Ubuntu」を選択した状態で、右上の「起動(T)」と書かれた緑色の右矢印ボタンをクリックします。
右側のフォルダのアイコンをクリックします。
左上の「追加(A)」アイコンをクリックします。
ファイル選択用のウィンドウが現れるので、ダウンロードしておいたUbuntu Serverのファイルを選択して「開く」をクリックします。通常はダウンロードフォルダにダウンロードされるますが、私は予め別のフォルダに移動しておいたので、そのフォルダをたどってファイルを選択しています。
先ほど空だった箇所に「ubuntu-20.04.4…」と表示されています。こせを選択して「選択」をクリック。
ここで「起動」をクリックしてインストール開始。
仮想環境(Virtual Box)にLinux(Ubuntu Server)をインストール
しばらくすると以下のウィンドウが表示されます。
「Japan」は無いので、あらかじめ選択されている「English」のままEnterキーを押します。因みに、ここからはマウスは効かないのでキーボードのみを使用します。基本的にはEnter、スペース、タブと上下キーくらいしか使用しませんが、キーボード種別を選択する次のメニューではキーボード種別が不明な場合にその他キーを使用します。
また、よくあるのがインストール作業中にマウスで他のウィンドウを操作することでフォーカスをインストールメニューのウィンドウから外してしまい、キーボードを押しても反応しないといものです。その時はマウスをインストールメニューのウィンドウにもってきてクリックしフォーカスあてるようにします。
ここではキーボードの種別を設定します。不明な場合はキーボードの上キーを押して「Indentify keyboard」を選択しEnterを押します。キーボード種別が分かっている場合は上の「Layout」メニューまで上キーでカーソルを持っていき、スペースキーを押すことで候補が表示されるのでそこから選択します。私は「Indentify keyboard」を試してみましたがうまく検出できなかった(明らかに実際のキーボードと異なる)ので「Layout」でJapaneseを選択してEnterしました。
因みに、このキーボード検出機能を途中でやめる場合は「Esc」キーを押します。
キーボード検出メニューを最後まで実施すると、検出されたキーボードが選択された状態になるので「Done」にカーソルを当てEnterで次に進みます。
ネットワークの設定メニューです。特に何もせず、そのままEnterで次に進みます。
ネットワークといっても仮想環境上の仮想的なネットワークになります。詳細は後ほど記載予定ですが、PCから仮想環境にアクセスする為に、仮想ハードウェアの設定で追加した「アダプター2」が、ここで表示されている「enp0s8」になります。
プロキシの設定メニューです。空白のままEnterで次に進みます。
Ubuntuのいろんなファイル等の資産をダウンロードする為のサイトを指定します。あらかじめ入力されているものか特に変更することなく、そのままEnterで次に進みました。
仮想ハードディスクの構成を選択するメニューです。シンプルに1つのハードディスクだけを使用しようと思うので、一番上の「Use an entire disk」の左側の()のところでスペースを押すことで「X」マークがつくようにします。それ以外はそのまま、下キーまたはタブキーで「Done」までカーソルを持っていきEnterで次に進みます。
仮想ハードディスク内の区切り(パーティション)の設定です。特に分割するつもりはないので、そのままEnterで次にすすみます。
「インストール先の仮想ハードディスク内のデータはフォーマットされるので消えてしまうのと、ここから先は前のメニュー画面に戻れないが続けるか?」を問われます。下キーを押して「Continue」を選択してEnterで次に進みます。(今回初のインストールなので、そもそも仮想ハードディスクにデータが存在していないこともあり)
ユーザ名やパスワード等を入力するメニューです。ここは最初は全て空白なので、全て任意で入力します。ここで入力される「Your server’s name」と「Pick a username」で入力したものが、仮想OSのターミナルウィンドウのプロンプトに表示されます。例えば上記の入力だと「ta@tpc:~$」のような表示になります。
Ubuntuの商用サポートの契約や購入をしている人はここにそのキーを入れることでサポート適用となるようでが、そのようなものは私はないので空白のままEnterで次に進みます。
SSHの設定です。仮想環境により安全にリモートアクセスする為の設定をする為、一番上の「Install OpenSSH sever」の左の[ ]に「X」が表示されるようにスペースキーを押します。それ以外はそのままで「Done」を選択しEnterで次に進みます。
いろいろなUbuntu用のパッケージをインストールする為の選択メニューですが、ここでは何も追加せず「Done」を選択しEnterで次へ進みます。今後必要に応じてインストールしていきます。
やっとインストールが開始です。しばらく待ちます(数分)
上記のように一番下に「Reboot Now」というメニューが表示されたら、これを選択してEnter
上記のような画面になります。FAILEDの表示がありますが、気にせずEnterを押します。これは実際のPCにLinux等のOSをインストールする際にCD/DVDドライブにインストールCD/DVDを挿入しますが、それが残ったままになっているので取り出してくださいということです。仮想環境の場合はこのままEnterを押すことで次に進めます。
順調に起動処理を行っているようです。数分待ちます。
「login:」のメッセージが現れました。この後も起動処理のメッセージが表示されて邪魔されたりしますが、とりあえず設定したユーザー名とパスワードを入力してログインしてみます。
無事ログインできました。画面上部にUbuntu 20.04.4 TLSの文字が見えます。
長かったですが、ここまではWindows PCに仮想環境を構築して、そこにLinux(Ubuntu Server)をインストールするということまでを実施しました。今回はここまで。次回(第6話)はこの環境にRaspberry Pi用のクロスコンパイル環境を入れていきたいと思います。
コメント