34
38

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Raspberry Pi 64bitモードでリアルタイムOS(TOPPERS/FMP)を動かす

Last updated at Posted at 2017-07-07

リアルタイムOSをRaspberry Pi 3の64bitモード向けに移植した

リアルタイムOSは,TOPPERS/FMPカーネル (https://www.toppers.jp) を使用した.
Zynq Cortex-A53 AArch64向けパッケージをベースに,Raspberry Pi 3 Cortex-A53 AArch64向けに移植した.

ソースコードは以下に置いてある.
https://github.com/YujiToshinaga/RPi64Toppers

概要

  • TOPPERS/FMPカーネルを移植 (https://www.toppers.jp)
  • Raspberry Pi 3のARMv8 AArch64モードで動作
  • 4コアでマルチコア動作
  • キャッシュ,MMUはON
  • 各コアのARM Generic Timerを使用
  • Raspberry PiのMini UARTを使用
  • 例外レベル3(EL3)でブートし,例外レベル1ノンセキュア(EL1NS)でカーネル動作
  • 割込み優先度のハードウェア機能が無いためソフトウェアで疑似的に再現

QEMU(エミュレータ)を用いた実機レスの動作も可能である.
https://qiita.com/toshinaga/items/1af5948b45d62cc20509

デバッグ用途向けに実行ファイルをローダするツールも提供している.
https://qiita.com/toshinaga/items/4b38a2e21f559d273f09

制限事項

  • プロセッサ間割込み,タスクマイグレーション等のコア間処理が動作せず
    なぜかAArch64モードでコア間割込みを起こせない・・・ (2017/09/11解決済み)
  • 割込み優先度の概念は未実装 (2017/09/11実装済み)

必要な機材

  • Raspberry Pi 3 + 電源

  • microSDカード + カードリーダー
    FAT32フォーマットされたmicroSDカードを用意する.
    数十MB程度の空きがあれば十分である.

  • USBシリアル変換ケーブル
    シリアルコンソールで通信するために使用する.
    TTL-232R-3V3を使用した.

  • PC(Windows/Linuxどちらでも可)
    ビルド,および動作に使用する.

開発環境の構築

  • コンパイラ
    以下からフリーのARMv8 AArch64用コンパイラを入手する.
    https://www.linaro.org/downloads/
    Versionはgcc-linaro-6.3.1-2017.02-xxx_aarch64-elfを使用した.
    xxxはPC環境によって適切なものを選択する.
    ダウンロードして適当な場所に展開したら以下にpathに通す.
    <解凍したディレクトリ>/gcc-linaro-6.3.1-2017.02-xxx_aarch64-elf/bin

  • コンフィギュレータ
    以下からコンフィギュレータを入手する.
    https://www.toppers.jp/cfg-download.html

  • ターミナルアプリ
    シリアルコンソールで通信するためにTera Term,GTKTermなどをインストールしておく.

  • その他ツール
    おそらく以下パッケージが必要となる.
    make, perl, git, gcc-core, gcc-g++

ビルド

リポジトリを取得してfmp.binをビルドする.

git clone https://github.com/YujiToshinaga/RPi64Toppers.git
cd RPi64Toppers/fmp
mkdir -p cfg/cfg
mv <コンフィギュレータを解凍したディレクトリ>/cfg cfg/cfg
chmod 755 cfg/cfg/cfg
mkdir build
cd build
perl ../configure -T rpi_arm64_gcc
make fmp.bin

動作準備

SDカードの準備

FAT32フォーマットされたSDカード直下に以下の4ファイルを置いてRaspberry Piに挿す.

  • bootcode.bin, start.elf
    以下からbootcode.binとstart.elfをダウンロードする.
    https://github.com/raspberrypi/firmware/tree/master/boot

  • config.txt
    リポジトリのRPi64Toppers/fmp/targets/rpi_arm64_gcc/config.txtを使用する.

  • fmp.bin
    ビルドしたfmp.binを使用する.

シリアルコンソールの接続

Raspberry PiのGPIO14(TXD1), GPIO15(RXD1), GroundをそれぞれUSB-シリアル変換ケーブルのRXD,TXD,Groundと接続する.

Raspberry Piのピン配置
https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/README.md

TTL-232R-3V3を使用する場合

RPiのピン 結線 TTL-232R-3V3のピン
GPIO14(TXD1) - Yellow(RXD)
GPIO15(RXD1) - Orange(TXD)
Ground - Ground

PCとUSB-シリアル変換ケーブルを接続し,ターミナルアプリからシリアルコンソールを開く.
ボーレートは115200bpsを設定する.

起動

Raspberry Piの電源を入れる.

34
38
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
38

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?