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.8k
3日間で作る フルスクラッチHTTPサーバー on STM32F767 Nucleo
プロトコルスタックから自作してみた。
VTb
March 31, 2019
Tweet
Share
More Decks by VTb
See All by VTb
VSP専用プロセッサ設計と実行エンジンIyokanについて
pibvt
0
270
MR1を支えた Ethernet&ROS システム
pibvt
3
1.2k
Hello_UEFI_で学ぶC言語ポインタ.pdf
pibvt
0
150
64bit UEFIからxv6を起動してみた
pibvt
0
470
Other Decks in Technology
See All in Technology
クラウド食堂とは?
hiyanger
0
120
偏光画像処理ライブラリを作った話
elerac
1
170
ディスプレイ広告(Yahoo!広告・LINE広告)におけるバックエンド開発
lycorptech_jp
PRO
0
380
ウォンテッドリーのデータパイプラインを支える ETL のための analytics, rds-exporter / analytics, rds-exporter for ETL to support Wantedly's data pipeline
unblee
0
130
Охота на косуль у древних
ashapiro
0
110
アジャイルな開発チームでテスト戦略の話は誰がする? / Who Talks About Test Strategy?
ak1210
1
600
手を動かしてレベルアップしよう!
maruto
0
220
いまからでも遅くない!コンテナでWebアプリを動かしてみよう!コンテナハンズオン編
nomu
0
150
急成長する企業で作った、エンジニアが輝ける制度/ 20250227 Rinto Ikenoue
shift_evolve
0
130
システム・ML活用を広げるdbtのデータモデリング / Expanding System & ML Use with dbt Modeling
i125
1
320
(機械学習システムでも) SLO から始める信頼性構築 - ゆる SRE#9 2025/02/21
daigo0927
0
270
"TEAM"を導入したら最高のエンジニア"Team"を実現できた / Deploying "TEAM" and Building the Best Engineering "Team"
yuj1osm
1
180
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7.1k
Become a Pro
speakerdeck
PRO
26
5.2k
The Language of Interfaces
destraynor
156
24k
Typedesign – Prime Four
hannesfritz
40
2.5k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
49
2.3k
Building a Scalable Design System with Sketch
lauravandoore
461
33k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.1k
Gamification - CAS2011
davidbonilla
80
5.2k
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.2k
Producing Creativity
orderedlist
PRO
344
40k
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はすごい! • 最近のマイコンはすごい! • ソースコードはさすがに今のままでは公開しません....