Programmer's Note

コード読み書きの備忘録。

BeagleBoneBlackのブートシーケンス

ひさびさBBBをまた触ろうかと。以前別のブログに書いていたメモを復習がてらにはてなに移す。

BBBに採用されているSoCはTIのAM3359

以下に技術マニュアルがある。

BBBのブートシーケンス

リセット時にまずROM内のコードが実行される。 ROMMAPは「Figure 26-3.ROM Memory Map」に書かれている。

---------------------- 0x20000
|  ROM Exc. Vectors  |
|--------------------| 0x20020
|  Public ROM CRC    |
|--------------------| 0x20080
|     Dead loops     |
|--------------------| 0x20100
|                    |
|      Code          |
|                    |
|                    |
|--------------------| 0x2BFFC
|    ROM Version     |
---------------------- 0x28fff

上記のROM Exc. Vectorsの中身は「Table 26-1.ROM Exception Vectors」に書かれている。

----------------------------
| 20000h |  Reset          | Branch to the Public ROM Code startup
|--------------------------|
| 20004h | Undefined       | PC = 4030CE04h
|--------------------------|
| 20008h | SWI             | PC = 4030CE08h  
|--------------------------|
| 2000Ch | Pre-fetch abort | PC = 4030CE0Ch
|--------------------------|
| 20010h | Data abort      | PC = 4030CE10h
|--------------------------|
| 20014h | Unused          | PC = 4030CE14h
|--------------------------|
| 20018h | IRQ             | PC = 4030CE18h
|--------------------------|
| 2001Ch | FIQ             | PC = 4030CE1Ch
---------------------------

実際に確かめてみる。

使用ツール

U-Bootのmdで0x20000をdump

U-Boot# md 20000
00020000: ea000232 e59ff018 e59ff018 e59ff018    2...............
00020010: e59ff018 e59ff018 e59ff018 e59ff018    ................

ARMのVector tableはアドレスではなくて、マシン語命令が入ってるようだから、 これだけだと分からん。調べるとオンラインの逆アセンブラがあった! (http://www.onlinedisassembler.com/odaweb/)

アセンブラ結果。

.data:0x00020000 ea000232    b      0x000208d0   
.data:0x00020004    e59ff018    ldr pc, [pc, #24]   ; 0x00020024    
.data:0x00020008    e59ff018    ldr pc, [pc, #24]   ; 0x00020028    
.data:0x0002000c    e59ff018    ldr pc, [pc, #24]   ; 0x0002002c

reset あとは、0x208d0に飛んでいるのが分かる。 ここに am335x の Boot Codeが入っている。

以上。