เฮ้ ฮับ!
ครั้งหนึ่งฉันตัดสินใจเชื่อมต่อราสเบอร์รี่กับอินเทอร์เน็ตผ่านทางอากาศ
ไม่ช้ากว่าจะทำเสร็จเพื่อจุดประสงค์นี้ฉันจึงซื้อนกหวีด usb wi-fi จาก บริษัท TP-Link ที่มีชื่อเสียงจากร้านค้าใกล้บ้าน ฉันจะบอกทันทีว่านี่ไม่ใช่โมดูลนาโน usb บางชนิด แต่เป็นอุปกรณ์ที่ค่อนข้างใหญ่ขนาดประมาณแฟลชไดรฟ์ปกติ (หรือขนาดนิ้วชี้ของผู้ชายที่เป็นผู้ใหญ่ถ้าคุณต้องการ) ก่อนที่จะซื้อฉันได้ทำการวิจัยเล็กน้อยเกี่ยวกับรายชื่อผู้ผลิตนกหวีดที่รองรับสำหรับ RPI และ TP-Link อยู่ในรายการ (อย่างไรก็ตามเมื่อปรากฏในภายหลังฉันไม่ได้คำนึงถึงรายละเอียดปลีกย่อยเพราะปีศาจอย่างที่เรารู้ อยู่ในรายละเอียด) ดังนั้น เรื่องราวเย็น ๆ ของการผจญภัยของฉันจึงเริ่มต้นขึ้น เราขอนำเสนอเรื่องราวนักสืบใน 3 ส่วนให้คุณทราบ สำหรับผู้ที่สนใจโปรดดูที่แมว
บทความ
เงื่อนไขของปัญหา
ได้รับ:
- คอมพิวเตอร์บอร์ดเดี่ยว Raspberry Pi 2 B v1.1 – 1 ชิ้น
- นกหวีด usb wi-fi WN727N - 1 ชิ้น
- มือที่ไม่คดเคี้ยวคู่หนึ่ง - 2 ชิ้น
- Raspbian ล่าสุดได้รับการติดตั้งเป็นระบบปฏิบัติการ (ขึ้นอยู่กับ Debian 10 Buster)
- เคอร์เนลเวอร์ชัน 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. เสนอ
การอ้างอิง
-
-
-
-
ที่มา: will.com