Ubuntu で Raspbian システムを起動(QEMU、qemu-rpi-kernel を使用)
【概要】Ubuntu 環境で QEMU エミュレータを使用し、ARM プロセッサ向けの Raspbian システムを起動する手順を解説する。QEMU のインストール、カーネルイメージのダウンロード、Raspbian イメージの準備、システム起動、SSH によるリモート接続までの一連の作業を説明する。
【目次】
この手順を行う目的
Raspberry Pi の実機を用意せずに、Ubuntu マシン上で Raspbian 環境を構築できる。これにより、Raspbian 向けアプリケーションの開発やテスト、ARM 環境での動作確認が可能となる。
Raspbian は、Debian をベースとした Linux ディストリビューションであり、ARM プロセッサ上で動作する(2020 年以降、公式の後継 OS は Raspberry Pi OS と呼ばれるが、本手順で使う buster 系列のイメージは引き続き Raspbian の名称で配布されている)。
一般的な Ubuntu マシンには x86_64 アーキテクチャのプロセッサが搭載されているため、ARM 向けの Raspbian を動作させるには QEMU によるプロセッサのエミュレーション(ある CPU 上で別の種類の CPU の命令を模擬実行すること)が必要となる。
注意事項
- エミュレーションによる実行のため、実機と比較して動作速度が低下する。
- メモリは 256MB に制限される。これは QEMU の versatilepb ボードのエミュレーションが 256MB を上限としているためで、これを超える値を指定すると起動できない。
- カーネルと Raspbian イメージのバージョンには対応関係がある。後述のとおり、buster 系列のイメージには buster 用のカーネルとデバイスツリーを組み合わせる。
謝辞:本手順は以下のプロジェクトを利用している。
- qemu-rpi-kernel: https://github.com/dhruvvyas90/qemu-rpi-kernel
Ubuntu で QEMU のインストール
- パッケージの一覧を更新し、インストール済みパッケージを更新する。
sudo apt update sudo apt -yV upgrade - ARM システムのエミュレーションに必要な QEMU をインストールする。
sudo apt update sudo apt -y install qemu-system-arm
「続行しますか? [Y/n]」と表示された場合は、y キーを押してから Enter キーを押す。
qemu-rpi-kernel(カーネルとデバイスツリー)のダウンロード
QEMU で Raspbian を起動するには、QEMU 用にビルドされたカーネルイメージと、ハードウェア構成を記述したデバイスツリーファイル(.dtb。エミュレートするボードの構成を OS に伝えるためのファイル)が必要である。これらを GitHub からダウンロードする。
- GitHub の qemu-rpi-kernel リポジトリを開く。
- buster 系列のカーネルファイル(kernel-qemu-x.x.xx-buster)を選択する。
- ページが変わったら、Download をクリックする。
- ダウンロードしたファイルは、作業用ディレクトリに保存する。
- 続いて、buster 用のデバイスツリーファイル versatile-pb-buster.dtb をダウンロードする。リポジトリのトップページに戻り、versatile-pb-buster.dtb を選択する(buster のイメージには buster 用の .dtb を使う。versatile-pb.dtb は stretch 用なので使わない)。
- ページが変わったら、Download をクリックする。
- ダウンロードしたファイルは、カーネルファイルと同じディレクトリに保存する。
Raspbian イメージのダウンロード
本手順では buster 用のカーネルとデバイスツリーを使うため、buster の Raspbian イメージをダウンロードする。
- Raspbian イメージの配布サイトを開く。ここでは国内ミラーサイトを使用する。
- buster のディレクトリを開き、.zip ファイルをダウンロードする。
- ダウンロードが完了するまで待機する。
- ダウンロードした .zip ファイルを展開する。展開すると .img ファイルが生成される。
unzip 2019-09-26-raspbian-buster.zip
- .img ファイルを、カーネルファイルおよび versatile-pb-buster.dtb と同じディレクトリに配置する。
Raspbian システムの起動
- 端末を開き、ファイルを配置したディレクトリに移動する。
- ls コマンドで、必要なファイル(カーネル、versatile-pb-buster.dtb、.img)が存在することを確認する。
- 端末で以下のコマンドを実行し、QEMU を起動する。
qemu-system-arm -M versatilepb \ -cpu arm1176 \ -m 256 \ -hda 2019-09-26-raspbian-buster.img \ -net user,hostfwd=tcp::5022-:22 \ -dtb versatile-pb-buster.dtb \ -kernel kernel-qemu-4.19.50-buster \ -append "root=/dev/sda2 panic=1" \ -no-reboot
コマンドオプションの説明
-M versatilepb エミュレートするマシンタイプ(ARM Versatile/PB ボード) -cpu arm1176 エミュレートする CPU(Raspberry Pi 1 と同等) -m 256 メモリサイズ(MB)。versatilepb ボードの上限は 256MB -hda ディスクイメージファイル(.img)の指定 -net user,hostfwd=... ネットワーク設定。ホストのポート 5022 をゲストのポート 22 に転送 -dtb デバイスツリーファイルの指定 -kernel カーネルイメージの指定 -append カーネル起動パラメータ。root=/dev/sda2 はルートファイルシステムの位置を示す -no-reboot ゲストが再起動を要求した場合に QEMU を終了 - Raspbian システムの終了は、画面左上のメニューから shutdown を選択する。
参考:Raspbian で利用可能な開発環境
- BlueJ: Java 開発環境
- Geany: 軽量な統合開発環境
- Greenfoot: Java 学習用開発環境
- Scratch 2: ビジュアルプログラミング環境
Ubuntu から Raspbian システムへの SSH 接続
本セクションでは、Raspbian システム上で SSH サーバを起動し、Ubuntu から SSH 接続を行う手順を説明する。SSH 接続により、Ubuntu の端末から Raspbian をコマンドラインで操作できる。
- Raspbian システムのメニューで Terminal を選択し、端末を開く。
- 端末で以下のコマンドを実行し、SSH サーバを起動する。
sudo service ssh start - Ubuntu の端末から、以下のコマンドで Raspbian システムに SSH 接続する。
ssh -X -p 5022 pi@localhostオプションの説明
-X X11 転送を有効化(GUI アプリケーションを Ubuntu 側で表示可能) -p 5022 接続先ポート番号(QEMU 起動時に設定したポート) デフォルトのユーザ名は pi、パスワードは raspberry である。
パスワード入力時、画面には文字が表示されないが、これは正常な動作である。
初回接続時に確認メッセージが表示された場合は「yes」と入力する。
- 接続を終了するには、exit コマンドを実行する。
セキュリティに関する注意
デフォルトのパスワード「raspberry」は広く知られている。外部ネットワークに接続する環境で使用する場合は、passwd コマンドでパスワードを変更すること。