डिस्पोज़ेबल ई-सिगरेट पर वेबसाइट होस्ट करना
(bogdanthegeek.github.io)- डिस्पोज़ेबल ई-सिगरेट में लगे लो-परफॉर्मेंस ARM Cortex-M0+ माइक्रोकंट्रोलर का उपयोग करके वेब सर्वर चलाने वाला एक प्रयोगात्मक प्रोजेक्ट
- 24KiB फ्लैश और 3KiB RAM वाले PUYA के PY32F002B चिप का विश्लेषण किया गया, और SLIP तरीके से नेटवर्क कनेक्शन लागू किया गया
- Semihosting, SLIP प्रोटोकॉल और uIP TCP/IP स्टैक का उपयोग करके वर्चुअल tty के जरिए TCP/IP संचार और HTTP सर्वर फ़ंक्शन को पोर्ट किया गया
- शुरुआत में यह बहुत धीमा था, लेकिन बफ़र ऑप्टिमाइज़ेशन और डेटा प्रोसेसिंग में सुधार के जरिए रिस्पॉन्स और पेज लोडिंग स्पीड में बड़ा सुधार किया गया
- कम मेमोरी वाले वातावरण में भी डायनेमिक सर्वर कोड चलाना और API endpoint उपलब्ध कराना संभव किया गया
- कोड वितरित किया जा रहा है, व्यावहारिक होस्टिंग संभव है, लेकिन मेमोरी जैसी संसाधन सीमाएँ काफ़ी हैं
प्रस्तावना
- पहले यह स्पष्ट कर दूँ कि यह लेख डिस्पोज़ेबल ई-सिगरेट पर सीधे चलने वाले वेब सर्वर से सर्व नहीं किया जा रहा, बल्कि वही सामग्री एक अलग सर्वर से दी जा रही है
- वास्तविक डेमो http://ewaste.fka.wtf/ पर देखा जा सकता है
पृष्ठभूमि
- पिछले कुछ वर्षों से बैटरियों को रीयूज़ करने के उद्देश्य से परिचितों से डिस्पोज़ेबल ई-सिगरेट इकट्ठी की गईं
- हाल में डिस्पोज़ेबल ई-सिगरेट डिवाइस धीरे-धीरे अधिक उन्नत होने लगीं, और उनमें USB-C तथा रीचार्जेबल बैटरी आने लगी, जिसने रुचि जगाई
- उन्हें खोलते समय PUYA नाम वाला फ्लैश चिप-इंटीग्रेटेड ARM Cortex-M0+ माइक्रोकंट्रोलर मिला, जो कम-कीमत माइक्रोकंट्रोलर के रूप में काफ़ी जाना जाता है
- ऐसे माइक्रोकंट्रोलर कई मॉडलों से इकट्ठे किए गए, और डिबग पिन लेबलिंग होने के कारण उनका विश्लेषण आसान रहा
उपयोग किया गया हार्डवेयर
- चिप पर
PUYA C642F15अंकित था, लेकिन वास्तविकता में इसे PY32F002B परिवार का माना गया - मुख्य विनिर्देश:
- 24MHz Cortex-M0+ कोर
- 24KiB फ्लैश
- 3KiB RAM
- कई परिधीय मौजूद हैं, लेकिन इस प्रोजेक्ट में उनका उपयोग नहीं किया गया
- सामान्य स्मार्टफोन की तुलना में प्रदर्शन कम है, लेकिन एम्बेडेड वातावरण में सरल वेब सर्वर बनाना पूरी तरह संभव है
नेटवर्क कनेक्शन
- यह पहला विचार नहीं था, लेकिन semihosting की अवधारणा पर प्रयोग करते हुए वेब सर्वर चलाने का विचार आया
- Semihosting, embedded ARM पर syscall की नकल करने का एक तरीका है
- रजिस्टर में वैल्यू/पॉइंटर डालकर breakpoint कॉल करने पर डिबगर उसे समझकर संबंधित काम करता है
- आम तौर पर इसका उपयोग लॉग भेजने के लिए होता है, लेकिन द्विदिश डेटा संचार भी संभव है
- USB serial डिवाइस SLIP (Serial Line Internet Protocol) प्रोटोकॉल को सपोर्ट करते हैं, इसलिए उन्हें नेटवर्क इंटरफ़ेस के रूप में इस्तेमाल किया गया
- Linux (और कुछ macOS) पर
slattachऔरsocatआदि की मदद से वर्चुअल tty के माध्यम से SLIP नेटवर्क वातावरण बनाया गयाpyocd gdb -S -O semihost_console_type=telnet -T $(PORT) $(PYOCDFLAGS) & socat PTY,link=$(TTY),raw,echo=0 TCP:localhost:$(PORT),nodelay & sudo slattach -L -p slip -s 115200 $(TTY) & sudo ip addr add 192.168.190.1 peer 192.168.190.2/24 dev sl0 sudo ip link set mtu 1500 up dev sl0 - TCP/IP स्टैक के रूप में uIP चुना गया, क्योंकि यह बहुत छोटा है, RTOS की आवश्यकता नहीं होती, और पोर्ट करना आसान है
- uIP उदाहरणों में मौजूद HTTP सर्वर का उपयोग किया गया, और SLIP कोड को semihosting तरीके के अनुसार पोर्ट करके वेब सर्वर सफलतापूर्वक चलाया गया
- ARM आर्किटेक्चर पर 16-बिट alignment समस्या होने के कारण filesystem generation script में बदलाव किए गए और Perl के जरिए कन्वर्ज़न प्रोसेस किया गया
गति अनुकूलन
- शुरुआती अवस्था में ping 1.5 सेकंड, 50% पैकेट लॉस और पेज लोडिंग में 20 सेकंड से अधिक समय लगता था, यानी प्रतिक्रिया बहुत धीमी थी
- कारण था बाइट-स्तरीय I/O का भारी overhead
- 3KiB RAM का सक्रिय उपयोग करते हुए ring buffer जोड़ा गया, और SLIP फ़ंक्शन को बैच में डेटा देने वाली संरचना बनाई गई
- राइट ऑपरेशन भी बैच में विभाजित करके भेजे गए, जिससे तेज़ cleanup संभव हुआ
- ऑप्टिमाइज़ेशन के बाद ping 20ms, बिना लॉस, पेज लोडिंग 160ms हासिल की गई
- कुल RAM और फ्लैश उपयोग:
- फ्लैश: 24KB में से 5,116B(20.82%)
- RAM: 3KB में से 1,380B(44.92%)
- पूरे ब्लॉग की सामग्री भी बिना दिक्कत सर्व की जा सकने वाली क्षमता में है, और सर्वर-साइड C कोड चलाना भी संभव है
अन्य फ़ीचर और निष्कर्ष
- API endpoint सीधे लागू किया गया, जो मुख्य पेज के अनुरोधों की संख्या और माइक्रोकंट्रोलर का unique ID लौटाता है
- यह अत्यंत कम-क्षमता वाले हार्डवेयर और न्यूनतम मेमोरी पर डायनेमिक वेब सर्वर और API तक लागू करने का एक प्रयोग है
अभी कोई टिप्पणी नहीं है.