Upgrade to Pro — share decks privately, control downloads, hide ads and more …

デバッグ支援ハイパーバイザとRaspberry pi 5でのAMP

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for hotaru hotaru
March 10, 2026
62

デバッグ支援ハイパーバイザとRaspberry pi 5でのAMP

Avatar for hotaru

hotaru

March 10, 2026
Tweet

Transcript

  1. 自己紹介 番匠 夏希 詳細なプロフィール 東京科学大学 学士2年 SecHack365 '25 坂井ゼミ サイボウズ・ラボユース

    ‘25 セキュリティキャンプ 2024 全国大会 ハイパーバイザゼミ 沖縄、四国地方の1周間旅行の帰りです
  2. ユーザー側PC GDB/VSCode 一部の割り込みのみ注入 + 監視 HyprProbeの仕組み UART HyprProbe 割り込み コントローラー

    GDB メインコントローラー GDB Remote Serial Protocol デバッグ対象のOS MMU MMIOフィルタ 割り込み発生機器 Peripheral デバッグレジスタ DBGWCR/DBGBCR メモリ 実機ハードウェア OSアクセス時 フィルタリング
  3. Raspberry Pi 5 Cortex A57 現在行おうとしていること ハイパーバイザ Linux VGic 仮想割込みへ変換

    RP1 Linuxからは RP1が見えない BCM2712 BCM2712の3コアをLinux、1コアをRTOSで利用する Thin Hypervisorにより、LinuxにRP1を見せないようにする PCIe 2.0 ✕ 4 Cortex A57 Cortex A57 Cortex A57 パススルー RTOS
  4. Thin HypervisorをAMPで使う理由について 今回求めている要件 Linux側を全く改変したくない(dtbの改変のみ) Linuxのバージョン依存にはしたくない Linuxのmain streamでRP1の大規模な改変あり     (もっとPCIeとして扱いたいらしい?) RP1にあるデバイスをLinux/RTOSどっちもで使いたい

      (カメラをLinuxで、PWMをRTOSで) RTOSには厳密なリアルタイム性は要求しない ページングやキャッシュでの誤差は無視する BCM2712からRP1へ送るときの遅延も無視( 1μsぐらい遅延があるらしい)
  5. Cortex A76 ✕ 4 GIC-400 (Gic v2) ④:IRQ/FIQ MSI-X Interrupt

    Peripheral ③:SPI RP1 割込みコントローラ ②:MSI/X PL011 UARTコントローラ ①: SPI Raspberry Pi 5から、GPIOのコントローラとしてRP1が追加された このため、RP1のGPIOからの割込みが複数のコントローラを経由するため難しくなっている RP1(GPIOコントローラ) BCM2712(Soc) PL011 UARTコントローラ ①: SPI GIC-400 (Gic v2) Raspberry Pi 5 Raspberry Pi 4 GIC-400 (Gic v2) Cortex A72 ✕ 4 ②:IRQ/FIQ 割込みがCPUに受理されるまでの仕組み Thin HypervisorをAMPで使う理由について
  6. Raspberry Pi 5 Cortex A57 現在行おうとしていること(再掲) ハイパーバイザ Linux VGic 仮想割込みへ変換

    RP1 Linuxからは RP1が見えない BCM2712 BCM2712の3コアをLinux、1コアをRTOSで利用する Thin Hypervisorにより、LinuxにRP1を見せないようにする PCIe 2.0 ✕ 4 Cortex A57 Cortex A57 Cortex A57 パススルー RTOS
  7. Raspberry Pi 5のI/O chipであるRP1はBCM2712(Soc)とPCIe 2.0 ✕ 4で接続されている このため、PCIeの初期化などの設定をまず最初に行う必要があるが めんどくさい +

    今回の内容に直接関係せず非本質 config.txtのファームウェアが RP1をリセットせずに起動してくれる + UART0の初期設定を行ってくれる オプション(pciex4_reset=0, enable_rpi1_uart=1)を利用すれば良い 困ったこと: RP1のアドレスが公式と違う おまけ