>もどる
システムタイマー (ビデオコントローラ側のタイマー) は 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 の 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 ディレクトリに置いておく。以下詳細。
(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
(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 のトップディレクトリで、
(arm-elf- の部分は EABI の時は arm-eabi- とする)
できた u-boot.bin を Raspberry Pi の SD にコピーし、config.txt の内容を kernel=u-boot.bin に変更する。