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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
VTb
March 31, 2019
Technology
6k
14
Share
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
A Harness for Behaviour: how to get AI to generate code that does what we intend, or "TDD in the age of AI"
xpmatteo
1
520
APIテストとは?
nagix
0
160
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
2.7k
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.7k
Javaコミュニティをもっと楽しむための9箇条
takasyou
0
710
Unlocking the Apps
pimterry
0
120
類似画像検索モデルの開発ノウハウ
lycorptech_jp
PRO
4
1.1k
string地獄を脱出する
sansantech
PRO
1
110
Databricks 月刊サービスアップデート 2026年05月号
tyosi1212
0
120
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
6
1.5k
oracle-to-databricks-migration-with-llm-and-dbt
casek
1
380
TROCCOで始めるクラウドコストを民主化するためのFinOps
tk3fftk
1
460
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
4 Signs Your Business is Dying
shpigford
187
22k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.7k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
290
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
520
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
160
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
280
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
74k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
380
Building an army of robots
kneath
306
46k
Heart Work Chapter 1 - Part 1
lfama
PRO
7
36k
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はすごい! • 最近のマイコンはすごい! • ソースコードはさすがに今のままでは公開しません....