Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
終末何してますか? 忙しいですか? U-Bootデバッグしてもらっていいですか? / Kern...
Search
Toshifumi NISHINAGA
September 22, 2017
Programming
1.1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
終末何してますか? 忙しいですか? U-Bootデバッグしてもらっていいですか? / KernelVM Hokuriku 3
2017/09/22に第3回 KernelVM@北陸で発表した資料です。
U-Bootのデバッグに知っていると便利な小ネタをご紹介します。
Toshifumi NISHINAGA
September 22, 2017
More Decks by Toshifumi NISHINAGA
See All by Toshifumi NISHINAGA
マイコンでもRustのtestがしたい その2/KernelVM Tokyo 18
tnishinaga
2
2.7k
マイコンでもRustのtestがしたい/KernelVM Kansai 11
tnishinaga
1
1.9k
BareMetalで遊ぶRaspberry Pi 5 PCIe編/KernelVM Tokyo17
tnishinaga
2
3.9k
probe-rsの紹介と最近の貢献紹介/CELF-02-03
tnishinaga
1
850
SecurityCamp2023基板作るコース講義資料/Security Camp 2023 Lecture Materials
tnishinaga
8
2.8k
RP2040のPIOを使う話/KernelVM Hokuriku 6
tnishinaga
4
9.1k
JTAGでArmプロセッサをデバッグする方法のつづき/KernelVM_Tokyo16
tnishinaga
0
760
CMSIS-DAPの概要と使い方/KernelVM Online5
tnishinaga
1
2.5k
JTAGでarmプロセッサをデバッグする話/KernelVM Online4
tnishinaga
5
4k
Other Decks in Programming
See All in Programming
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
260
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
450
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.5k
個人開発基盤をまるごとCloudflareに引っ越して爆速で総合的体験を向上させた話
tinykitten
0
210
AI活用は、個人から組織へ|マルチプレイヤーエージェントハーネス「QM」の社内活用事例 / AI use is moving from individuals to orgs
rkaga
1
270
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
180
JRuby: Past, Present, and Future
headius
0
210
Agents on Rails - Rails at Scale 2026
irinanazarova
0
270
Security issues being discussed on Web Platforms
petamoriken
0
1.3k
一人だけ、Kiroが静止する日
hideg
0
130
Ghostty + Neovimで作る 透明でカッコ良い開発環境
j341nono
0
130
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
190
Featured
See All Featured
Building Applications with DynamoDB
mza
96
7.2k
SEO for Brand Visibility & Recognition
aleyda
0
4.8k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
76k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
410
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
420
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
My Coaching Mixtape
mlcsv
0
330
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
290
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
570
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コマンドで行う
おわり あとはデバッグするだけ! がんばっ!