mcommit's message

ソフトウェア開発の仕事をしているsimotinといいます。記事の内容でご質問やご意見がありましたらお気軽にコメントしてください\^o^/

pcduinoでOSを自作する ~第1回 環境構築~

最近OSの仕組みを勉強しているのですが、教科書的な勉強だけだとなんだか退屈してしまうのでARMの基板でOS自作してみることにしました。
この手の趣味プロジェクトはなかなか長続きしないことが多いのですが、モチベーション維持のためにも活動記録をあげておきたいと思います。

ターゲット

ターゲットにするのはpcDuinoという基板です。
f:id:simotin13:20190414214420j:plain


pcDuino Linux Dev Board
akizukidenshi.com

私の手元にはこの基板があるのですが、V2という新しいバージョンの基板も出ているようです。*1
akizukidenshi.com

なぜこの基板にしたのか?

Coretex-A8はA系のCPUとしては古いCPUになりますが、あえてこのCPUで試してみたいと思います。
理由はコア数が1だからという単純な理由です。RaspberryPiのような最近の基板では、CPUが64bitだったり複数コアだったりします。
今回のOS自作は自分の勉強・教育が目的なのでできれば機能が少ない方がやりやすいかな考えています。*2

目標

ざっくりとはARMの基板でOSを作るということですが、もう少し具体的なゴールを決めておきたいと思います。

MMUを使うこと

組み込みの仕事をしているのでMMUのないマイコンを扱うことが多いです。あるいはCortex-A系のマイコンを使う場合はBSPのLinuxが載ること多いので、MMUを扱うOSのことが今だによく分かっていません。

これを機会にMMUの扱い・仮想メモリ・ページングといった機能についてきちんと理解することを目標にしたいと思います。

Ethnernetコントローラを動かす

せっかくOSを書くのであれば最低限Ethernetは対応したいです。
でもプロトコルスタックどうしよう。まぁそれはそれでネットワークの勉強にもなって一石二鳥になるはず。

HDMIGUI出力をすること

HDMIのコントローラとか触ったことないですが、夢は大きく持ちたいと思います。*3

環境構築

OSを開発するにあたって準備が必要です。

用意するもの(ハードウェア)

  • pcDuino

秋月電子から購入しました。

  • usb miniBケーブル

電源用です。

  • USB-シリアル変換ケーブル

OS自作する場合、最初はパソコンのような「画面」が存在しません。動作確認はもっぱらLEDやUARTを使って行います。
パソコンからUARTの出力を確認するためにUSB-シリアル変換ケーブルが必要になります。
この手のケーブルは秋月電子やアマゾンで購入できます。合わせてオス-メスのジャンパワイヤも必要になります。

  • micro SDカード

自作したOSはmicro SDカードに書き込んで起動させます。
*4

開発するPCを除くと、物理的に必要なものは上記4点になります。
開発作業はLinux環境で行います。開発用のツールチェインがインストールでき、microSDカードを認識できればなんでも構いません。
私はMintLinux 18.3を使用して開発をしていきます。ツールチェインのインストールはXxxで説明します。

開発環境の構築

開発環境の構築としては、

  1. クロス開発用のツールチェインのインストール
  2. AllWinner用のイメージ作成ツールのビルド

の2ステップが必要です。

クロス開発用のツールチェインのインストール


sudo apt install gcc-arm-none-eabi
で完了です。
/usr/bin/ 以下に arm-none-eabi-*** のツールチェイン一式がインストールされます。

AllWinner用のイメージ作成ツールのビルド

自作したOSはSDカードに書き込んでブートするのですが、単純にプログラムが書き込んであるだけでは駄目で、AllWinner用のブートイメージに変換する必要があります。イメージのロードをBROM内のプログラムがロードしてくれるのですが、チェックサムなどのチェックを行っているようです。

変換ツールはu-bootのビルドツールの1つとして公開されているようですが、手っ取り早くビルドできるよう
こちらの方が修正されたコードを公開されていますので利用させて頂きした。
github.com


git clone https://github.com/hipboi/mksunxiboot.git
cd mksunxiboot
make
sudo cp mksunxiboot /usr/local/bin

参考にするレポジトリ

これでBaremetalからのOS自作の準備は整いましたが、ブートやUARTの実装など、こちらの実装を参考にさせて頂きます。

github.com

つづき

環境構築はできたので、さっそく開発に着手しますがこの記事はここまでにしておきます。

次の記事では、CPUのリセット後の状態、UARTの有効化、Lチカ等について行った成果を挙げたいと思います。

*1:CPUは同じCoretex-A8のようです

*2:それでもワンチップマイコンからすると多機能なので途中で挫折する可能性が高いですが

*3:コントローラのレジスタ数多そうだな

*4:容量は4GBや8GBの少ないサイズでも問題無いと思います