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デバッグしてもらっていいですか? / KernelVM Hokuriku 3
Search
Toshifumi NISHINAGA
September 22, 2017
Programming
0
820
終末何してますか? 忙しいですか? 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
SecurityCamp2023基板作るコース講義資料/Security Camp 2023 Lecture Materials
tnishinaga
7
2k
RP2040のPIOを使う話/KernelVM Hokuriku 6
tnishinaga
1
660
JTAGでArmプロセッサをデバッグする方法のつづき/KernelVM_Tokyo16
tnishinaga
0
250
CMSIS-DAPの概要と使い方/KernelVM Online5
tnishinaga
0
1.3k
JTAGでarmプロセッサをデバッグする話/KernelVM Online4
tnishinaga
4
2.5k
ARM入門/arm introduction
tnishinaga
15
11k
俺の仮想マシンルーターがこんなに遅いはずはない/ KernelVM online 1
tnishinaga
0
2.3k
BareMetalで遊ぶ Raspberry Pi 4 - GIC v2編-/BareMetal Raspberry Pi 4 - GICv2 -
tnishinaga
6
4.4k
ある日突然、 あなたにPowerPCマシンが届いたらどうしますか?/kernelvmtokyo15
tnishinaga
3
3.1k
Other Decks in Programming
See All in Programming
Git Rebase
bkuhlmann
11
1.6k
Java 22 Overview
kishida
1
180
AWS Application Composerで始める、 サーバーレスなデータ基盤構築 / 20240406-jawsug-hokuriku-shinkansen
kasacchiful
1
260
Prepare for Jakarta EE 11 - Performance and Developer Productivity
ivargrimstad
0
790
Git Lint
bkuhlmann
4
750
VS Code をプロダクトにどう取り込むか
onomax
1
360
使ってみよう Azure AI Document Intelligence
kosmosebi
2
310
Goのエラースタックトレースの歴史と今後
sonatard
8
1.4k
StoreKit2によるiOSのアプリ内課金のリニューアル
kangnux
0
110
try!Swift Tokyo 2024 参加報告 LT
akidon0000
1
220
新宿ダンジョンを可視化してみた
satoshi7190
2
260
GraphQLサーバの構成要素を整理する #ハッカー鮨 #tsukijigraphql / graphql server technology selection
izumin5210
4
840
Featured
See All Featured
The Language of Interfaces
destraynor
151
23k
Why You Should Never Use an ORM
jnunemaker
PRO
51
8.6k
Product Roadmaps are Hard
iamctodd
44
9.7k
From Idea to $5000 a Month in 5 Months
shpigford
377
45k
Code Review Best Practice
trishagee
55
15k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
221
21k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
501
140k
Faster Mobile Websites
deanohume
299
30k
Large-scale JavaScript Application Architecture
addyosmani
504
110k
Building Flexible Design Systems
yeseniaperezcruz
319
37k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
274
13k
Happy Clients
brianwarren
92
6.4k
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コマンドで行う
おわり あとはデバッグするだけ! がんばっ!