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
電子辞書Brainをネットに繋げてみた(自力編)
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
らすぴー
May 30, 2026
Technology
620
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 らすぴー
高校のChromebookでも自由なネット環境を!
raspython3
0
200
限界環境CPython rev. seccamp2025
raspython3
0
56
kernel-vm-ittekita-yuukousai
raspython3
0
110
kernelvm-brain-net
raspython3
0
1.2k
pyconjp2024-wince
raspython3
0
63
seccamp2024-edictionary-python-TLS
raspython3
0
53
Other Decks in Technology
See All in Technology
ポストモーテム! DDoSからサイトは守れた。 でもビジネスは守れなかった。
bengo4com
0
2.8k
Gen3R: 3D Scene Generation Meets Feed-Forward Reconstruction
spatial_ai_network
0
120
型は壁、Rustでもバグを直すな、表現できなくせよ
nwiizo
13
2k
End-to-Endで考える信頼性 —LINEアプリにおけるクライアント開発×SRE連携の実践
maruloop
4
4.1k
SRE本の知られざる名シーン / The Hidden Gems of Google SRE Book
nari_ex
1
380
完全自律ロボットを作りたくて、先に開発を自律させた話(ROS Japan UG #63 LT)
rryz09
0
500
Genie Ontologyは銀の弾丸かを考える / Is Genie Ontology a Silver Bullet?
nttcom
0
250
ヘルスケア領域における AI 活用と その安全性担保のための取り組み (Leveraging AI in Healthcare and Our Efforts to Ensure Its Safety) - Google I/O Extended Tokyo 2026, July 11, 2026
zettaittenani
0
280
知らん間に、回ってる
ming_ayami
0
530
SRE Lounge Hiroshimaへの招待
grimoh
0
640
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
110k
「早く出す」より「事業に効く」 ── 顧客の業務サイクルから逆算するAI時代の二重ループ開発と「変化の設計者」 / devsumi2026
rakus_dev
1
220
Featured
See All Featured
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
420
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Rails Girls Zürich Keynote
gr2m
96
14k
Thoughts on Productivity
jonyablonski
76
5.2k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Designing for Timeless Needs
cassininazir
1
320
Measuring & Analyzing Core Web Vitals
bluesmoon
9
880
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
The Limits of Empathy - UXLibs8
cassininazir
1
440
Marketing to machines
jonoalderson
1
5.6k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
260
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