もどる

Raspberry Pi に関するおぼえがき

(以下、2012年末以降ぐらいからアップデートしてません。そのへんよろしくお願いします)

Linux 以外の OS の概況

タイマーの精度

システムタイマー (ビデオコントローラ側のタイマー) は 1MHz (1024 じゃなく 1,000,000Hz) 。精度は実測で日差 3 秒(初秋の室温で)。

ファームウェア

Raspberry Pi のファームウェアの最新版は Github の raspberrypi/firmware にある。

boot ディレクトリにあるのがブートに必要なファームウェアで、SD の最初の MBR パーティションを FAT でフォーマットし、そこに bootcode.bin と loader.bin と start.elf を置く。arm???_start.elf というファイルの数字は、それぞれ ARM コアがメインメモリとして使うメモリの量で、残りはビデオコントローラが使う。メモリは 256MiB あるので、使いたい割合のものを start.elf という名前にリネームして使う。

これらが動作した後、kernel.img (Linux のカーネルイメージ) がロードされ実行される。カーネルオプションは cmdline.txt というファイルに書いておく。

さらに config.txt というファイルに kernel=u-boot.bin のように書いておくと kernel.img の代わりに、指定したファイルがカーネルとしてロード・実行される。

Das U-Boot

ブートローダー Das U-Boot の Raspberry Pi 移植版が動いていて、FreeBSD の移植版で使われている。まだ上流にマージされていない。

Raspberry Pi 用 U-Boot は Github の gonzoua/u-boot-pi にある。開発は rpi というブランチでおこなわれているので clone したら checkout rpi すること。

NetBSD(の、蛯原さんが各所でデモしたりしてるバージョン)は U-Boot を使わず、カーネルイメージを直接 NetBSD に挿し換えている。

クロス環境のセットアップ

FreeBSD の場合 ports の devel/cross-binutils と devel/cross-gcc が汎用のクロス環境である。それぞれ、TGTARCH=arm TGTABI=elf のように環境を指定してビルド&インストールする。追加パッチは ports の files ディレクトリに置いておく。以下詳細。

OABI

(1) cross-binutils のビルドとインストール

 TGTARCH=arm TGTABI=elf を指定して cross-binutils を make してインストール

(2) cross-gcc のビルドとインストール

 TGTARCH=arm TGTABI=elf の他 WITH_FLOAT_TYPE=softfp WITH_OPTARGS=--with-fpu=vfp を付け、以下のパッチを追加してビルドする。patch-oabi-gcc_config_arm_t-arm-elf

EABI

(1) cross-binutils のビルドとインストール

 TGTARCH=arm TGTABI=eabi を指定して cross-binutils を make してインストール

(2) cross-gcc のビルドとインストール

 TGTARCH=arm TGTABI=eabi の他 WITH_FLOAT_TYPE=softfp WITH_OPTARGS=--with-fpu=vfp を付け、以下のパッチを追加してビルドする。patch-eabi-gcc_config_arm_t-arm-elf

(oabi のビルドの時のパッチが残っていたらまずそれを消すように)

U-Boot のビルド

U-Boot のトップディレクトリで、

(arm-elf- の部分は EABI の時は arm-eabi- とする)

できた u-boot.bin を Raspberry Pi の SD にコピーし、config.txt の内容を kernel=u-boot.bin に変更する。