Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
終末何してますか? 忙しいですか? U-Bootデバッグしてもらっていいですか? / Kern...
Search
Toshifumi NISHINAGA
September 22, 2017
Programming
0
1.1k
終末何してますか? 忙しいですか? U-Bootデバッグしてもらっていいですか? / KernelVM Hokuriku 3
2017/09/22に第3回 KernelVM@北陸で発表した資料です。
U-Bootのデバッグに知っていると便利な小ネタをご紹介します。
Toshifumi NISHINAGA
September 22, 2017
Tweet
Share
More Decks by Toshifumi NISHINAGA
See All by Toshifumi NISHINAGA
マイコンでもRustのtestがしたい その2/KernelVM Tokyo 18
tnishinaga
2
2.5k
マイコンでもRustのtestがしたい/KernelVM Kansai 11
tnishinaga
1
1.7k
BareMetalで遊ぶRaspberry Pi 5 PCIe編/KernelVM Tokyo17
tnishinaga
0
3.3k
probe-rsの紹介と最近の貢献紹介/CELF-02-03
tnishinaga
1
690
SecurityCamp2023基板作るコース講義資料/Security Camp 2023 Lecture Materials
tnishinaga
8
2.7k
RP2040のPIOを使う話/KernelVM Hokuriku 6
tnishinaga
3
1.9k
JTAGでArmプロセッサをデバッグする方法のつづき/KernelVM_Tokyo16
tnishinaga
0
640
CMSIS-DAPの概要と使い方/KernelVM Online5
tnishinaga
1
2.2k
JTAGでarmプロセッサをデバッグする話/KernelVM Online4
tnishinaga
5
3.8k
Other Decks in Programming
See All in Programming
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.6k
KIKI_MBSD Cybersecurity Challenges 2025
ikema
0
1.3k
IFSによる形状設計/デモシーンの魅力 @ 慶應大学SFC
gam0022
1
300
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
7
2.8k
Basic Architectures
denyspoltorak
0
680
なるべく楽してバックエンドに型をつけたい!(楽とは言ってない)
hibiki_cube
0
140
MUSUBIXとは
nahisaho
0
130
Apache Iceberg V3 and migration to V3
tomtanaka
0
160
なぜSQLはAIぽく見えるのか/why does SQL look AI like
florets1
0
460
AgentCoreとHuman in the Loop
har1101
5
240
Grafana:建立系統全知視角的捷徑
blueswen
0
330
LLM Observabilityによる 対話型音声AIアプリケーションの安定運用
gekko0114
2
430
Featured
See All Featured
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
75
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
190
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
190
Building Adaptive Systems
keathley
44
2.9k
The Curse of the Amulet
leimatthew05
1
8.6k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.7k
RailsConf 2023
tenderlove
30
1.3k
Making the Leap to Tech Lead
cromwellryan
135
9.7k
Deep Space Network (abreviated)
tonyrice
0
49
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
270
What's in a price? How to price your products and services
michaelherold
247
13k
Transcript
終末何してますか? 忙しいですか? U-Bootデバッグして もらっていいですか? 2017-09-22 KernelVM Hokuriku 3
$ who @tnishinaga
本日の内容 U-Bootデバッグ時に知ってると便利な情報をご紹介
U-Bootとは • 組み込みでよく使うブートローダーの1つ • Linuxなどのブートに必要
U-Bootの役割 https://speakerdeck.com/tnishinaga/kernelvmshi-armmaikonru-men
U-Bootのデバッグ • こんなときに必要 ◦ U-Bootを新しい組み込みボードに移植したい ◦ U-Bootのドライバを追加したい ◦ U-Bootを直したい •
今回はARMマイコンボードを想定して解説
デバッグ方法 1. コードを眺める 2. U-Bootの動作を大まかに理解する 3. GDBでリロケートアドレスにシンボル情報をロードする 4. 問題の場所とコードを見つける 5.
Breakpointを仕込む 6. 動作をみる 7. 治す
U-Bootのコード概要(私がよく使うとこだけ抜粋) • ./arch • ./board • ./drivers • ./include •
./configs • ディレクトリ構造自体はLinuxに似ている ◦ Tips: パッチの送り方やチェック方法もほぼLinuxと同じ
./arch • ./arch/arm/cpu/armv* ◦ CPUアーキテクチャ共通のコードがあるところ ◦ cacheとかtimerとか • ./arch/arm/mach-* ◦
チップベンダごとの共通なコードがあるところ ◦ 例: ./arch/arm/mach-stm32/stm32f7 ▪ SoC初期化のコードやタイマーなど stm32f7共通のコードがある • ./arch/arm/dts ◦ デバイスの定義を書いたデバイスツリーソースのあるところ
./board • ./board/* ◦ マイコンボード固有のコードがあるところ ◦ 例: STM32F746-discovery ▪ ./board/st/stm32f746-disco
以下にある ▪ DRAM初期化とか、NICの初期化とかを行う
./drivers • ./drivers/* ◦ 各種ドライバのあるところ ◦ 例: STM32のGPIO ▪ ./drivers/gpio/stm32_gpio.c
./include • ./include/configs/* ◦ 各種マイコンやボードごとの基本設定定義があるところ ◦ 後述のdefconfigやmenuconfigで設定できないところは ここをいじると変えられる ◦ 例:
STM32F746-dicoveryの設定ファイル ▪ ./include/configs/stm32f746-disco.h
./configs • ./configs/* ◦ 各種マイコンやボードのデフォルト設定のあるディレクトリ ▪ make ..._defconfig で適応するやつ ◦
例: STM32F746-dicoveryのdefconfig設定ファイル ▪ ./configs/stm32f746-disco_defconfig
やりたいことと見るべきコード • 新たなボードでU-Boot動くようにしたい! ◦ 今回紹介したコード全部 • その他! ◦ 質問してください(ARMマイコン関係ならある程度お応えできるはず) ◦
しかし、大体今回紹介した部分は全部見ることになるはず……
U-Bootの動作(うろ覚え) 1. CPUを初期化 2. ペリフェラルを初期化 3. (ある場合は)SDRAMを初期化 4. U-Boot自身をROMからRAMにリロケート
U-Bootのリロケート • U-Bootは各種初期化完了後にROMから読み書き可能な RAMにU-Boot自身をコピーする • 以降はRAM上にコピーしたU-Bootを動かす ROM RAM U-Boot メモリ
U-Boot
U-Bootのリロケートとデバッグ • GDBはROM上のシンボル情報しか持ってない ◦ リロケート後のデバッグがつらい • GDBにリロケーと後のシンボル情報追加が必要 ROM RAM U-Boot
メモリ ROM RAM U-Boot メモリ U-Boot
リロケーションアドレスの調べ方 • U-Bootの以下のコマンドで得られる ◦ U-Boot > bdinfo ROM RAM U-Boot
メモリ U-Boot relocaddr: 0xC07B9000
GDBへシンボル情報を流し込む • u-bootのELFファイルからシンボル情報を流し込む ◦ (gdb) add-symbol-file u-boot 0xC07B9000 • 以降はRAM上のU-Bootをシンボル情報つきデバッグできる
まとめ • U-Bootのどこにどんなコードがあるか紹介した • U-Bootは起動時にリロケーションされる • リロケーション後のデバッグはシンボルテーブル情報追加が 必要 • リロケーションアドレスはbdinfoコマンドで得られる
• シンボルテーブル追加はadd-symbol-fileコマンドで行う
おわり あとはデバッグするだけ! がんばっ!