0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Raspberry pi3 model Bでベアメタルプログラム①

Posted at

はじめに

私は、OSの仕組みに興味があり、Raspberry piでとりあえずHDMI出力するところまでやってみようと思いはじめてみました。
ちなみに私はC言語の知識はありますが、OSやハードウェアについてはほとんど無知で調べても書いてある内容が難しくてわからなかったのでこのサイトのレッスンを主に、アセンブリ言語を調べながら一からやってみました。
https://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/introduction.html

開発環境

今回Intel CPUのMacbookを使った。
コンパイラは32Bitで開発する場合gcc-arm-embedded、64Bitで開発する場合gcc-aarch64-embeddedをHomebrewでインストールする。
今回は32Bitで開発する。

SDカードの準備

SDカードに必要なファイルは

・bootcode.bin
ブートローダー
・config.txt
Raspberry piの起動の設定をここに書く
・start.elf
ファームウェアファイル(X86でいうBIOSのようなもの)
・kernel.img
本体プログラム(今回作るプログラム)

なお、bootcode.bin、start.elfの中身は公開されていないので、私はSDカードにRaspberry piの公式のOSを専用ソフトでダウンロードして、そこからbootcode.bin、start.elf以外を全部消してSDカードを使用した。
config.txtはとりあえず空のテキストファイルとして置いておいた。

Raspberry piのブートプロセス

1. Raspberry piの電源を入れるとGPUが動き出す。
2. GPUはSoC内にマスクされているブートローダーを実行。
3. GPUはSDカード内にある2段目ブートローダー(bootcode.bin)を実行。
4. GPUはstart.elfを実行。ここでCPUが起動。
5. CPUがkernel.imgを実行。

Raspberry pi3 model Bの概要

Raspberry pi3 model BはSoC(System on Chip)といい、CPUとGPUが1つのチップに搭載されている。
SoCはBroadcomのBCM2837でARMv8のクアッドコアCortex-A53 CPUを搭載し、GPUはデュアルコアのVideoCore IVが使用されている。
このRaspberry piは32bit、64bitどちらでも使える。
今回は32bitメインで開発する。

Raspberry piの構造

Raspberry piの構造はメモリマップドI/O(MMIO)といい、決められた物理アドレス空間上に周辺機器のレジスタがマッピングされており、そのアドレスに書き込むことで周辺機器のレジスタを操作できるというもの。

最後に

今回はRaspberry piのベアメタルプログラミングについて必要最低限で知っておいた方がいいことをまとめてみました。
次回はLED点灯のプログラムをC言語とARMのアセンブリで書いてみたいと思います。

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?