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
3日間で作る フルスクラッチHTTPサーバー on STM32F767 Nucleo
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
VTb
March 31, 2019
Technology
6k
14
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
3日間で作る フルスクラッチHTTPサーバー on STM32F767 Nucleo
プロトコルスタックから自作してみた。
VTb
March 31, 2019
More Decks by VTb
See All by VTb
VSP専用プロセッサ設計と実行エンジンIyokanについて
pibvt
0
350
MR1を支えた Ethernet&ROS システム
pibvt
3
1.3k
Hello_UEFI_で学ぶC言語ポインタ.pdf
pibvt
0
190
64bit UEFIからxv6を起動してみた
pibvt
0
540
Other Decks in Technology
See All in Technology
AIペネトレーションテスト・ セキュリティ検証「AgenticSec」紹介資料
laysakura
2
7.6k
AI時代に求められる技術力 フロンティア・クリエイティビティ / Technical Excellence in the AI Era: Frontier Creativity
kaonavi
0
110
FPC(フレキシブル)基板にZephyr実装してみた。
iotengineer22
0
170
Multi-Agent並列開発を 安全に回すための技術 / Technology for Safely Multi-Agent Parallel Development
tooppoo
0
200
toB プロダクトから見たWAF
tokai235
0
180
フルAIで個人開発して学んだあれこれ / yuruai vol.1
isaoshimizu
0
130
飲食店もAIで。レジ締めやハンディシステムをつくってる話 / Using AI for restaurant management
vtryo
0
190
AIチャット検索改善の3週間
kworkdev
PRO
2
190
AI時代のコスト管理を考えよう〜明日から使える実践AWSノウハウ~
yoshimi0227
0
900
“詰む”前に仕組みを作れ 〜技術の波に溺れないためのキャッチアップ術〜
takasyou
7
4k
元・セキュリティ学習経験0大学生による業務紹介 / An Introduction to the Job by a Former College Student with Zero Security Training Experience
nttcom
0
470
Flow 不死:AI 時代 DevOps 的不變本質
cheng_wei_chen
2
530
Featured
See All Featured
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
200
Paper Plane (Part 1)
katiecoart
PRO
0
9.2k
Accessibility Awareness
sabderemane
1
140
Building the Perfect Custom Keyboard
takai
2
800
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
290
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
450
Building Applications with DynamoDB
mza
96
7.1k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
Building Adaptive Systems
keathley
44
3.1k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Transcript
3日間で作る フルスクラッチHTTPサーバー on STM32F767 Nucleo VTb(@PiBVT)
目次 • 自己紹介等 • 今回作ったもの • そもそもの経緯 • STM32F767 Nucleoとは?
• 全体の設計 • 自作プロトコルスタックについて • 専用プロキシについて • HTTPサーバーについて • 色々動かす • 今後の展望 • おわりに
自己紹介等 • VTb(@PiBVT) • プログラミング歴2年の初心者 • 最近の悩みはオブジェクト指向言語・データ構造 • C++分からん
今回作ったもの STM32F767 Nucleo上で動くHTTP(over UDP)サーバーon自作プロトコルスタック • なぜTCPじゃない? => TCPを3日で実装できるほどプロじゃないから。 • なぜマイコン上? =>
なんとなく。楽しそうだったから。 • lwIPって知ってる? => 知ってるけど自作した。楽しそうだったから。 • 何の意味があるの? => 意味なんて無いです。楽しそうだったから。 • アホですか? => はい。アホです。 楽しさだけを追い求めました。
そもそもの経緯 1. 去年のセキュキャン後、自作OS上にHTTP サーバーを実装した(デバドラから) 2. 当然のことながらまともに動作しない 3. ならベアメタルしやすい環境で一度練習しとこ 4. 時間なかった
5. せや、over UDPにしたろ 6. なんか動いた
STM32F767 Nucleoとは? • STM32F767ZIとST-Linkを搭載したボード • ARMな32bitマイコン(ARM Cortex-M7) • RAM:512KB ROM:2MB
• 専用の開発環境(TrueStudio, SW4STM32) とUSB経由の書き込み • PICやAVRに比べて高性能 • ミドルウェアも充実(lwIP,FreeRTOS等) • 割と安い(2000~3000円程度) https://www.st.com/ja/evaluation-tools/nucleo-f767zi.htmlより
全体の設計 • TCPの実装は間に合わないため、専用プロキシでTCP ⇔ UDPの変換を行う • F767上ではUDPを処理する • HTMLはF767上でハードコーディング(FSは間に合わない)
自作プロトコルスタックについて • 1to1で接続している状況で必要な最低限 なものだけを実装 • ARP : MAC ⇔ IPアドレスの変換に必要
• IP : ICMP, UDPの通信に必要 • ICMP : pingは打てるようにしておきたい • UDP : HTTPの通信に必要 OSみたいにカーネルスレッドとしては動かず、 main関数内でethernet_if_rx()が無限に回り、 上の層の関数を叩くだけ。 my
自作プロトコルスタックについて -ARP- • RFC 826を参考にした(https://tools.ietf.org/html/rfc826) • 唯一全ての機能を実装してある • ARP Requestを受け取ると、ARP
Replyを返す簡単なもの
自作プロトコルスタックについて -ICMP- • RFC 792を参考にした(https://tools.ietf.org/html/rfc792) • pingに必要なEchoとEcho Replyのみ実装 • Linuxのpingはタイムスタンプも織り込む必要があるようだが、適当に受信した
EchoのタイムスタンプをコピーしてEcho Replyに入れた。
自作プロトコルスタックについて -UDP- • RFC 768を参考にした(https://tools.ietf.org/html/rfc768) • UDP自体は完全な実装だが、IPv4の実装がガバガバ。 • HTTPサーバー側から叩きやすいようにAPIを整備した(つもり)
専用プロキシについて • TCP ⇔ UDPの変換を行う超手抜きなプロキシ • 実質サーバーな気もするが気にしたら負け。
HTTPサーバーについて • index.htmlだけしか存在しない • それ以外は全て404 Not Found • ハードコーディングされた文字列を送り返すだけ。 •
時間なかったんや。許して。
色々動かす • arp-scanでF7を探してみる • pingで反応があるか確認 • curlでとりあえずHello Worldを確認 • firefoxで見てみる
今後の展望 • やっぱりTCPは動かしたい。 • BSDソケットぽいものにしたい。 • FAT読めるようにしてSDカードからHTMLファイル読み出したい。 • 他の処理も同時にしたい。 結論:自作OSしよう
おわりに • 既存のプロトコルスタックはすごい! • TCP/IPはすごい! • 最近のマイコンはすごい! • ソースコードはさすがに今のままでは公開しません....