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
- オンライン逆アセンブラ(http://www.onlinedisassembler.com/odaweb/)
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が入っている。
以上。