Xây dựng trình điều khiển không dây cho USB không dây Edimax: EW-7811UN


33

Tôi đã cố gắng bật và tắt trong nhiều ngày để xây dựng mô-đun cho thiết bị không dây USB của mình.

Nó là một Edimax EW-7811UN

Tôi đã tìm thấy một số tài nguyên về xây dựng mô-đun cho Debian, nhưng không có tài nguyên nào cho Arch. Hiện tại tôi đang cố gắng biên dịch chéo bằng ToolChain được tìm thấy trên Raspberry Pi GitHub . Đây là các bước tôi đã thực hiện:

  • Tải xuống các nguồn trình điều khiển từ trang web Edimax .
  • Đã tải xuống các nguồn kernel từ GitHub .
  • Đã tạo quy tắc tạo cụ thể (theo tài liệu Edimax) trong 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 là thư mục chứa các nguồn kernel.
  • MODDESTDIR là thư mục bạn muốn mô-đun kết thúc.
  • CROSS_COMPILElà chuỗi công cụ của tôi (đã được thêm vào PATH)

Lần thử đầu tiên makeđưa ra lỗi này:

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

Tôi thấy rằng đây là một tiêu đề lỗi thời và liên kết nó để smp.hkhắc phục vấn đề. Tuy nhiên, quá trình xây dựng vẫn thất bại với lỗi nguồn, trông như thế này:

error: field 'recv_tasklet' has incomplete type

Tôi đã biên dịch đủ để biết điều này trông như thể bản dựng không hỗ trợ phiên bản kernel mới nhất, nhưng nếu nó là như vậy thì nó đã được xây dựng cho Debian như thế nào?


Thông tin bổ sung:


Tôi có cùng một bộ chuyển đổi, mặc dù chưa có xung quanh để thử nó!
Shane Hudson

Xin vui lòng cho tôi biết làm thế nào bạn tiếp tục với nó và thêm kinh nghiệm của bạn sau đó, ngay cả khi nó tiêu cực.
Jivings

@Tomas, tiền thưởng nhiều hơn! Hãy chắc chắn rằng Alex không có được nó lần này :)
Jivings

Câu trả lời:


12

Hướng dẫn biên dịch chéo

  1. Tải xuống các nguồn trình điều khiển từ trang web Edimax .

  2. Nhân bản các nguồn kernel từ GitHub .

  3. cdvào nguồn kernel của bạn và cdvào include/linux. Chạy

    ln -s smp.h smp_lock.h`.
    
  4. unziptải về Edimax và tar -xzfgói trình điều khiển. cdvào driver/rtl...thư mục con.

  5. Chỉnh sửa include/rtw_xmit.hvà thêm vào #include <linux/interrupt.h>dưới bao gồm khác.

  6. Chỉnh sửa os_dep/osdep_service.cvà thêm

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

    dưới khác bao gồm.

  7. Chỉnh sửa Makefilethêm

    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
    

dưới các phần tương tự.

  1. Giả sử arm-bcm2708-linux-gnueabi-{gcc|ld}là trong con đường của bạn, chạy make CONFIG_PLATFORM_PI=y modules.

Các mô-đun nên được biên dịch.


Xây dựng thành công! Nhưng mô-đun được xây dựng ở đâu? Vì vậy, tôi có thể sao chép nó vào Pi.
Jivings

Các root của gói trình điều khiển tôi nghĩ.
Alex Chamberlain

1
Hừm, dường như ở đó. Kỳ dị. Điểm MODDESTDIRđó là gì?
Jivings

Không ý kiến!!!!!!!!!
Alex Chamberlain

Để có được điều này để xây dựng trên Raspberry Pi, tôi cũng phải liên kết symlink /lib/modules/3.1.9-30-ARCH+/buildthư mục với các nguồn kernel.
Jivings

-1

Hãy thử sao chép config.gz từ /proc/config.gz trên RPi của bạn. Sau đó gunzip nó và đổi tên thành .config và thực hiện như trên.


3
Bạn có thể nói tại sao điều này hữu ích trong câu trả lời của bạn?
Jivings
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.