دعونا نكوّن صداقات مع RaspberryPi مع TP-Link TL-WN727N

يا هبر!

قررت ذات مرة توصيل جهاز التوت الخاص بي بالإنترنت عبر الهواء.

لم يكد القول والفعل، ولهذا الغرض اشتريت صافرة USB wi-fi من شركة TP-Link المعروفة من أقرب متجر. سأقول على الفور أن هذا ليس نوعًا من وحدات USB النانوية، ولكنه جهاز كبير جدًا، بحجم محرك أقراص فلاش عادي (أو، إذا أردت، حجم إصبع السبابة لرجل بالغ). قبل الشراء، قمت بإجراء القليل من البحث في قائمة الشركات المصنعة للصافرة المدعومة لـ RPI وكان TP-Link مدرجًا في القائمة (ومع ذلك، كما اتضح لاحقًا، لم آخذ في الاعتبار التفاصيل الدقيقة، لأن الشيطان، كما نعلم ، في التفاصيل). لذلك، تبدأ الحكاية الباردة عن مغامراتي السيئة، ونقدم انتباهكم إلى قصة بوليسية في 3 أجزاء. للمهتمين يرجى الرجوع إلى القط.

مقالة توصيل محول WN727N WiFi بـ Ubuntu/Mint لقد ساعدني ذلك جزئيًا، ولكن أول الأشياء أولاً.

شروط المشكلة

الممنوحة:

  1. كمبيوتر لوحي واحد Raspberry Pi 2 B v1.1 – قطعة واحدة
  2. صافرة واي فاي USB WN727N - قطعة واحدة
  3. زوج من الأيدي غير الملتوية تمامًا - قطعتان
  4. تم تثبيت أحدث إصدار من Raspbian كنظام تشغيل (استنادًا إلى Debian 10 Buster)
  5. إصدار النواة 4.19.73-v7+

البحث عن: الاتصال بالإنترنت (يتم توزيع شبكة Wi-Fi من جهاز التوجيه المنزلي الخاص بك)

بعد تفريغ المحول، قرأت التعليمات الموجودة بداخله:

توافق النظام: Windows 10/8/7/XP (حتى Sky، وحتى XP) وMacOS 10.9-10.13

حسنًا، كالعادة، لا توجد كلمة واحدة عن Linux. كان 2k19، ولا تزال هناك حاجة إلى تجميع برامج التشغيل يدويًا...

كان معنا مجمعان، و2 ألف مكتبة، وخمس نقاط ثنائية، ونصف مجموعة من النساء العاريات مع شعار وبحر كامل من رؤوس جميع اللغات والعلامات المميزة. لا يعني ذلك أن هذه مجموعة ضرورية للوظيفة. ولكن بمجرد أن تبدأ في تجميع النظام لنفسك، يصبح من الصعب التوقف. الشيء الوحيد الذي أثار قلقي هو برامج تشغيل شبكة wi-fi. لا يوجد شيء أكثر عجزًا وعدم مسؤولية وفسادًا من بناء السائقين من المصدر. لكنني كنت أعلم أننا سنتحول عاجلاً أم آجلاً إلى هذه القمامة.

بشكل عام، كما تعلمون، العبث مع USB Wi-Fi على Linux هو مؤلمة ولا طعم لها إلى حد ما (مثل السوشي الروسي).

يحتوي الصندوق أيضًا على قرص مضغوط به برامج التشغيل. دون الكثير من الأمل، نظرت إلى ما هو موجود - بالتأكيد لم يعتنوا به. قادني البحث عبر الإنترنت إلى موقع الشركة المصنعة على الويب، ولكن يوجد برنامج تشغيل Linux هناك فقط لمراجعة الجهاز v4وكان بين ذراعي v5.21. وإلى جانب ذلك، بالنسبة لإصدارات النواة القديمة جدًا 2.6-3.16. بسبب الفشل في البداية، اعتقدت بالفعل أنه كان يجب عليّ استخدام TL-WN727N (إنه أغلى قليلاً ويمكنه التعامل مع 300 ميجابت في الثانية مقابل 150 ميجابت في الثانية بالنسبة لي، ولكن كما اتضح فيما بعد، هذا لا يهم على الإطلاق) بالنسبة للتوت، سيتم كتابة هذا لاحقا). ولكن الشيء الأكثر أهمية هو أن برامج التشغيل الخاصة به موجودة بالفعل ويتم تثبيتها ببساطة كحزمة البرامج الثابتة- ralink. يمكنك عادةً عرض مراجعة الجهاز على جسم الجهاز على ملصق بجوار الرقم التسلسلي.

المزيد من البحث على Google وزيارة المنتديات المختلفة لم يجلب الكثير من الخير. يبدو أنه لم يحاول أحد قبلي توصيل مثل هذا المحول بنظام Linux. حسنًا، أنا محظوظ مثل الرجل الغارق.

على الرغم من أنني لا أكذب، إلا أن زيارة المنتديات (معظمها باللغة الإنجليزية) أتت أيضًا بثمارها، ففي بعض المواضيع تم ذكر السيد lwfinger، المشهور بكتابة عدد من برامج تشغيل محولات Wi-Fi . يوجد مستودع git الخاص به في نهاية المقالة في الروابط. والدرس الثاني الذي تعلمته هو أنك تحتاج إلى تحديد جهازك حتى تتمكن من فهم برنامج التشغيل المناسب له.

الجزء الأول: هوية بورن

عندما تم توصيل الجهاز بالمنفذ، بالطبع، لم يضيء أي مؤشر LED. وبشكل عام، ليس من الواضح بأي شكل من الأشكال ما إذا كان هناك شيء يعمل أم لا.

أولاً، لمعرفة ما إذا كانت النواة ترى أجهزتنا، أبحث في dmesg:

[  965.606998] usb 1-1.3: new high-speed USB device number 9 using dwc_otg
[  965.738195] usb 1-1.3: New USB device found, idVendor=2357, idProduct=0111, bcdDevice= 0.00
[  965.738219] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  965.738231] usb 1-1.3: Product: 802.11n NIC
[  965.738243] usb 1-1.3: Manufacturer: Realtek
[  965.738255] usb 1-1.3: SerialNumber: 00E04C0001

اتضح أنه يرى، ومن الواضح أن هناك شريحة Realtek وVID/PID للجهاز نفسه على ناقل USB.

دعنا نذهب أبعد وننظر lsusbوهنا ينتظرنا فشل آخر

Bus 001 Device 008: ID 2357:0111 
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

لا يعرف النظام نوع الجهاز، ويظهر بخجل مساحة فارغة بدلاً من الاسم (على الرغم من أن البائع = 2357 هو بالتأكيد TP-Link).

في هذه المرحلة، ربما يكون القارئ الفضولي قد لاحظ بالفعل شيئًا مثيرًا للاهتمام، لكننا سنتركه حتى وقتنا هذا.

قادني البحث في مشكلة الأسماء الفارغة إلى موقع به معرفات، حيث يتم إدخال معلومات حول VID/PID المعروفة. لدينا 2357:0111 لم يكن هناك. كما اتضح لاحقا، الأداة المساعدة lsusb يستخدم الملف /usr/share/misc/usb.ids، وهي نفس قائمة المعرفات من هذا الموقع. ومن أجل جمال العرض، قمت ببساطة بإضافة خطوط للمورد TP-Link في نظامي.

2357  TP-Link
        0111  TL-WN727N v5.21

حسنًا، لقد قمنا بتصحيح العرض في قائمة الأجهزة، لكنه لم يقربنا خطوة واحدة من اختيار برنامج التشغيل. لاختيار سائق، عليك أن تعرف الشريحة التي صنعت عليها صافرتك. المحاولات الفاشلة التالية لمعرفة ذلك على الإنترنت لم تؤد إلى أي شيء جيد. مسلحًا بمفك براغي رفيع، قمت بنزع غطاء المحول بعناية وظهرت فكرة العم لياو الشريرة بكل عريها. تحت عدسة مكبرة يمكنك رؤية اسم الشريحة - RTL8188EUS. هذا جيد بالفعل. رأيت في بعض المنتديات منشورات تفيد بأن السائق من نفس السيد lwfinger مناسب تمامًا لهذه الشريحة (على الرغم من أنه يكتب فقط عن RTL8188EU).

الجزء الثاني: سيادة بورن

أقوم بتنزيل مصادر برنامج التشغيل من Git.

لقد حان الوقت لإعادة تثبيت Windows والقيام بما يرتبط به عادةً مستخدمو Linux - تجميع شيء ما من بعض الأنواع. يبدو أن تجميع برامج التشغيل لا يختلف كثيرًا عن تجميع البرامج:

make
sudo make install

ولكن لتجميع وحدات kernel نحتاج إلى ملفات رأس kernel لإصدارنا المحدد.

هناك حزمة في مستودع الأسهم رؤوس نواة التوت، ولكنه يحتوي على نسخة النواة من الملفات 4.19.66-v7l+، وهذا لا يناسبنا. ولكن للحصول على رؤوس الإصدار المطلوب، كما اتضح فيما بعد، هناك أداة مناسبة rpi المصدر (الرابط في النهاية على Github)، والذي يمكنك من خلاله تنزيل الرؤوس الضرورية. نقوم باستنساخ المستودع وجعل البرنامج النصي قابلاً للتنفيذ وتشغيله. فشل الإطلاق الأول بسبب خطأ - لا توجد فائدة bc. لحسن الحظ، فهو موجود في المستودع وقمنا بتثبيته.

sudo apt-get install bc

بعد ذلك، تستغرق إعادة تشغيل وتنزيل الرؤوس (ثم إعداد شيء ما، لا أتذكر الآن) بعض الوقت ويمكنك الجلوس على كرسيك، وأصبح Windows أفضل بجميع مظاهره.

بعد تنزيل جميع الرؤوس، تأكد من ظهور الدليل /lib/modules/4.19.73-v7+ وفيه يشير الارتباط الرمزي إلى المكان الذي توجد به الملفات التي تم تنزيلها (بالنسبة لي هو /home/pi/linux):

pi@raspberrypi:/home/pi/rtl8188eu# ls -l /lib/modules/4.19.73-v7+/
lrwxrwxrwx  1 root root     14 Sep 24 22:44 build -> /home/pi/linux

تم الانتهاء من المرحلة التحضيرية، يمكنك البدء في التجميع. يستغرق تجميع الوحدات مرة أخرى بعض الوقت، فجهاز Raspberry ليس وحشًا سريعًا (يحتوي على Cortex ARM v32 بسرعة 900 بت و7 ميجا هرتز).
لذلك تم تجميع كل شيء. نقوم بتثبيت برنامج التشغيل في الخطوة الثانية (إجراء التثبيت)، مع نسخ المزيد من ملفات البرامج الثابتة اللازمة لتشغيل برنامج التشغيل:

install:
        install -p -m 644 8188eu.ko  $(MODDESTDIR)
        @if [ -a /lib/modules/$(KVER)/kernel/drivers/staging/rtl8188eu/r8188eu.ko ] ; then modprobe -r r8188eu; fi;
        @echo "blacklist r8188eu" > /etc/modprobe.d/50-8188eu.conf
        cp rtl8188eufw.bin /lib/firmware/.
        /sbin/depmod -a ${KVER}
        mkdir -p /lib/firmware/rtlwifi
        cp rtl8188eufw.bin /lib/firmware/rtlwifi/.

الجزء 3. إنذار بورن

أقوم بتوصيل الصافرة بالمنفذ و... لم يحدث شيء. هل كان كل ذلك من أجل لا شيء؟

أبدأ بدراسة الملفات الموجودة داخل المشروع وفي أحدها أجد المشكلة: يحدد برنامج التشغيل قائمة كاملة بمعرفات VID/PID التي يمكن أن يخدمها. ولكي يعمل جهازنا مع برنامج التشغيل هذا، قمت ببساطة بإضافة هويتي إلى الملف rtl8188eu/os_dep/usb_intf.c

static struct usb_device_id rtw_usb_id_tbl[] = {
        /*=== Realtek demoboard ===*/
        {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8179)}, /* 8188EUS */
        {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x0179)}, /* 8188ETV */
        /*=== Customer ID ===*/
        /****** 8188EUS ********/
        {USB_DEVICE(0x07B8, 0x8179)}, /* Abocom - Abocom */
        {USB_DEVICE(0x0DF6, 0x0076)}, /* Sitecom N150 v2 */
        {USB_DEVICE(0x2001, 0x330F)}, /* DLink DWA-125 REV D1 */
        {USB_DEVICE(0x2001, 0x3310)}, /* Dlink DWA-123 REV D1 */
        {USB_DEVICE(0x2001, 0x3311)}, /* DLink GO-USB-N150 REV B1 */
        {USB_DEVICE(0x2001, 0x331B)}, /* D-Link DWA-121 rev B1 */
        {USB_DEVICE(0x056E, 0x4008)}, /* Elecom WDC-150SU2M */
        {USB_DEVICE(0x2357, 0x010c)}, /* TP-Link TL-WN722N v2 */
        {USB_DEVICE(0x2357, 0x0111)}, /* TP-Link TL-WN727N v5.21 */
        {}      /* Terminating entry */
};

لقد قمت بإعادة ترجمة برنامج التشغيل وإعادة تثبيته على النظام.

وهذه المرة بدأ كل شيء. أضاء الضوء الموجود على المحول وظهر جهاز جديد في قائمة واجهات الشبكة.

عرض الواجهات اللاسلكية يظهر ما يلي:

pi@raspberrypi:/home/pi/rtl8188eu# iwconfig
eth0      no wireless extensions.

lo        no wireless extensions.

wlan0     unassociated  ESSID:""  Nickname:"<WIFI@REALTEK>"
          Mode:Auto  Frequency=2.412 GHz  Access Point: Not-Associated   
          Sensitivity:0/0  
          Retry:off   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality=0/100  Signal level=0 dBm  Noise level=0 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

مكافأة لأولئك الذين قرأوا حتى النهاية

هل تتذكر كيف قلت أنه لا يهم السرعة القصوى المذكورة على المحول الخاص بك؟
لذلك، في Malinka (قبل إصدار النموذج 4)، توجد جميع الأجهزة (بما في ذلك محول إيثرنت) على نفس ناقل USB. عظيم، أليس كذلك؟ وبالتالي يتم تقسيم النطاق الترددي لحافلة USB بين جميع الأجهزة الموجودة عليه. عند قياس السرعة عبر إيثرنت وعبر USB wi-fi (متصل بجهاز توجيه واحد) عن طريق الهواء والسلك، كانت حوالي 1 ميجابت/ثانية.

ملاحظة: بشكل عام، هذا الدليل لتجميع برنامج تشغيل لهذا المحول المحدد صالح ليس فقط لـ RPI. ثم كررتها على سطح المكتب باستخدام Linux Mint - كل شيء يعمل هناك أيضًا. كل ما عليك فعله هو تنزيل ملفات الرأس الضرورية لإصدار النواة الخاص بك بنفس الطريقة.

محدث. اقترح الأشخاص المطلعون: لكي لا تعتمد على إصدار kernel، تحتاج إلى جمع وتثبيت برامج التشغيل باستخدام dkms. يحتوي الملف التمهيدي لبرنامج التشغيل أيضًا على هذا الخيار.

pi@raspberrypi:/home/pi# sudo dkms add ./rtl8188eu
pi@raspberrypi:/home/pi# sudo dkms build 8188eu/1.0
pi@raspberrypi:/home/pi# sudo dkms install 8188eu/1.0

محدث2. مقترح رقعة قماشية تم قبول معرف الجهاز في الفرع الرئيسي لمستودع lwfinger/rtl8188eu.

مراجع
- محولات واي فاي USB RPi
- جيتبوب lwfinger/rtl8188eu
- usb.ids
- rpi المصدر

المصدر: www.habr.com