2020/8/31
RaspbianにOP-TEEをビルドする
公式で提供されているOP-TEEのファイルシステム(buildroot)では、apt-get機能が搭載されておらず、開発環境として非常にやりづらい。
そのため、ファイルシステムをRaspbianに変更する。
環境
- ホストOS:windows10 + VMware
- ゲストOS:Ubuntu20.04.1
- 動作確認用機器:Raspberry Pi 3B
- その他:USB-UARTケーブル(あると便利)
RaspbianをmicroSDカードへ書込む
Raspbianのダウンロード、microSDカードヘの書き込みはこのサイトを参考にした。
具体的な手順としては以下の通り。
-
こちらのサイトからRaspbianのイメージファイル(Raspberry Pi OS (32-bit) with desktop)をダウンロード。
-
SD Formatter
でmicroSDを綺麗な状態にする。 -
balenaEtcher
でRaspbianをmicroSDカードに書込む -
この状態でopteeを組込むと
sudo
やroot
が使えなくなる不具合が発生したので、念のため以下の作業を推奨する。- Raspbianでラズパイを立ち上げてrootのパスワードを設定
$ sudo passwd root
-
/etc/sudoers
に追記
# User Privilege specification root ALL=(ALL:ALL) ALL + pi ALL=(ALL:ALL) ALL
USB-UARTケーブルでPCとラズパイを接続する場合
-
/boot/cmdline.txt
でconsole=serial0,115200
の部分を削除 -
/boot/config.txt
で以下を追記
$ vim /boot/config.txt
+ dtoverlay=pi3-miniuart-bt
+ core_freq=250
PCでRaspbain-OPTEEをビルド
-
OPTEEのビルドはこの公式ドキュメントに従い、ビルドをした。
-
RaspbianOS向けのOPTEEを提供しているgithubがあり、サイトの方法に従いビルドしたがそのままでは動かなかった。
-
動作が確認できた構成
-
boot
:公式opteeのboot(version 3.6.0) -
rootfs
:Raspbian + Raspbian向けopteeのrootfs
Raspbian向けopteeのrootfsは公式opteeのrootfsで代替え可能だと思われるが、その場合はbuildrootを混在しないように注意した方が良いかもしれない
-
公式opteeはドキュメント通りでビルドする。特にエラーは出なかったのでここでは割愛。
microSDカードに書き込まれているRaspbianのbootを削除し、opteeのbootに書き換える。
以降はRaspbian向けopteeのビルド方法を説明する。
クロスコンパイルツールのダウンロード
linaroでクロスコンパイルツールAARCH64
と AARCH32
をインストール。具体的にはこのサイトから以下のものを入手する。
- gcc-linaro-aarch64-linux-gnu.tar.xz(version:6.5.0)
- gcc-linaro-x86_64_arm-linux-gnueabihf.tar.xz(version:6.5.0)
Raspbian向けopteeのリポジトリをダウンロード
$ git clone https://github.com/benhaz1024/raspbian-tee
$ cd raspbian-tee
$ mkdir -p toolchain/aarch32/bin ← AARCH64を入れる
$ mkdir -p toolchain/aarch64/bin ← AARCH32を入れる
config.mkのpathを変更
パスを確認。ダウンロードしてきたディレクトリ名を合わせるか、パスを変更する。
$ vim config.mk
必要に応じてパズを変更
依存関係のモジュールをインストール
$ sudo apt install libssl-dev bison flex make u-boot-tools python-dev
$ pip install crypto
ビルドの実行
$ ./prepare-env.sh
$ make patch
$ make
microSDへのコピー
$ blkid ← microSDの割り振りを確認
$ mount /dev/sdx /media/rootfs
$ sudo cp -r ./out/rootfs/* /media/rootfs
PCとRaspberry Piへの接続(シリアル通信)
VMware上のUbuntuとラズパイでシリアル接続
$ sudo picocom -b 115200 /dev/ttyUSB0
その後、ラズパイの電源を入れるとカーネルのログが流れて、ターミナルが立ち上がる。