การสร้างไดรเวอร์ไร้สายสำหรับ Edimax Wireless USB: EW-7811UN


33

ฉันลองและปิดหลายวันเพื่อสร้างโมดูลสำหรับอุปกรณ์ไร้สาย USB ของฉัน

มันเป็นEdimax EW-7811UN

ฉันพบทรัพยากรหลายอย่างเกี่ยวกับการสร้างโมดูลสำหรับ Debian แต่ไม่มีสำหรับ Arch ขณะนี้ฉันกำลังพยายามที่จะข้ามรวบรวมโดยใช้toolchain พบได้ในราสเบอร์รี่ Pi GitHub นี่คือขั้นตอนที่ฉันได้ทำ:

  • ดาวน์โหลดแหล่งที่มาขับจากเว็บไซต์ Edimax
  • ดาวน์โหลดแหล่งเคอร์เนลจาก GitHub
  • สร้างกฎการทำเฉพาะ (ตามเอกสาร Edimax) ใน Edimax MakeFile:

ifeq ($(CONFIG_PLATFORM_PI), y)
  EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
  ARCH := arm
  CROSS_COMPILE := arm-bcm2708-linux-gnueabi-
  KVER  := 3.1.9-30-ARCH+
  KSRC := /pi-sources/lib/modules/3.1.9-30-ARCH+/build 
  MODDESTDIR := /pi-sources/lib/modules/3.1.9-30-ARCH+/kernel/drivers/net/wireless/
  INSTALL_PREFIX :=
endif
  • KSRC เป็นไดเรกทอรีที่มีแหล่งเคอร์เนล
  • MODDESTDIR เป็นไดเรกทอรีที่คุณต้องการให้โมดูลสิ้นสุด
  • CROSS_COMPILEคือ toolchain ของฉัน (ซึ่งถูกเพิ่มในPATH)

ความพยายามครั้งแรกที่makeให้ข้อผิดพลาดนี้:

fatal error: linux/smp_lock.h: No such file or directory

ฉันพบว่านี่เป็นส่วนหัวที่ล้าสมัยและเชื่อมโยงไปยังsmp.hควรแก้ไขปัญหา อย่างไรก็ตามบิลด์ยังคงล้มเหลวด้วยข้อผิดพลาดของแหล่งที่มาซึ่งมีลักษณะดังนี้:

error: field 'recv_tasklet' has incomplete type

ฉันได้รวบรวมพอที่จะรู้ว่าสิ่งนี้ดูเหมือนว่าการสร้างไม่สนับสนุนรุ่นเคอร์เนลล่าสุด แต่ถ้าเป็นเช่นนั้นแล้วมันถูกสร้างขึ้นสำหรับ Debian อย่างไร


ข้อมูลเพิ่มเติม:

  • เอาท์พุทเต็มรูปแบบที่นี่

ฉันมีอะแดปเตอร์ตัวเดียวกัน แต่ยังไม่ได้ลอง!
เชนฮัดสัน

โปรดแจ้งให้เราทราบว่าคุณจะทำอย่างไรกับมันและเพิ่มประสบการณ์ของคุณในภายหลังแม้ว่าจะเป็นแง่ลบก็ตาม
Jivings

@ Tomas ความโปรดปรานมากขึ้น! ทำให้แน่ใจว่าอเล็กซ์ไม่เข้าใจในตอนนี้ :)
Jivings

คำตอบ:


12

คำแนะนำสำหรับการคอมไพล์ข้าม

  1. ดาวน์โหลดแหล่งที่มาขับจากเว็บไซต์ Edimax

  2. โคลนแหล่งเคอร์เนลจาก GitHub

  3. cdลงในแหล่งเคอร์เนลของคุณและเข้าcd include/linuxวิ่ง

    ln -s smp.h smp_lock.h`.
    
  4. unzipการดาวน์โหลด Edimax และtar -xzfแพ็คเกจไดรเวอร์ cdลงในdriver/rtl...ไดเรกทอรีย่อย

  5. แก้ไขinclude/rtw_xmit.hและเพิ่ม#include <linux/interrupt.h>ในส่วนอื่น ๆ ประกอบด้วย

  6. แก้ไขos_dep/osdep_service.cและเพิ่ม

    #include <linux/semaphore.h>
    #define init_MUTEX(sem)         sema_init(sem, 1)
    

    ภายใต้อื่น ๆ รวมถึง

  7. แก้ไขการMakefileเพิ่ม

    ifeq ($(CONFIG_PLATFORM_PI), y)
    EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
    ARCH := arm
    CROSS_COMPILE := arm-bcm2708-linux-gnueabi-
    KVER  := 3.1.9-30-ARCH+
    KSRC := ~/pi-sources
    MODDESTDIR := ~/pi-sources/lib/modules/3.1.9-30-ARCH+/kernel/drivers/net/wireless/
    INSTALL_PREFIX :=
    endif
    

ภายใต้ส่วนที่คล้ายกัน

  1. สมมติว่าอยู่ในเส้นทางของคุณวิ่งarm-bcm2708-linux-gnueabi-{gcc|ld}make CONFIG_PLATFORM_PI=y modules

ตอนนี้โมดูลควรจะถูกคอมไพล์


สร้างสำเร็จแล้ว! แต่โมดูลจะถูกสร้างขึ้นที่ไหน? ดังนั้นฉันสามารถคัดลอกไปยัง Pi
Jivings

รากของแพ็คเกจไดรเวอร์ที่ฉันคิดว่า
อเล็กซ์แชมเบอร์เลน

1
หืมดูเหมือนว่าจะอยู่ที่นั่น แปลก. แล้วประเด็นMODDESTDIRคืออะไร?
Jivings

ไม่มีความเห็น!!!!!!!!!
อเล็กซ์แชมเบอร์เลน

เพื่อให้ได้สิ่งนี้เพื่อสร้างบน Raspberry Pi ฉันยังต้องเชื่อมโยง/lib/modules/3.1.9-30-ARCH+/buildไดเรกทอรีไปยังแหล่งเคอร์เนล
Jivings

-1

ลองคัดลอก config.gz จาก /proc/config.gz บน RPi ของคุณ จากนั้น gunzip และเปลี่ยนชื่อเป็น. config และสร้างตามข้างบน


3
คุณช่วยบอกได้ไหมว่าทำไมสิ่งนี้ถึงมีประโยชน์ในคำตอบของคุณ?
Jivings
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.