Membangun Driver Nirkabel untuk Edimax Wireless USB: EW-7811UN

33

Saya telah mencoba dan menonaktifkan selama berhari-hari untuk membangun modul untuk perangkat nirkabel USB saya.

Ini adalah Edimax EW-7811UN

Saya telah menemukan beberapa sumber tentang membangun modul untuk Debian, tetapi tidak ada untuk Arch. Saat ini saya mencoba mengkompilasi silang menggunakan ToolChain yang ditemukan di Raspberry Pi GitHub . Inilah langkah-langkah yang telah saya ambil:

  • Mengunduh sumber driver dari situs web Edimax .
  • Mengunduh sumber kernel dari GitHub .
  • Membuat aturan make tertentu (sesuai dengan dokumentasi Edimax) di 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 adalah direktori yang berisi sumber kernel.
  • MODDESTDIR adalah direktori yang Anda inginkan modul berakhir.
  • CROSS_COMPILEadalah toolchain saya (yang telah ditambahkan ke PATH)

Upaya pertama makememberi kesalahan ini:

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

Saya menemukan bahwa ini adalah header yang sudah ketinggalan zaman, dan menghubungkannya untuk smp.hmemperbaiki masalah. Namun, build masih gagal dengan kesalahan sumber, yang terlihat seperti ini:

error: field 'recv_tasklet' has incomplete type

Saya telah melakukan cukup kompilasi untuk mengetahui ini terlihat seolah-olah build tidak mendukung versi kernel terbaru, tetapi jika demikian maka bagaimana ia dibangun untuk Debian?


Informasi tambahan:

Jivings
sumber
Saya memiliki adaptor yang sama, meskipun belum sempat mencobanya!
Shane Hudson
Tolong beri tahu saya bagaimana Anda melanjutkannya dan tambahkan pengalaman Anda sesudahnya, meskipun itu negatif.
Jivings
@ Thomas, lebih banyak hadiah! Pastikan Alex tidak mendapatkannya kali ini :)
Jivings

Jawaban:

12

Instruksi untuk kompilasi silang

  1. Mengunduh sumber driver dari situs web Edimax .

  2. Mengkloning sumber kernel dari GitHub .

  3. cdke dalam sumber kernel Anda dan cdke include/linux. Menjalankan

    ln -s smp.h smp_lock.h`.
    
  4. unzipunduhan Edimax dan tar -xzfpaket driver. cdke dalam driver/rtl...subdirektori.

  5. Edit include/rtw_xmit.hdan tambahkan di #include <linux/interrupt.h>bawah yang lain termasuk.

  6. Edit os_dep/osdep_service.cdan tambahkan

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

    di bawah yang lain termasuk.

  7. Edit Makefilepenambahan

    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
    

di bawah bagian yang serupa.

  1. Dengan asumsi arm-bcm2708-linux-gnueabi-{gcc|ld}ada di jalur Anda, jalankan make CONFIG_PLATFORM_PI=y modules.

Modul sekarang harus dikompilasi.

Alex Chamberlain
sumber
Bangun berhasil! Tapi ke mana modul dibangun? Jadi saya bisa menyalinnya ke Pi.
Jivings
Akar paket driver saya pikir.
Alex Chamberlain
1
Hm, sepertinya ada di sana. Aneh. Lalu apa gunanya MODDESTDIR?
Jivings
Tidak ada ide!!!!!!!!!
Alex Chamberlain
Untuk mendapatkan ini untuk membangun di Raspberry Pi saya juga harus symlink /lib/modules/3.1.9-30-ARCH+/builddirektori ke sumber kernel.
Jivings
-1

Coba salin config.gz dari /proc/config.gz di RPi Anda. Lalu gunzip dan ubah nama menjadi .config dan buat seperti di atas.

Felix Furak
sumber
3
Bisakah Anda nyatakan mengapa ini berguna dalam jawaban Anda?
Jivings