松山事務所の石丸です。
Raspberry Piでなにをしようか考えていたときに「自分でOSを作ってみたい」という夢を思い出しました。
- 西永俊文「BareMetalで遊ぶ Raspberry Pi」
- 川合秀実「30日でできる! OS自作入門」
とネットを頼りに Raspberry Pi 2
で動作するOSを作ってみたいと思います。
開発環境の構築
macOS High Sierra(バージョン10.13.6) に開発環境を構築していきます。
ターゲットになるRaspberry Piのスペックは以下のようになります。
- モデル: Raspberry Pi 2 Model B v1.1
- SoC: Broadcom BCM2836
- CPU: ARM Cortex-A7(ARMv7)
「BareMetalで遊ぶ Raspberry Pi」ではLinux上で開発を行うため、WindowsやMacユーザはVirtualBoxにDebianをインストールするところから始まり、crosstool-NGでツールチェーンを構築するのですが、仮想マシン上で開発するのが嫌だったので、
【macOS】ARMのGCCコンパイル環境を構築する
https://www.yokoweb.net/2016/09/03/macos-arm-gcc/
を参考にMac上に開発環境を構築していきました。
1. ARM用GNUツールチェーンのダウンロード
GNU Arm Embedded Toolchain | Downloads – Arm Developer
https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads
から gcc-arm-none-eabi-7-2018-q2-update-mac.tar.bz2 をダウンロードします。
私の環境ではThe Unarchiverでは正しく解凍ができずハマったので、コマンドでの解凍をおすすめします。
1
|
$ tar jxvf gcc-arm-none-eabi-7-2018-q2-update-mac.tar.bz2
|
2. パスを通す
.bash_profileを編集してパスを通します。
1
2
3
|
export RASPBERRY_TOOLS=/Users/maru/Develop/raspberry/tools
export GCC_ARM_TOOLCHAIN=$RASPBERRY_TOOLS/gcc-arm-none-eabi-7-2018-q2-update
export PATH=$GCC_ARM_TOOLCHAIN/bin:$PATH
|
MacでPATHを通す
https://qiita.com/nbkn/items/01a11392921119fa0153
3.動作確認
ターミナルを再起動して、ARM用gccにパスが通っていることを確認して開発環境の構築完了です。
1
2
3
4
5
|
$ arm-none-eabi-gcc --version
arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 7-2018-q2-update) 7.3.1 20180622 (release) [ARM/embedded-7-branch revision 261907]
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
ファームウェアをブートする
FAT32形式でフォーマットしたSDカードを用意したら
RaspberryPiのVideoCore IV(GPU)を使ってOS無し(ベアメタル)からポリゴン出して遊ぶ
https://qiita.com/gyabo/items/f3a411a63d608d00b384
Raspberry Pi2(Linux Kernel)のブートシーケンスを読む(その1) アーキテクチャ依存部
https://qiita.com/Nao1215/items/b8f866b4ede757cdaa73
を参考にファームウェアが起動するところまで持っていきます。
1. ブートローダとファームウェアをダウンロード
- ブートローダ: bootcode.bin
- ファームウェア: start.elf
をダウンロードしてSDカードのルートフォルダにコピーします。
このSDカードを Raspberry Pi に挿して電源をいれると、ディスプレイに coloured splash screen が表示されてファームウェアが起動したことを確認できます。
config.txtはなくてもデフォルト設定で起動するみたいです。
このとき Raspberry Pi 本体の赤く点灯しているLEDの横で、緑のLEDが7回点滅を繰り返しているかと思います。
これはSDカードのルートフォルダにkernel.imgがないというエラーを表しています。
R-Pi Troubleshooting
https://elinux.org/R-Pi_Troubleshooting#Green_LED_blinks_in_a_specific_pattern
これからこのkernel.imgを作っていきます。