
रास्पबेरी पाई पिको W के लिए फर्मवेयर जो एक ड्राइवर-रहित USB Wi-Fi एडाप्टर बनाता है, जिसमें पारदर्शी लेयर-2 ब्रिजिंग, WPA2/WPA3 प्रमाणीकरण, और आउट-ऑफ-बैंड प्रबंधन कंसोल शामिल है।
= pico-usb-wifi :toc: macro :toclevels: 3 :idprefix: :idseparator: -
pico-usb-wifi रास्पबेरी पाई पिको W के लिए फर्मवेयर है जो इसे एक ड्राइवर-रहित USB Wi-Fi एडाप्टर में बदल देता है, जो USB CDC-NCM डिवाइस के रूप में एन्यूमरेट होता है।
:figure-caption: AI Slop
.pico-usb-wifi आरेख image::images/openrouter-banana2-rpi-pico.png[]
फर्मवेयर एक पारदर्शी लेयर-2 ब्रिज के रूप में कार्य करता है जो पिको W के वायरलेस इंटरफेस और उसके USB इंटरफेस के बीच फ्रेम अग्रेषित करता है। होस्ट का USB इंटरफेस पिको W Wi-Fi स्टेशन का MAC पता अपना लेता है, जो अंत-से-अंत तक एकल MAC और IP पहचान प्रदान करता है।
किसी होस्ट-साइड ड्राइवर, कर्नेल मॉड्यूल या वायरलेस स्टैक की आवश्यकता नहीं है; देखें <<no-host-side-wi-fi-stack,कोई होस्ट-साइड Wi-Fi स्टैक नहीं>>।
होस्ट को केवल बिल्ट-इन cdc_ncm और cdc_acm ड्राइवरों की आवश्यकता होती है जो हर आधुनिक Linux, macOS, Windows और मोबाइल OS के साथ आते हैं।
== विशेषताएँ
pico-usb-wifi ये सुविधाएँ प्रदान करता है:
.एक वास्तविक दुनिया की स्थिति image::images/slop_2.png[]
== यह क्यों मौजूद है
मुझे एक आगामी एम्बेडेड Linux प्रोजेक्ट में उपयोग के लिए USB Wi-Fi एडाप्टर की आवश्यकता थी। मेरे पास सस्ता USB Wi-Fi डोंगल नहीं था, इसलिए किसी भौतिक स्टोर से पाँच USD में खरीदने जाने के बजाय, मैंने एक लंबे छुट्टी वाले सप्ताहांत के दो दिन और लगभग दस लाख Claude Code टोकन इस फर्मवेयर को बनाने में बिताए।
白一百, pico-usb-wifi के लेखक
Google ने कहा कि यह संभव नहीं है:
.pico-usb-wifi "संभव नहीं" image::images/gemini_says_not_possible.png[]
toc::[]
== कोई होस्ट-साइड Wi-Fi स्टैक नहीं
USB Wi-Fi डोंगल के विपरीत, यह एडाप्टर होस्ट को केवल एक ईथरनेट-जैसा इंटरफेस प्रदान करता है। पिको W संपूर्ण वायरलेस पक्ष रखता है: रेडियो, एसोसिएशन, WPA2/WPA3 सप्लीकेंट और नियामक डोमेन।
यह सिस्टम को wpa_supplicant, cfg80211/mac80211 वायरलेस स्टैक, नियामक डेटाबेस और चिपसेट फर्मवेयर या वेंडर ड्राइवर स्थापित करने से बचने की अनुमति देता है।
Wi-Fi क्रेडेंशियल की प्रोविज़निंग डिवाइस पर, उसके आउट-ऑफ-बैंड प्रबंधन कंसोल के माध्यम से होती है, न कि किसी होस्ट-साइड वायरलेस टूलिंग के माध्यम से।
यह एक सीमित या उपकरण होस्ट, या ऐसे होस्ट जिसमें वायरलेस ड्राइवर नहीं हैं, या जिसके वेंडर कर्नेल में उनकी कमी है, को केवल यूनिवर्सल CDC क्लास ड्राइवरों का उपयोग करके वायरलेस नेटवर्क से जुड़ने की क्षमता प्रदान करता है।
== यह कैसे काम करता है
[#fig-topology] .टोपोलॉजी आरेख image::images/topology.svg[पारदर्शी लेयर-2 ब्रिज टोपोलॉजी,820]
होस्ट के USB इंटरफेस को पिको W के Wi-Fi स्टेशन का MAC पता दिया जाता है, इसलिए अंत-से-अंत तक एकल MAC मौजूद रहता है और पिको W USB और Wi-Fi के बीच ईथरनेट फ्रेम को यथावत अग्रेषित कर सकता है। एक Wi-Fi स्टेशन कई MAC पतों को ब्रिज नहीं कर सकता, इसलिए होस्ट और स्टेशन को एक MAC पर समेटना ही वह चीज़ है जो पारदर्शी ब्रिज को संभव बनाती है। पूर्ण तर्क, डेटा पथ और IPv6/मल्टीकास्ट हैंडलिंग का वर्णन <<architecture,आर्किटेक्चर>> में किया गया है।
== होस्ट आवश्यकताएँ
होस्ट को इन-ट्री cdc_ncm और cdc_acm ड्राइवरों की आवश्यकता होती है।
दोनों एक दशक से अधिक समय से मेनलाइन Linux का हिस्सा रहे हैं, इसलिए कोई भी वर्तमान में समर्थित कर्नेल उन्हें शामिल करता है।
कोई आउट-ऑफ-ट्री मॉड्यूल, फर्मवेयर ब्लॉब या वेंडर ड्राइवर शामिल नहीं है।
वही क्लास ड्राइवर macOS, Windows 10 और बाद के संस्करण, Android और iOS पर मौजूद हैं।
[NOTE] किसी अन्य ऑपरेटिंग सिस्टम का परीक्षण नहीं किया गया।
== बिल्डिंग
यह प्रोजेक्ट एक मानक pico-sdk CMake प्रोजेक्ट है। इसे ARM एम्बेडेड टूलचेन, CMake, एक बिल्ड बैकएंड (Ninja या Make), Python 3 और pico-sdk की उसके सबमॉड्यूल्स सहित चेकआउट की आवश्यकता होती है। pico-sdk में बंडल किए गए TinyUSB और lwIP का उपयोग बिना संशोधन के किया जाता है।
=== निर्भरताएँ
Arch-आधारित सिस्टम (Arch, CachyOS, Manjaro) पर, टूलचेन आधिकारिक रिपॉजिटरी से आती है:
arm-none-eabi-newlib एम्बेडेड C लाइब्रेरी और हेडर प्रदान करता है; इसके बिना क्रॉस-कंपाइलर stdint.h और समान हेडर नहीं ढूँढ सकता।
libusb केवल picotool के लिए आवश्यक है, जिसे pico-sdk पहले कॉन्फ़िगर के दौरान UF2 उत्पन्न करने के लिए स्रोत से बनाता है; किसी अलग picotool पैकेज की आवश्यकता नहीं है।
=== बिल्ड चरण
git clone -b 2.2.0 --recurse-submodules https://github.com/raspberrypi/pico-sdk export PICO_SDK_PATH="$PWD/pico-sdk"
cp src/wifi_config.h.example src/wifi_config.h # then edit SSID/password, or leave blank cmake -S . -B build -G Ninja -DPICO_BOARD=pico_w -DCMAKE_BUILD_TYPE=Release cmake --build build
-G Ninja फ्लैग वैकल्पिक है; डिफ़ॉल्ट Make जनरेटर उपयोग करने के लिए इसे हटा दें (फिर cmake --build build -j)।
wifi_config.h संकलन-समय डिफ़ॉल्ट क्रेडेंशियल रखता है और gitignored है।
इसे खाली छोड़ने से बिना किसी एम्बेडेड क्रेडेंशियल वाली इमेज बनती है जिसे रनटाइम पर मैनेजमेंट कंसोल (<<management-console,मैनेजमेंट कंसोल>>) के माध्यम से प्रोविज़न किया जाता है; इसे भरने से एक डिफ़ॉल्ट नेटवर्क एम्बेड हो जाता है।
== फर्मवेयर लिखना
ये चरण बोर्ड पर फर्मवेयर लोड करते हैं।
. BOOTSEL बटन दबाए रखते हुए बोर्ड को USB से कनेक्ट करें।
यह RPI-RP2 USB मास-स्टोरेज वॉल्यूम के रूप में माउंट होता है, आमतौर पर /run/media/<user>/RPI-RP2 या /media/<user>/RPI-RP2 के अंतर्गत।
. pico-usb-wifi.uf2 को उस वॉल्यूम पर कॉपी करें।
बोर्ड स्वचालित रूप से फर्मवेयर में रीबूट हो जाता है।
. बोर्ड को उस होस्ट से कनेक्ट करें जिसे Wi-Fi कनेक्टिविटी प्राप्त करनी है।
== Linux होस्ट पर उपयोग
डिवाइस को होस्ट में प्लग करें और मैनेजमेंट कंसोल (<<management-console,मैनेजमेंट कंसोल>>) के माध्यम से एक बार उसके Wi-Fi क्रेडेंशियल प्रोविज़न करें। होस्ट का इंटरफेस तब एक्सेस पॉइंट के नेटवर्क पर किसी भी वायर्ड कनेक्शन की तरह व्यवहार करता है।
जो होस्ट इंटरफेस स्वचालित रूप से प्रबंधित करता है (NetworkManager, systemd-networkd, dhcpcd) उसे किसी सेटअप की आवश्यकता नहीं होती: यह ब्रिज पर DHCP और SLAAC चलाता है और एकल IPv4 पता, IPv6 पता, एक्सेस पॉइंट का गेटवे और DNS प्राप्त करता है, बिल्कुल वैसे ही जैसे एक वायर्ड क्लाइंट करता।
कॉन्फ़िगर करने के लिए कोई डिवाइस-साइड पता या गेटवे नहीं है, क्योंकि पिको के पास कोई नहीं है।
इंटरफेस का MAC पता Wi-Fi स्टेशन का MAC है, और इसी प्रकार नेटवर्क को एक पहचान प्रस्तुत की जाती है।
यहाँ ip कमांड का आउटपुट परिणामी इंटरफेस दिखाता है: एक्सेस पॉइंट के अपने सबनेट पर एक साधारण DHCP/SLAAC क्लाइंट, स्टेशन के MAC के साथ और पिको का कोई निशान नहीं।
== मैनेजमेंट कंसोल
मैनेजमेंट कंसोल कॉन्फ़िगरेशन फ्रंट-एंड है, जो पहले CDC-ACM सीरियल फ़ंक्शन (आमतौर पर /dev/ttyACM0) पर होता है।
यह डिवाइस के एन्यूमरेट होते ही उपलब्ध होता है, Wi-Fi के एसोसिएट होने से पहले, इसलिए प्रोविज़निंग के लिए कभी नेटवर्क की आवश्यकता नहीं होती।
इसे picocom या screen जैसे सीरियल टर्मिनल से खोलें; USB CDC के लिए बॉड दर अप्रासंगिक है।
कंसोल इनपुट को प्रतिध्वनित करता है और एक प्रॉम्प्ट दिखाता है, और प्रत्येक कमांड पूर्ण डिवाइस स्थिति प्रिंट करता है।
Wi-Fi प्रमाणीकरण या तो WPA2-PSK या WPA3-SAE (AES) है।
पासवर्ड नेटवर्क का पासफ्रेज़ होता है, या पासवर्ड खाली छोड़ने पर ओपन होता है।
एक पासवर्ड-संरक्षित प्रोफ़ाइल WPA2/WPA3 ट्रांज़िशन मोड का उपयोग करती है, इसलिए यह किसी भी प्रकार के एक्सेस पॉइंट से जुड़ सकती है।