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
ARM入門/arm introduction
Search
Toshifumi NISHINAGA
August 08, 2020
Programming
15
11k
ARM入門/arm introduction
2020/08/08 ARM入門勉強会の発表資料です。
https://connpass.com/event/180812/
Toshifumi NISHINAGA
August 08, 2020
Tweet
Share
More Decks by Toshifumi NISHINAGA
See All by Toshifumi NISHINAGA
SecurityCamp2023基板作るコース講義資料/Security Camp 2023 Lecture Materials
tnishinaga
8
2.1k
RP2040のPIOを使う話/KernelVM Hokuriku 6
tnishinaga
1
700
JTAGでArmプロセッサをデバッグする方法のつづき/KernelVM_Tokyo16
tnishinaga
0
270
CMSIS-DAPの概要と使い方/KernelVM Online5
tnishinaga
0
1.3k
JTAGでarmプロセッサをデバッグする話/KernelVM Online4
tnishinaga
4
2.6k
俺の仮想マシンルーターがこんなに遅いはずはない/ 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
セキュリティ・キャンプ2018「BareMetalで遊ぼうゼミ」講義資料/Security Camp 2018 BareMetal seminar material
tnishinaga
5
4.8k
Other Decks in Programming
See All in Programming
Using "modern" Ruby to build a better, faster Homebrew
mikemcquaid
2
300
CQRS meets modern Java
simas
PRO
2
480
地方こそサーバーレス、その意義に迫るサーバーレスPHP / Serverless PHP: The Rural Areas, and Why Serverless PHP Matters
seike460
PRO
2
110
The Cutting Edge Of Versioning (LambdaConf 2024)
chriskrycho
0
250
スタックトレース始めてみた
kuro_kurorrr
5
1.2k
Direct Style Effect Systems The Print[A] ExampleA Comprehension Aid
philipschwarz
PRO
0
410
JS RPCを理解する
yusukebe
5
300
ソースコードを美しくたもつために ~コードレビューの認知限界を突破し、年間400リリースを達成する~
kotauchisunsun
1
790
Enjoy Creative Coding with Ruby (RubyKaigi2024)
chobishiba
0
930
RaaP
ksss
0
160
Revisiting the Hotwire Landscape after Turbo 8 @ RailsConf 2024, Detroit
marcoroth
3
610
TypeScriptから始める VR生活
tamagokakeg
2
130
Featured
See All Featured
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
155
14k
Design by the Numbers
sachag
274
18k
Being A Developer After 40
akosma
67
580k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
660
120k
A Modern Web Designer's Workflow
chriscoyier
689
190k
How GitHub (no longer) Works
holman
305
140k
Mobile First: as difficult as doing things right
swwweet
217
8.6k
A Philosophy of Restraint
colly
197
16k
How To Stay Up To Date on Web Technology
chriscoyier
782
250k
Designing for Performance
lara
601
67k
Designing Experiences People Love
moore
136
23k
The Language of Interfaces
destraynor
151
23k
Transcript
ARM⼊⾨ 2020/08/08 ARM⼊⾨勉強会 Toshifumi NISHINAGA @tnishinaga https://speakerdeck.com/tnishinaga/arm-introduction
⾃⼰紹介 • 名前 • ⻄永俊⽂ • Arm関連でやってきたこと • Cortex-M7マイコンでNOMMU Linuxを動かす
• SynQuacerをJTAGデバッグ • Raspberry Piを題材にセキュリティ・キャンプで講義 • Link • https://github.com/tnishinaga • https://speakerdeck.com/tnishinaga • https://twitter.com/tnishinaga 2
謝辞 • 本勉強会を開いてくださったぬるぽへさん • レビュー協⼒いただいたインターネットの闇(@no_maddo)さ ん • これまでお世話になったみなさま 3
発表の⽬的 • Armアーキテクチャの名前や命令セットの名前を知ってもらい、 今後の学習の役に⽴てていただく 4
Changelog • 2020/08/08 • 初版公開 • 2020/08/13 • 誤り部分訂正 •
⾮公開スライド公開 • お役⽴ちリンク追加 5
Armとは 6
Armとは • Arm社の作った RISCアーキテクチャ のプロセッサ 7
Arm社 • 半導体IPを販売する会社 • 本社はイギリス ケンブリッジ • 2016年7⽉18⽇にsoftbankに買 われた •
https://xtrend.nikkei.com/atcl/trn/column/15/106 1226/072100008/ • 次はNvidiaに買われそう(?) • https://asia.nikkei.com/Business/SoftBank2/Soft Bank-enters-talks-to-sell-Arm-to-Nvidia https://www.arm.com/ より引⽤ 8
主な⽤途 組み込み機器 デスクトップ・サーバー 画像は以下より引⽤ https://www.96boards.org/product/developerbox/ https://www.gigabyte.com/jp/Press/News/1634 9
x86系プロセッサに⽐べたArmの特徴 • 省電⼒(※) • 低価格(※) • 低発熱(※) • 設計と製造企業が分かれている ※
最近は⼀概にそうとは⾔えなくなってきている10
Arm社とチップメーカー 11 チップメーカー (Broadcom等) 製造 SoC プロセッサコア (とペリフェラル) を設計 コアとペリフェラ
ルからSoC製造 IP
例: Raspberry PiのBCM2835のSoC 12
例: Raspberry PiのBCM2835のSoC • Arm設計 • プロセッサコア • UARTペリフェラル •
Broadcom設計 • GPIO、VideoCore、割り込みコントローラー等 • Synopsys(旧DesignWare)設計 • USBコントローラー • 上記をまとめてBroadcomがSoCを製造 13
Armアーキテクチャ とアセンブリ 14
アーキテクチャとアセンブリ • Armアーキテクチャに関して少し詳しくご紹介 • コンテンツ • アーキテクチャとプロセッサ • 実⾏モード •
各実⾏モードの呼ばれ⽅ • Armのレジスタ • A32モードの場合 • A64モードの場合 • Armアセンブリ • A32アセンブリの特徴 • A64アセンブリの特徴 • Thumbアセンブリ 15
アーキテクチャとプロセッサ • Armはアーキテクチャ名とプロセッサ名がある • 例: ARMv8はアーキテクチャ名 Cortex-A53はプロセッサ名 16
アーキテクチャ • プロセッサの基礎設計を決めるもの • MMU仕様や命令セット等 • 名前はARMvX • Xには数字が⼊る。最新はARMv8 •
ターゲットの種類によって 更にA, R, Mがつく • 例: ARMv8-A 17 Architecture (ARMv8-A) Cortex -A53 Cortex -A73
A, R, M 18 A SBC・サーバー向け R リアルタイムシステム向け M マイコン向け
プロセッサ(ファミリ) • アーキテクチャ仕様を元に作られたもの • 現⾏はCortex-(A|R|M)[0-9]+ • 基本数字が⼤きいほうが世代が新しくて 性能が良い • big.LITTLEのため例外あり
19 Architecture (ARMv8-A) Cortex -A53 Cortex -A73
おまけ: big.LITTLE • Armの省電⼒化ソリューション • ⾼性能コア(big)と低性能コア(LITTLE)を1チップに搭載 • 例: • Cortex-A15とCortex-A7
• Cortex-A73とCortex-A53 • 負荷に応じて使うコアを切り替えて電⼒消費を抑える 20 参考: http://pc.watch.impress.co.jp/docs/column/kaigai/493449.html
Armアーキテクチャだいたいの歴史 21 ARMv3 ~ v4 ARMv5 ARMv6 ARMv7 ARMv8 ARM7,
ARM7TDMI ARM9, ARM10 ARM11 Architecture Processor Cortex-A,R,M iPhone: Andrew CC BY-SA DS: Kudo-kun CC BY-SA PS VIta: Tokyoship CC BY-SA 参考: https://ja.wikipedia.org/wiki/ARMアーキテクチャ
実⾏モード • ARMv8から64bit実⾏モード(AArch64(A64))が増えた • 従来からの32bit実⾏モード(AArch32(A32))も存続 22
各実⾏モードの呼ばれ⽅ • 実⾏モードはOSや資料により呼ばれ⽅が異なる • 32bit実⾏モード • arm(oabi) • armel(eabi) •
armhf(hard-float) • AArch32(A32) • 64bit実⾏モード • arm64 • AArch64(A64) 23
例:debianの場合 https://www.debian.org/CD/http-ftp/#stable 24
Armアーキテクチャのレジスタ • Armアーキテクチャのレジスタをご紹介 • A32とA64でレジスタが別物なので分けて解説 25
主要なA32レジスタ • 汎⽤レジスタ(32bit) : R0 ‒ R12 • 計算等に使う汎⽤レジスタ •
スタックポインタ: SP(R13) • スタックの先端を⽰すレジスタ • リンクレジスタ: LR(R14) • 関数の戻りアドレスをいれるレジスタ • 分岐命令実⾏時に⾃動でセットされる • プログラムカウンタ: PC(R15) • 次に実⾏する命令のアドレスを⼊れるレジスタ 26
Tips: Armのスタックとスタックポインタ • Armのスタックは基本下位ア ドレス(0xffffffff)から上位アド レス(0x00000000)に延びる • 例: スタックにpushすると sp
- x番地に値を⼊れ、 spをsp - xに更新する stack sp --> 0x00000000 0xffffffff 27
主要なA64レジスタ • 汎⽤レジスタ: X0 ‒ X30, W0-W30 • 計算等に使う汎⽤レジスタ •
Xは64bit, Wは32bit幅アクセスができる • ゼロレジスタ: ZXR, WZR • 読むと0が得られるレジスタ • リンクレジスタ: LR(X30) • スタックポインタ: SP • A64ではシステムレジスタ扱い • プログラムカウンタ: PC • A64ではシステムレジスタ扱い 28
Armアセンブリ • 現在命令セットは⼤きく以下の3つがある • A32 • A64 • Thumb(T32, Thumb,
Thumb-2) 29
A32(ARM)アセンブリ • ARMv7以前およびA32モードで使う • 32bit固定⻑命令セット • おもしろ機能 • 条件付き命令実⾏ •
バレルシフタ 30
条件付き命令実⾏ • 任意の命令を条件付き実⾏できる • 例: 演算結果が0の場合にAND命令を実⾏したい場合 • ANDEQ r0, r0,
r1 • 何もつけないとAL(無条件)で実⾏される • AND == ANDAL • ARMバイナリに0x0Eが⼀定間隔で並ぶのはこのため • https://tnishinaga.hatenablog.com/entry/2017/05/20/040819 31
32
バレルシフタ • 命令内で値をシフト(or ローテート)する機能 • メリット • 命令数の削減ができる • でかい値を即値でロードできる
• ただし、8bitをシフトして作れる値のみ • 例: • r0にr1の値を1bitシフトして⼊れる • mov r0, r1, lsl #1 • r0に0x80000000を⼊れる • mov r0, #0x800000000 33 2020/08/13 追記: バレルシフタはA64命令セットでも利⽤可能でした
35
A64アセンブリ • ARMv8以降のA64モードで使う32bit固定⻑命令セット • 特徴 • 特徴がないのが特徴 • 素直な命令と親切さにより⾮常に書きやすい 36
親切になった部分の例 • VBAR(割り込みベクタベースレジスタ)へのアクセス • A32 • MCR p15, 0, <Rt>,
c12, c0, 0 • A64 • MSR VBAR_EL1, <Xt> 37
例: A32とA64コードの差 • 階乗を求めるコードをビルドして⽐較 38
39
40
Thumbアセンブリ • Thumb • (ほぼ)16bit固定⻑命令 • Cortex-M0, M0+で現役 • 基本レジスタR0-R7しか指定できない
• オペコードにレジスタ指定部が3bitしかないため • Thumb2(T32) • 16, 32bit混合 • Cortex-M3以降で現役 • (命令数が少ないが)⼤体A32命令と同じ使い勝⼿ 41
42
まとめ 43
まとめ • ArmはArm社の作ったRISCアーキテクチャプロセッサ • 主に組み込みで利⽤されてたが最近はサーバーにも進出 • ARMvXはアーキテクチャ名、Cortexはプロセッサ名 • 最近のArmは64bitモードが有る •
A64命令は素直。どんどん使っていこう。 44
より知りたい⼈のための資料集 • ARMv8-Aアーキテクチャマニュアル • Arm Architecture Reference Manual Armv8, for
Armv8-A architecture profile • https://developer.arm.com/documentation/ddi0487/fc • アセンブリ • A32/A64命令セット • Arm® Instruction Set Reference Guide • https://static.docs.arm.com/100076/0100/arm_instruction_set_reference_guide_100076_0100_00_en.pdf • A32命令セット • ARMで学ぶ アセンブリ⾔語⼊⾨, 出村成和, C&R研究所 • VisUAL(GUIのA32アセンブリエミュレータ) • https://salmanarif.bitbucket.io/visual/ • A64命令セット • The A64 instruction set • https://static.docs.arm.com/100898/0100/the_a64_Instruction_set_100898_0100.pdf • Thumb命令セット • Thumb 16-bit Instruction Set Quick Reference Card • https://developer.arm.com/documentation/qrc0006/e/ 45