Ubuntu で Raspbian システムを起動(QEMU、qemu-rpi-kernel を使用)
【概要】Ubuntu 環境で QEMU エミュレータを使用し、ARM プロセッサ向けの Raspbian システムを起動する手順を解説する。QEMU のインストール、カーネルイメージのダウンロード、Raspbian イメージの準備、システム起動、SSH によるリモート接続までの一連の作業を図解で説明する。
【目次】
この手順を行う目的
Raspberry Pi の実機を用意せずに、Ubuntu マシン上で Raspbian 環境を構築できる。これにより、Raspbian 向けアプリケーションの開発やテスト、ARM 環境での動作確認が可能となる。
Raspbian は、Debian をベースとした Linux ディストリビューションであり、ARM プロセッサ上で動作する。
一般的な Ubuntu マシンには x86_64 アーキテクチャのプロセッサが搭載されているため、ARM 向けの Raspbian を動作させるには QEMU(プロセッサエミュレータ)によるプロセッサのエミュレーションが必要となる。
注意事項
- エミュレーションによる実行のため、実機と比較して動作速度が低下する
- メモリは 256MB に制限される(QEMU の versatile ボードエミュレーションの制約)
- カーネルと Raspbian イメージのバージョンには互換性がある。qemu-rpi-kernel のリポジトリで対応バージョンを確認すること
謝辞:本手順は以下のプロジェクトを利用している。
- qemu-rpi-kernel: https://github.com/dhruvvyas90/qemu-rpi-kernel
Ubuntu で QEMU のインストール
- パッケージの更新
sudo apt update sudo apt -yV upgrade - QEMU のインストール
sudo apt update sudo apt -y install qemu qemu-kvm qemu-system-arm
「続行しますか? [Y/n]」と表示された場合は、y キーを押してから Enter キーを押す。
qemu-rpi-kernel のダウンロード
QEMU で Raspbian を起動するには、QEMU 用にビルドされたカーネルイメージと、ハードウェア構成を記述したデバイスツリーファイル(.dtb)が必要である。これらを GitHub からダウンロードする。
- GitHub の qemu-rpi-kernel リポジトリを開く。
- buster 系列のカーネルファイル(kernel-qemu-x.x.xx-buster)を選択する。
- ページが変わったら、Download をクリックする。
- ダウンロードしたファイルは、作業用ディレクトリに保存する。
- 続いて、デバイスツリーファイル versatile-pb.dtb をダウンロードする。リポジトリのトップページに戻り、versatile-pb.dtb を選択する。
- ページが変わったら、Download をクリックする。
- ダウンロードしたファイルは、カーネルファイルと同じディレクトリに保存する。
Raspbian のダウンロード
qemu-rpi-kernel は特定バージョンの Raspbian に対応している。リポジトリの README に記載された対応バージョンを確認し、該当するイメージをダウンロードする。
- qemu-rpi-kernel のリポジトリ(https://github.com/dhruvvyas90/qemu-rpi-kernel)で、対応する Raspbian のバージョンを確認する。
- Raspbian イメージの配布サイトを開く。ここでは国内ミラーサイトを使用する。
- 対応するバージョンのディレクトリを開き、.zip ファイルをダウンロードする。
- ダウンロードが完了するまで待機する。
- ダウンロードした .zip ファイルを展開する。展開すると .img ファイルが生成される。
unzip 2019-09-26-raspbian-buster.zip
- .img ファイルを、カーネルファイルおよび versatile-pb.dtb と同じディレクトリに配置する。
Raspbian システムの起動
- 端末を開き、ファイルを配置したディレクトリに移動する。
- ls コマンドで、必要なファイルが存在することを確認する。
- 端末で以下のコマンドを実行し、QEMU を起動する。
qemu-system-arm -M versatilepb \ -cpu arm1176 \ -m 256 \ -hda 2019-09-26-raspbian-buster.img \ -net nic \ -net user,hostfwd=tcp::5022-:22 \ -dtb versatile-pb.dtb \ -kernel kernel-qemu-4.19.50-buster \ -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" \ -no-reboot
コマンドオプションの説明
-M versatilepb エミュレートするマシンタイプ(ARM Versatile/PB ボード) -cpu arm1176 エミュレートする CPU(Raspberry Pi 1 と同等) -m 256 メモリサイズ(MB)。versatile ボードの上限は 256MB -hda ディスクイメージファイルの指定 -net nic -net user,hostfwd=... ネットワーク設定。ホストのポート 5022 をゲストのポート 22 に転送 -dtb デバイスツリーファイルの指定 -kernel カーネルイメージの指定 -append カーネル起動パラメータ -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 コマンドでパスワードを変更すること。