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
VTb
March 31, 2019
Technology
14
5.9k
3日間で作る フルスクラッチHTTPサーバー on STM32F767 Nucleo
プロトコルスタックから自作してみた。
VTb
March 31, 2019
Tweet
Share
More Decks by VTb
See All by VTb
VSP専用プロセッサ設計と実行エンジンIyokanについて
pibvt
0
310
MR1を支えた Ethernet&ROS システム
pibvt
3
1.3k
Hello_UEFI_で学ぶC言語ポインタ.pdf
pibvt
0
160
64bit UEFIからxv6を起動してみた
pibvt
0
500
Other Decks in Technology
See All in Technology
AI時代の大規模データ活用とセキュリティ戦略
ken5scal
1
280
アカデミーキャンプ 2025 SuuuuuuMMeR「燃えろ!!ロボコン」 / Academy Camp 2025 SuuuuuuMMeR "Burn the Spirit, Robocon!!" DAY 1
ks91
PRO
0
150
AIドリブンのソフトウェア開発 - うまいやり方とまずいやり方
okdt
PRO
9
470
Observability for LLM Application lifecycle
ivry_presentationmaterials
1
210
生成AI利用プログラミング:誰でもプログラムが書けると 世の中どうなる?/opencampus202508
okana2ki
0
180
人を動かすことについて考える
ichimichi
2
270
ウォンテッドリーのアラート設計と Datadog 移行での知見
donkomura
0
270
キャリアを支え組織力を高める「多層型ふりかえり」 / 20250821 Kazuki Mori
shift_evolve
PRO
2
270
.NET開発者のためのAzureの概要
tomokusaba
0
210
Delegate authentication and a lot more to Keycloak with OpenID Connect
ahus1
0
240
GitHub Copilot coding agent を推したい / AIDD Nagoya #1
tnir
0
690
歴代のWeb Speed Hackathonの出題から考えるデグレしないパフォーマンス改善
shuta13
6
570
Featured
See All Featured
Speed Design
sergeychernyshev
32
1.1k
Six Lessons from altMBA
skipperchong
28
4k
Building Applications with DynamoDB
mza
96
6.6k
Done Done
chrislema
185
16k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
61k
Thoughts on Productivity
jonyablonski
69
4.8k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Docker and Python
trallard
45
3.5k
Building Adaptive Systems
keathley
43
2.7k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
131
19k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.6k
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はすごい! • 最近のマイコンはすごい! • ソースコードはさすがに今のままでは公開しません....