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.4k
probe-rsの紹介と最近の貢献紹介/CELF-02-03
tnishinaga
1
720
SecurityCamp2023基板作るコース講義資料/Security Camp 2023 Lecture Materials
tnishinaga
8
2.7k
RP2040のPIOを使う話/KernelVM Hokuriku 6
tnishinaga
3
2k
JTAGでArmプロセッサをデバッグする方法のつづき/KernelVM_Tokyo16
tnishinaga
0
660
CMSIS-DAPの概要と使い方/KernelVM Online5
tnishinaga
1
2.2k
JTAGでarmプロセッサをデバッグする話/KernelVM Online4
tnishinaga
5
3.8k
Other Decks in Programming
See All in Programming
Codexに役割を持たせる 他のAIエージェントと組み合わせる実務Tips
o8n
4
1.3k
nuget-server - あなたが必要だったNuGetサーバー
kekyo
PRO
0
230
エラーログのマスキングの仕組みづくりに役立ったASTの話
kumoichi
0
180
AWS×クラウドネイティブソフトウェア設計 / AWS x Cloud-Native Software Design
nrslib
15
3k
AI駆動開発の本音 〜Claude Code並列開発で見えたエンジニアの新しい役割〜
hisuzuya
4
500
15年目のiOSアプリを1から作り直す技術
teakun
1
620
「抽象に依存せよ」が分からなかった新卒1年目の私が Goのインターフェースと和解するまで
kurogenki
0
110
PostgreSQL を使った快適な go test 環境を求めて
otakakot
0
540
API Platformを活用したPHPによる本格的なWeb API開発 / api-platform-book-intro
ttskch
1
130
AI時代でも変わらない技術コミュニティの力~10年続く“ゆるい”つながりが生み出す価値
n_takehata
2
720
エンジニアの「手元の自動化」を加速するn8n 2026.02.27
symy2co
0
140
Claude Code Skill入門
mayahoney
0
230
Featured
See All Featured
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.1k
Optimising Largest Contentful Paint
csswizardry
37
3.6k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.7k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
140
YesSQL, Process and Tooling at Scale
rocio
174
15k
Odyssey Design
rkendrick25
PRO
2
540
30 Presentation Tips
portentint
PRO
1
250
Code Review Best Practice
trishagee
74
20k
First, design no harm
axbom
PRO
2
1.1k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
120
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.5k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
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コマンドで行う
おわり あとはデバッグするだけ! がんばっ!