มาทำความรู้จัก RaspberryPi กับ TP-Link TL-WN727N กันเถอะ

เฮ้ ฮับ!

ครั้งหนึ่งฉันตัดสินใจเชื่อมต่อราสเบอร์รี่กับอินเทอร์เน็ตผ่านทางอากาศ

ไม่ช้ากว่าจะทำเสร็จเพื่อจุดประสงค์นี้ฉันจึงซื้อนกหวีด usb wi-fi จาก บริษัท TP-Link ที่มีชื่อเสียงจากร้านค้าใกล้บ้าน ฉันจะบอกทันทีว่านี่ไม่ใช่โมดูลนาโน usb บางชนิด แต่เป็นอุปกรณ์ที่ค่อนข้างใหญ่ขนาดประมาณแฟลชไดรฟ์ปกติ (หรือขนาดนิ้วชี้ของผู้ชายที่เป็นผู้ใหญ่ถ้าคุณต้องการ) ก่อนที่จะซื้อฉันได้ทำการวิจัยเล็กน้อยเกี่ยวกับรายชื่อผู้ผลิตนกหวีดที่รองรับสำหรับ RPI และ TP-Link อยู่ในรายการ (อย่างไรก็ตามเมื่อปรากฏในภายหลังฉันไม่ได้คำนึงถึงรายละเอียดปลีกย่อยเพราะปีศาจอย่างที่เรารู้ อยู่ในรายละเอียด) ดังนั้น เรื่องราวเย็น ๆ ของการผจญภัยของฉันจึงเริ่มต้นขึ้น เราขอนำเสนอเรื่องราวนักสืบใน 3 ส่วนให้คุณทราบ สำหรับผู้ที่สนใจโปรดดูที่แมว

บทความ การเชื่อมต่ออแด็ปเตอร์ WiFi WN727N กับ Ubuntu/Mint มันช่วยฉันได้บางส่วน แต่สิ่งแรกก่อนอื่น

เงื่อนไขของปัญหา

ได้รับ:

  1. คอมพิวเตอร์บอร์ดเดี่ยว Raspberry Pi 2 B v1.1 – 1 ชิ้น
  2. นกหวีด usb wi-fi WN727N - 1 ชิ้น
  3. มือที่ไม่คดเคี้ยวคู่หนึ่ง - 2 ชิ้น
  4. Raspbian ล่าสุดได้รับการติดตั้งเป็นระบบปฏิบัติการ (ขึ้นอยู่กับ Debian 10 Buster)
  5. เคอร์เนลเวอร์ชัน 4.19.73-v7+

ค้นหา: เชื่อมต่ออินเทอร์เน็ต (Wi-Fi กระจายจากเราเตอร์ที่บ้านของคุณ)

หลังจากแกะอะแดปเตอร์ออก ฉันอ่านคำแนะนำข้างใน:

ความเข้ากันได้ของระบบ: Windows 10/8/7/XP (แม้แต่ท้องฟ้า แม้แต่ XP) และ MacOS 10.9-10.13

อืม ตามปกติแล้ว ไม่ใช่คำพูดเกี่ยวกับ Linux มันเป็นเวลา 2 ปี 19 และไดรเวอร์ยังคงต้องประกอบด้วยตนเอง...

เรามีคอมไพเลอร์ 2 คน, ห้องสมุด 75 แห่ง, binary blobs ห้าอัน, ผู้หญิงเปลือยครึ่งแถวพร้อมโลโก้และส่วนหัวของทุกภาษาและมาร์กอัปมากมาย ไม่ใช่ว่านี่เป็นชุดที่จำเป็นสำหรับงาน แต่เมื่อเริ่มประกอบระบบให้ตัวเองแล้วจะหยุดได้ยาก สิ่งเดียวที่ทำให้ฉันกังวลคือไดรเวอร์สำหรับไวไฟ ไม่มีอะไรจะช่วยเหลือตัวเองไม่ได้ ขาดความรับผิดชอบ และทุจริตได้มากไปกว่าการสร้างไดรเวอร์จากแหล่งที่มา แต่ฉันรู้ว่าไม่ช้าก็เร็วเราจะต้องเปลี่ยนไปสู่ขยะนี้

โดยทั่วไปอย่างที่คุณทราบการเล่นซอกับ usb wi-fi บน Linux คือ เจ็บปวดและค่อนข้างจืดชืด (เช่นซูชิรัสเซีย)

ในกล่องยังประกอบด้วยซีดีพร้อมไดรเวอร์ ฉันดูว่ามีอะไรอยู่บนนั้นโดยไม่มีความหวังมากนัก - พวกเขาไม่ได้ดูแลมันอย่างแน่นอน การค้นหาทางอินเทอร์เน็ตนำฉันไปยังเว็บไซต์ของผู้ผลิต แต่มีไดรเวอร์ Linux สำหรับการแก้ไขอุปกรณ์เท่านั้น v4และอยู่ในอ้อมแขนของฉัน v5.21. นอกจากนี้สำหรับเคอร์เนลเวอร์ชันเก่ามาก 2.6-3.16 ท้อแท้กับความล้มเหลวในตอนแรก ฉันคิดแล้วว่าควรจะซื้อ TL-WN727N (ซึ่งมีราคาแพงกว่าเล็กน้อยและสามารถรองรับความเร็ว 300Mbps เทียบกับ 150 ของฉันได้ แต่เมื่อปรากฏออกมา มันก็ไม่สำคัญเลย ส่วนราสเบอรี่จะเล่าให้ฟังทีหลัง) แต่สิ่งที่สำคัญที่สุดคือมีไดรเวอร์อยู่แล้วและติดตั้งเป็นแพ็คเกจ เฟิร์มแวร์-ralink. โดยปกติคุณสามารถดูรุ่นอุปกรณ์บนตัวอุปกรณ์ได้จากสติกเกอร์ข้างหมายเลขซีเรียล

การใช้ Google และการเยี่ยมชมฟอรัมต่างๆเพิ่มเติมไม่ได้นำมาซึ่งประโยชน์มากนัก เห็นได้ชัดว่าไม่มีใครก่อนฉันได้ลองเชื่อมต่ออะแดปเตอร์ดังกล่าวกับ Linux อืม ฉันโชคดีเหมือนคนจมน้ำเลย

แม้ว่าไม่ฉันกำลังโกหก แต่การเยี่ยมชมฟอรัม (ส่วนใหญ่เป็นภาษาอังกฤษ) ก็เกิดผลเช่นกัน ในบางหัวข้อมีการกล่าวถึง Mr. lwfinger ผู้มีชื่อเสียงในการเขียนไดรเวอร์จำนวนหนึ่งสำหรับอะแดปเตอร์ Wi-Fi . พื้นที่เก็บข้อมูล git ของเขาอยู่ท้ายบทความในลิงก์ และบทเรียนที่สองที่ฉันเรียนรู้คือคุณต้องระบุอุปกรณ์ของคุณเพื่อทำความเข้าใจว่าไดรเวอร์ตัวใดที่อาจเหมาะสมกับอุปกรณ์

ตอนที่ 1: ตัวตนของบอร์น

เมื่อเสียบอุปกรณ์เข้ากับพอร์ต แน่นอนว่าไม่มีไฟ 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

ระบบไม่ทราบว่าเป็นอุปกรณ์ประเภทใด และแสดงพื้นที่ว่างแทนชื่ออย่างเขินๆ (แม้ว่า vendor=2357 จะเป็น TP-Link แน่นอน)

ในขั้นตอนนี้ผู้อ่านที่อยากรู้อยากเห็นอาจสังเกตเห็นสิ่งที่น่าสนใจแล้ว แต่เราจะปล่อยไว้จนกว่าจะถึงเวลาของเรา

การค้นคว้าปัญหาเกี่ยวกับชื่อที่ว่างเปล่าทำให้ฉันไปยังไซต์ที่มีตัวระบุ ซึ่งมีการป้อนข้อมูลเกี่ยวกับ VID/PID ที่ทราบ 2357:0111 ของเราไม่อยู่ที่นั่น ตามที่ปรากฎในภายหลังยูทิลิตี้ lsusb ใช้ไฟล์ /usr/share/misc/usb.idsซึ่งเป็นรายการรหัสเดียวกันจากไซต์นี้ เพื่อความสวยงามของจอแสดงผล ฉันเพียงเพิ่มบรรทัดสำหรับผู้จำหน่าย TP-Link ในระบบของฉัน

2357  TP-Link
        0111  TL-WN727N v5.21

เราได้แก้ไขการแสดงผลในรายการอุปกรณ์แล้ว แต่มันไม่ได้ทำให้เราเข้าใกล้การเลือกไดรเวอร์อีกขั้นหนึ่ง ในการเลือกนักแข่ง คุณต้องรู้ว่านกหวีดของคุณใช้ชิปอะไร ความพยายามครั้งต่อไปที่ไม่ประสบความสำเร็จในการค้นหาสิ่งนี้บนอินเทอร์เน็ตไม่ได้นำไปสู่สิ่งที่ดี ด้วยไขควงปากแบนบางๆ ฉันค่อยๆ งัดฝาครอบอะแดปเตอร์ออก และผลงานอันชั่วร้ายของลุง Liao ก็ปรากฏขึ้นในสภาพเปลือยเปล่าอันบริสุทธิ์ ใต้แว่นขยาย คุณสามารถเห็นชื่อของชิป - RTL8188EUS. นี่ก็ดีอยู่แล้ว ในฟอรัมบางแห่ง ฉันเห็นโพสต์ว่าไดรเวอร์จาก lwfinger ซึ่งเป็นสุภาพบุรุษคนเดียวกันนั้นเหมาะสมกับชิปตัวนี้มาก (แม้ว่าเขาจะเขียนเกี่ยวกับ RTL8188EU เท่านั้นก็ตาม)

ตอนที่ 2: อำนาจสูงสุดของบอร์น

ฉันดาวน์โหลดแหล่งไดรเวอร์จาก Git

ถึงเวลาที่จะต้องติดตั้ง Windows ใหม่และทำสิ่งที่ผู้ใช้ Linux มักเกี่ยวข้องกับ - การประกอบบางอย่างจากบางประเภท การประกอบไดรเวอร์มีความแตกต่างเล็กน้อยจากการคอมไพล์โปรแกรม:

make
sudo make install

แต่ในการคอมไพล์โมดูลเคอร์เนล เราจำเป็นต้องมีไฟล์ส่วนหัวของเคอร์เนลสำหรับเวอร์ชันเฉพาะของเรา

มีแพ็คเกจอยู่ในคลังสต็อก raspberrypi-kernel-ส่วนหัวแต่มีเวอร์ชันเคอร์เนลของไฟล์ 4.19.66-v7l+และนั่นไม่เหมาะกับเรา แต่เพื่อให้ได้ส่วนหัวของเวอร์ชันที่ต้องการนั้นมีเครื่องมือที่สะดวก rpi-แหล่งที่มา (ลิงก์ท้าย Github) ซึ่งคุณสามารถดาวน์โหลดส่วนหัวที่จำเป็นได้ เราโคลนพื้นที่เก็บข้อมูล ทำให้สคริปต์ปฏิบัติการได้ และรันมัน การเปิดตัวครั้งแรกล้มเหลวโดยมีข้อผิดพลาด - ไม่มียูทิลิตี้ bc. โชคดีที่มันอยู่ในพื้นที่เก็บข้อมูลและเราเพิ่งติดตั้งมัน

sudo apt-get install bc

หลังจากนี้การรีสตาร์ทและดาวน์โหลดส่วนหัว (จากนั้นตั้งค่าบางอย่างฉันจำไม่ได้แล้ว) ต้องใช้เวลาระยะหนึ่งและคุณสามารถนั่งบนเก้าอี้ได้ Windows ก็ดีขึ้นในทุกรูปแบบ

หลังจากดาวน์โหลดส่วนหัวทั้งหมดแล้ว ให้ตรวจสอบว่าไดเร็กทอรีปรากฏขึ้น /lib/โมดูล/4.19.73-v7+ และในนั้น symlink จะชี้ไปยังตำแหน่งที่ไฟล์ที่ดาวน์โหลดอยู่ (สำหรับฉันมันคือ /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 ไม่ใช่สัตว์ร้ายที่รวดเร็ว (มี 32 บิต 900Mhz Cortex ARM v7)
ทุกอย่างจึงเรียบเรียง เราติดตั้งไดรเวอร์ในขั้นตอนที่ 2 (ทำการติดตั้ง) ในขณะเดียวกันก็คัดลอกไฟล์เฟิร์มแวร์เพิ่มเติมที่จำเป็นสำหรับไดรเวอร์ในการทำงาน:

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 ทั้งหมดที่สามารถให้บริการได้ และเพื่อให้อุปกรณ์ของเราทำงานร่วมกับไดรเวอร์นี้ได้ ฉันเพียงเพิ่ม ID ของฉันลงในไฟล์ 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 ตัว) ทั้งทางอากาศและทางสาย ความเร็วจะอยู่ที่ประมาณ 20Mbit/s

PS โดยทั่วไป คู่มือการคอมไพล์ไดรเวอร์สำหรับอะแดปเตอร์นี้ใช้ได้เฉพาะกับ RPI เท่านั้น จากนั้นฉันก็ทำซ้ำบนเดสก์ท็อปด้วย Linux Mint - ทุกอย่างก็ใช้ได้เช่นกัน คุณเพียงแค่ต้องดาวน์โหลดไฟล์ส่วนหัวที่จำเป็นสำหรับเวอร์ชันเคอร์เนลของคุณในลักษณะเดียวกัน

รปภ. ผู้รอบรู้แนะนำ: เพื่อไม่ให้ขึ้นอยู่กับเวอร์ชันเคอร์เนล คุณต้องรวบรวมและติดตั้งไดรเวอร์โดยใช้ dkms readme สำหรับไดรเวอร์ก็มีตัวเลือกนี้เช่นกัน

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

UPD2. เสนอ แก้ไข สำหรับรหัสอุปกรณ์ได้รับการยอมรับในสาขาหลักของพื้นที่เก็บข้อมูล lwfinger/rtl8188eu

การอ้างอิง
- อะแดปเตอร์ Wi-Fi USB RPi
- Gitbub lwfinger/rtl8188eu
- usb.ids
- rpi-แหล่งที่มา

ที่มา: will.com