Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
電子辞書Brainをネットに繋げてみた(自力編)
Search
らすぴー
May 30, 2026
Technology
740
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
電子辞書Brainをネットに繋げてみた(自力編)
をやりたかったんですけどね...
らすぴー
May 30, 2026
More Decks by らすぴー
See All by らすぴー
typoなんかねぇよ
raspython3
0
700
高校のChromebookでも自由なネット環境を!
raspython3
0
230
限界環境CPython rev. seccamp2025
raspython3
0
77
kernel-vm-ittekita-yuukousai
raspython3
0
130
kernelvm-brain-net
raspython3
0
1.2k
pyconjp2024-wince
raspython3
0
83
seccamp2024-edictionary-python-TLS
raspython3
0
66
Other Decks in Technology
See All in Technology
ソフトウェアDNAとクラウドエージェントのススメ
cloudace
0
100
白金鉱業Meetup Vol.25 アウトカムが二値のデータに対するCausal Impact
brainpadpr
0
190
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
5
25k
LLMに渡さなかった仕事
nanaism
0
170
HHKBエバンジェリストになる方法
941
0
100
AIネイティブプロダクトで顧客価値を最大化するプロダクトエンジニアとFDEの協働
righttouch
PRO
0
310
OpenTelemetry eBPF Instrumentationの舞台裏 / Behind the Scenes of OpenTelemetry eBPF Instrumentation
ymotongpoo
4
1.3k
aws-iot-platform-architecture-use-cases.pdf
ma2shita
0
120
絵ではじめるKubernetesセキュリティ
aoi1
3
560
The Agent Builder Loop from Daily Work to OSS
minorun365
PRO
3
200
越境するなら専門用語を使うな高校校歌 / If you wanna cross border, you shouldn't use jargon
vtryo
0
140
Spring BootからQuarkusへの移行
tatsuya1bm
2
120
Featured
See All Featured
BBQ
matthewcrist
89
10k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Discover your Explorer Soul
emna__ayadi
2
1.3k
Building Applications with DynamoDB
mza
96
7.2k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
590
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Done Done
chrislema
186
16k
Thoughts on Productivity
jonyablonski
76
5.4k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
How STYLIGHT went responsive
nonsquared
100
6.3k
Transcript
電子辞書Brainを ネットに繋げてみた ~ 自力編 ~ らすぴー / RasPython3 (@RasPython3) 1
をやりたかったんですがね...
自己紹介 活動名 RasPython3 / らすぴー X: @raspython3 seccamp’24 全国 seccamp’25
チューター 普段やってること 各種ウェブツールづくり 電子辞書いじり ゲーム内コーディング ネットワーク関連 etc. 2
本題に入る前に • 電子辞書Brainについて • SHARPの電子辞書シリーズ • Windows CE(WinCE)が動作 • 2021年以降のモデルは別OS
• 2chなどで自作アプリやハックが 盛んだった • 昨年5月頃にインターネット接続に ついに成功 • Kernel/VM@関西11回目で発表した • その後マルチプレイできるマイクラとかが 移植されててビビった 3 SHARP Brain SH-PW7-W 自分が持ってる機体の色違い
本題に入る前に 本日の内容はなんと 未完 です!!!(←???) 正確には、実装が終わりませんでした ネタの錬成は計画的に... 4
背景 • 昨年の Kernel/VM探検隊@関西11回目 にて • 電子辞書Brainを • ネットに繋げて •
発表をしました • 今回はその続きです 5
背景 正直なところ... • WinCEのビルド以外ほぼ何もやっていないよね??? • IPアドレス固定のPythonスクリプト書いたぐらい • 大きな問題点も • サンプルコードもMicrosoftの著作物なわけで...
• DLLとかの配布がちょっと厳しそう → 手軽に使える、まではできない 6
と、いうわけで 自分でデバイスドライバを書いて 配布できるようにしよう! 7
どうやって? • RNDISはMicrosoftがすでに書いている • 最近BrainuxがRNDISからCDC-NCMに変わった → せっかくだから CDC-NCM デバイスドライバを自分で書こう! 8
そもそも • RNDISってなんやねん • CDC-NCMってなんやねん 9
RNDIS • Remote NDIS (NDIS: Network Driver Interface Specification) の略
• WinCEのNDISレイヤーとUSBレイヤーを つないで、Ethernetフレームを受け渡す • MacOSではデフォでは使えないそうで、 そのためMacOSとの接続で使うのが めんどくさいらしい • 詳細なプロトコル仕様を見つけられなかった 10
RNDIS • Chromium OSのソースコード の中でRNDISはクソって 書いてある • ** STRONGLY DISCOURAGED
** • CDC-ACM/ECM/NCMのほうが 簡単らしい 11 https://chromium.googlesource.com/chromiumos/third_party/kernel/+/0.12.392.B/chromeos/compat-wireless/drivers/net/usb/rndis_host.c
CDC-NCM • CDC : Communication Device Class • NCM :
Network Control Model • CDC-ECM (Ethernet Control Model) を ベースとしてより高速な プロトコルとして設計された • 複数のEthernetフレームを まとめて送受信することで 高速に動作する 12 https://www.usb.org/sites/default/files/NCM11.pdf
CDC-NCM • Ethernetフレームを 右のようなNTB (NCM Transfer Block) に詰め込んで送る • 構造はかなり単純
• そりゃRNDISより 簡単なわけだ 13
RNDIS と CDC-NCM の共通点 • 中に入っているのがEthernetフレーム • どちらも複数まとめて送受信できる(はず) • RNDISのサンプルコードを読むと、
Data Class Interface と Communication Control Interfaceなど 構成がほぼ同じ 14
RNDIS と CDC-NCM の違い • 送り方が少し違う • RNDISはパケットとメッセージを同じ形式にして送受信 • パケットはバルク転送で、メッセージはコントロール転送の
Encapsulatedなんちゃらで送ってるっぽい • 中身がちょっとごちゃごちゃしてるっぽい • CDC-NCMはパケット(Ethernetフレーム)とメッセージ(リクエスト)を別 にして送る • Ethernetフレームはブロックにまとめてバルク転送 • リクエストはコントロール転送でUSB Device Request 15
方針 1. MSのドキュメントを見ながら1からコードを書く • 一番クリーンにできる • 一番大変 2. すでにあるデバイスドライバのサンプルプログラムを流用して書 く
• クリーン度合いは落ちる • 比較的楽 16
• この時点ではまだKernel/VMまで1~2か月あった • 「さすがにこれだけ時間があればなんとかなるやろ」(フラグ) • 方針1を探る 17
やること • USBのプロトコル仕様を調べながら • Windows CEにおけるデバイスドライバの書き方を調べる • CDC-NCMのプロトコル仕様を調べながらドライバを書く 18
補足:Windows CEにおけるドライバの動作 • 他のOSにおけるデバイスドライバの動作はよく知らないので 比較はしませんが... • OSのカーネルプロセスであるNK.EXEがドライバのDLLをロード • 各ドライバはNK.EXEのスレッドとして動作する •
なのでドライバのDLLとレジストリ設定さえ用意すれば動く 19
ところがどっこい その1 • Microsoftのドキュメントがスッカスカであまりにも情報不足 • WinCEのドキュメントはもともとページが抜けがち()だけど USB機能ドライバ周辺は突出してなんもない • 目次ページっぽいのはあったけどそれ以降のページが無ぇ! •
Lv.100のエスパータイプでもなければ無理 20
ところがどっこい その1 21 普通ならもっとページがある リンクになってないし検索しても情報が ほとんどヒットしない
ところがどっこい その1 • Windows CEは組み込みOS → そもそも一般向けじゃないからドキュメントが充実してない • USB Function
Driverを書くケース自体レア → 一層ドキュメントが充実してない • Microsoft → 見せなくていいとこは隠したがるのでドキュメントに書かない 22
• 他にもドキュメントに書いてないAPIがRNDISのサンプルコードで 山ほど使われている • 普段開発に使っているcegccのヘッダーファイルも足りない →方針1は諦めて、方針2に転換 ただしどちらにせよcegccに足りないヘッダーはWinCEのソースに 入ってるヘッダーを参考にして自分で用意する 23
ところで この時点であっという間に残り一週間 24 17 11 12 13 14 15 16
24 18 19 20 21 22 23 31 25 26 27 28 29 30 Kernel/VM okarev Seccamp 課題締切 今ここ
ところで • この週末(23,24)頑張ったらギリギリ完成しそう • 動いても動かなくてもそれも話にできるから どうにかなるでしょ ──────そう思っていた 25
ところがどっこい その2 なんと 風邪をひき発熱でダウン ...というわけで週末がログアウトしました やっべぇ(´・ω・`;;;) 26
ところがどっこい その2 • 残るは平日のみ、しかも授業・授業課題があるから あまり時間を割けない • 今流行りのAIコーディングとかも試したかったけど そんなことをやっている暇はなさそう • AIに書かせるより自分で書いたほうがおそらく速い
(内容的にAIのハルシネーションがヤバそう) 27
とにかく書く • 要するに • を書いて • こうすれば動く 28 CDC-NCM Miniport
CDC-NCM USB Transport
とにかく書く RNDISのサンプルコードの構成 • RNDISFN ... USB機能ドライバ本体、USB側の入出力担当 └ rndisfn.cpp • RNDISMINI
... NDISミニポートドライバ、NDIS側の入出力担当 ├ cemini.c ミニポートドライバのrndisfnとやり取りする側(多分) ├ hostmini.c ミニポートドライバのNDISとやり取りする側(多分) ├ rndis.c RNDISのプロトコルドライバ ├ wince.c よくわかんないけどWinCEのドライバに必要なものたち └ utils.c その他 29
とにかく書く さて... • RNDISFN └ rndisfn.cpp 76 KB • RNDISMINI
├ cemini.c 52 KB ├ hostmini.c 33 KB ├ rndis.c 64 KB ├ wince.c 16 KB └ utils.c 4 KB 30 計 245KB ≒ 24万5千字 +各種ヘッダーファイル
とにかく書く • やることは普通の移植作業に近い • RNDIS固有の実装だけCDC-NCMのものに書き換える • それ以外はほぼ写経 • 改変が多い部分はファイル単位でまとまっていそう •
rndisfn.cpp rawに近い部分なので改変必要 • rndis.c これが一番違う • cemini.c これとrndis.cが NDIS RNDIS の変換をしている(はず) • PCを触れるときはひたすら書く • 通学時間はひたすらCDC-NCMの仕様とrndisのサンプルコードの 中身を読んで頭に叩き込む (脳内マッピングによるコーディング速度の最適化) 31
間に合わねぇ! • 自分の自作動画編集ツール(約280KB)と同じくらいのサイズ でもそれは3年くらいかけて書いてる • 頑張ったけど間に合わず • 週の前半は忙しくてコード書けず • それでも2,3日の間に
90KB 書いた • rndisfn.cppにあたるncmfn.c • rndis.cにあたるncm.cの途中まで • このスライドも前日の夜から作り始めました 32 計画性
• 正直なところ... • もし完成してもできることは去年と変わらないから 見栄えしないんだよね... 33
おわりに そういえばKernel/VM@東京のconnpassページが公開されましたね ふむ... (意味深) ご清聴ありがとう ございました! 34