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
330
MR1を支えた Ethernet&ROS システム
pibvt
3
1.3k
Hello_UEFI_で学ぶC言語ポインタ.pdf
pibvt
0
180
64bit UEFIからxv6を起動してみた
pibvt
0
520
Other Decks in Technology
See All in Technology
2025年のデザインシステムとAI 活用を振り返る
leveragestech
0
540
小さく、早く、可能性を多産する。生成AIプロジェクト / prAIrie-dog
visional_engineering_and_design
0
210
ハッカソンから社内プロダクトへ AIエージェント ko☆shi 開発で学んだ4つの重要要素
leveragestech
0
440
ハッカソンから社内プロダクトへ AIエージェント「ko☆shi」開発で学んだ4つの重要要素
sonoda_mj
6
1.9k
ECS_EKS以外の選択肢_ROSA入門_.pdf
masakiokuda
1
120
ペアーズにおけるAIエージェント 基盤とText to SQLツールの紹介
hisamouna
2
1.9k
ソフトウェアエンジニアとAIエンジニアの役割分担についてのある事例
kworkdev
PRO
1
330
BidiAgent と Nova 2 Sonic から考える音声 AI について
yama3133
2
130
モダンデータスタックの理想と現実の間で~1.3億人Vポイントデータ基盤の現在地とこれから~
taromatsui_cccmkhd
2
290
まだ間に合う! Agentic AI on AWSの現在地をやさしく一挙おさらい
minorun365
19
3.3k
松尾研LLM講座2025 応用編Day3「軽量化」 講義資料
aratako
14
4.7k
Oracle Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
3
210
Featured
See All Featured
Bash Introduction
62gerente
615
210k
Paper Plane
katiecoart
PRO
0
44k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
Practical Orchestrator
shlominoach
190
11k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
140
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
0
97
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
The SEO identity crisis: Don't let AI make you average
varn
0
40
HDC tutorial
michielstock
1
280
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
240
Designing for Timeless Needs
cassininazir
0
100
It's Worth the Effort
3n
187
29k
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はすごい! • 最近のマイコンはすごい! • ソースコードはさすがに今のままでは公開しません....