在orangepi-PC, ubuntu mini下使用usb wifi(rtl8188cu/rtl8192cu)


本文章針對orangepi-pc下的ubuntu,分兩部分,分別介紹在ubuntu14.04(trusty)mini下使用usb無線網卡的方式,以及怎樣在ubuntu15.10(wily)mini下正確安裝usb無線網卡的驅動

 

首先是在ubuntu 14.04下,它的udev本身支持firmware的讀取,之所以會無法加載rtl8192cu的firmware是因為orangepi-PC的ubuntu 14.04沒有提供firmware

我們需要做的只是從其他地方拷貝firmware到orangepi的/lib/firmware中即可,我是從筆記本上跑的ubuntu中拷貝的firmware

當網卡加載后,因為沒有界面,所以我們需要用命令行配置網卡,我使用的方法如下:

1. 更改/etc/network/interfaces,向其中添加如下內容(如果某部分已經存在則略過該部分):  

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0 iface eth0 inet dhcp # for wifi allow-hotplug wlan0 iface wlan0 inet dhcp wpa-driver wext wpa-conf /etc/wpa_supplicant.conf

2. 更改或創建/etc/wpa_supplicant.conf,下面是一個例子:

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0 ap_scan=1 network={ ssid="example_server" psk="example_password" }

重新拔插usb無線網卡則應該在ifconfig中能夠看到wlan0以及其IP地址了

如果想配置其他網絡可以:

1. 修改/etc/wpa_supplicant.conf

2. sudo wpa_cli使用交互方式完成配置

 

對於ubuntu 15.10,linux內核3.8以后加入了在內核態加載firmware的支持,因此systemd在v217以后去除了用戶太加載firmware的支持

而orangepi到現在(2016年1月6日)仍然使用的是3.4.39內核,該內核不支持內核態加載firmware。而wily(ubuntu 15.10)使用的systemd是v225,不支持用戶態加載firmware,因此在orangepi+wily的情況下,firmware是無法加載的。

要解決這個問題,我們需要使用udev的rule文件調用外部程序加載firmware

我寫了這樣一個程序來加載firmware,代碼地址為:https://github.com/freason/orangepi_wily_firmware_loader.git

使用方法如下:

1. 修改: “/lib/udev/rules.d/50-firmware.rules”這個文件,把

  SUBSYSTEM=="firmware", ACTION=="add", ATTR{loading}="-1"

這一行換成:

  SUBSYSTEM=="firmware", ACTION=="add", RUN+="firmware $env{FIRMWARE} /sys/$env{DEVPATH}"

2. 用arm-gcc編譯firmware.c生成名為firmware的可執行文件,並把這個文件拷貝到orangepi的/lib/udev目錄下

  這里有兩種方式,一種是直接在orangepi下編譯,另外一種是使用arm-linux-gnueabi-gcc進行交叉編譯。我使用的第二種方式,github上提供了我編譯的版本

3. 拷貝firmware到orangepi的/lib/firmware下,orangepi wily沒有提供firmware所以我們必須手動從其他地方拷貝firmware過來,我是從pc的UBUNTU上拷貝過來的

firmware.c工作的原理:

插入usb wifi后,rtl8192cu的驅動會請求firmware,這時內核會創建兩個文件loading和data。其中loading為加載的狀態,1為正在加載,0為加載完成,-1為錯誤,我們向loading文件里寫入這三個字符串即可通知內核相應的消息。data為數據緩沖,我們將firmware數據寫入該文件,內核會從這個文件中讀取firmware數據。

注意:寫loading這個文件不能使用bash中的echo+重定向,我試過,沒成功。我沒有仔細研讀fopen的代碼,但firmware.c中打開文件時使用的模式為"we",其中e表示O_CLOEXEC,參見http://linux.die.net/man/3/fopen,不知bash下有什么命令能起到這個模式的作用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM