WiFi
Настройка USB WIFI донгла на базе чипов Realtek RTL8188/RTL8192.
Бродя по конфигу ядра 3.9.11 заметил, что добавлена возможность сборки драйверов USB WiFi донглов на базе чипов Realtek, Railnk, Atheros и др. Собранное ядро увидело донгл на RTL8192, но со временем начало выдавать ошибку о невозможности загрузить firmware. Пришлось собирать драйвер отдельно. Итак, скачиваем с сайта Realtek архив с исходниками драйверов под нужный чип. В данном случае версию 4.0.2_9000 для RTL8192CU.
Распаковываем архив и правим Makefile. В нем необходимо указать следующие параметры:
- Путь к компилятору (обязательно к тому же, которым собирается ядро!)
- Путь к исходникам собираемого ядра
- Версию ядра
CROSS_COMPILE = /home/evodbg/compiler/gcc-linaro-arm-linux-gnueabi-2012.04-20120426_linux/bin/arm-linux-gnueabi- KVER = 3.9.11 KSRC = /home/evodbg/Projects/EV-iMX287/linux-3.9.11
Кроме того, необходимо закомментировать следующие строки в файле include/autoconf.h
/* * Debug Related Config */ //#define CONFIG_DEBUG_RTL871X #define DBG 0 // #define CONFIG_DEBUG_RTL819X // #define CONFIG_PROC_DEBUG 1 //#define DBG_IO //#define DBG_DELAY_OS //#define DBG_MEM_ALLOC //#define DBG_IOCTL //#define DBG_TX //#define DBG_XMIT_BUF //#define DBG_TX_DROP_FRAME //#define DBG_RX_DROP_FRAME //#define DBG_RX_SEQ //#define DBG_RX_SIGNAL_DISPLAY_PROCESSING //#define DBG_RX_SIGNAL_DISPLAY_SSID_MONITORED "jeff-ap" //#define DBG_EXPIRATION_CHK //#define DBG_SHOW_MCUFWDL_BEFORE_51_ENABLE //#define DBG_ROAMING_TEST //#define DBG_HAL_INIT_PROFILING // #define DBG_MEMORY_LEAK 1 // #define DBG_CONFIG_ERROR_DETECT //#define DBG_CONFIG_ERROR_RESET
Перед тем как собирать драйвер, запустите menuconfig ядра и убедитесь, что следующие опции включены:
Device Drivers ---> [*] Network device support --- Wireless LAN < > USB ZD1201 based Wireless device support <*> IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP) [*] Support downloading firmware images with Host AP driver [*] Support for non-volatile firmware download [ ] TI Wireless LAN support --->
Если они были отключены, включите их и пересоберите ядро. Теперь соберите driver WiFi командой make. В результате, в папке появится файл 8192cu.ko. Данный файл необходимо скопировать в файловую систему на плату. Загружается он командой:
insmod 8192cu.ko
В файловой системе должны быть собраны wireless-tools и если планируется подключаться к сети с шифрованием wpa_supplicant. Первым делом получим psk для беспроводной сети:
wpa_passphrase Имя_Сети Пароль_сети network={ ssid="Имя сети" #psk="Пароль сети" psk=5579c6f72de6f8eb9ffdf02c5ecf563765423bf1e39dd50f11d0220a6fc534ae }
Создадим файл /etc/wpa_supplicant.conf
vi /etc/wpa_supplicant.conf network={ ssid="Имя сети" key_mgmt=WPA-PSK group=TKIP CCMP pairwise=TKIP CCMP proto=WPA WPA2 psk=5579c6f72de6f8eb9ffdf02c5ecf563765423bf1e39dd50f11d0220a6fc534ae }
Подключаемся к сети:
insmod /home/8192.cu.ko ifconfig wlan0 up iwconfig wlan0 essid Имя_сети wpa_supplicant -B -Dwext -i wlan0 -c /etc/wpa_supplicant.conf iwconfig wlan0 ifconfig wlan0 192.168.0.188 up
3G modem Тестировалось с модемом Huawei E1550, оператор Укртелеком (Utel) В ядре должно быть включено:
Device Drivers ---> [*] USB support ---> <*> USB Modem (CDC ACM) support <*> USB Serial Converter support ---> [*] USB Generic Serial Driver <*> USB driver for GSM and CDMA modems [*] Network device support ---> <*> PPP (point-to-point protocol) support <*> PPP support for async serial ports
Подключаем USB модем.
[ 8.310164] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB0 [ 8.337921] option 1-1:1.1: GSM modem (1-port) converter detected [ 8.356780] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB1 [ 8.377814] option 1-1:1.2: GSM modem (1-port) converter detected [ 8.396730] usb 1-1: GSM modem (1-port) converter now attached to ttyUSB2
Запускаем wvdialconf
# wvdialconf Editing `/etc/wvdial.conf'. Scanning your serial ports for a modem. ttyUSB0<*1>: ATQ0 V1 E1 -- OK ttyUSB0<*1>: ATQ0 V1 E1 Z -- OK ttyUSB0<*1>: ATQ0 V1 E1 S0=0 -- OK ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 -- OK ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 -- OK ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK ttyUSB0<*1>: Modem Identifier: ATI -- Manufacturer: huawei ttyUSB0<*1>: Speed 9600: AT -- OK ttyUSB0<*1>: Max speed is 9600; that should be safe. ttyUSB0<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK ttyUSB1<*1>: ATQ0 V1 E1 -- failed with 2400 baud, next try: 9600 baud ttyUSB1<*1>: ATQ0 V1 E1 -- failed with 9600 baud, next try: 9600 baud ttyUSB1<*1>: ATQ0 V1 E1 -- and failed too at 115200, giving up. ttyUSB2<*1>: ATQ0 V1 E1 -- OK ttyUSB2<*1>: ATQ0 V1 E1 Z -- OK ttyUSB2<*1>: ATQ0 V1 E1 S0=0 -- OK ttyUSB2<*1>: ATQ0 V1 E1 S0=0 &C1 -- OK ttyUSB2<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 -- OK ttyUSB2<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK ttyUSB2<*1>: Modem Identifier: ATI -- Manufacturer: huawei ttyUSB2<*1>: Speed 9600: AT -- OK ttyUSB2<*1>: Max speed is 9600; that should be safe. ttyUSB2<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 -- OK Found a modem on /dev/ttyUSB0. Modem configuration written to /etc/wvdial.conf. ttyUSB0: Speed 9600; init "ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0" ttyUSB2: Speed 9600; init "ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0" #
Как видно из лога, модем определился на /dev/ttyUSB0. Утилита создала файл конфигурации /etc/wvdial.conf. Запускаем wvdial чтобы установить соединение:
# wvdial --> WvDial: Internet dialer version 1.61 --> Warning: section [Dialer Defaults] does not exist in wvdial.conf. --> Cannot open /dev/modem: No such file or directory --> Cannot open /dev/modem: No such file or directory --> Cannot open /dev/modem: No such file or directory #
К сожалению, дальше этого продвинуться не удалось. На Debian утилита wvdial прекрасно работала, но собранная в Buildroot работать отказывается.Поиск по форумам показал аналогичные проблемы у других. Разбираться особо не было времени, поэтому настроим модем с помощью pppd из того же Buildroot. Создаем файл /etc/ppp/options-mobile
Со следующим содержимым:
vi /etc/ppp/options-mobile /dev/ttyUSB0 921600 defaultroute usepeerdns crtscts lock noauth local persist modem nopcomp novjccomp nobsdcomp nodeflate noaccomp ipcp-accept-local ipcp-accept-remote noipdefault
Создаем сценарий диалога utel.chat
vi /etc/ppp/utel.chat ABORT 'BUSY' ABORT 'NO CARRIER' ABORT 'VOICE' ABORT 'NO DIALTONE' ABORT 'NO DIAL TONE' ABORT 'NO ANSWER' ABORT 'DELAYED' REPORT CONNECT TIMEOUT 6 '' 'ATQ0' 'OK-AT-OK' 'ATZ' TIMEOUT 3 'OK-AT-OK' 'ATI' 'OK' 'ATZ' 'OK' 'ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0' 'OK' 'AT\^SYSCFG=2,2,3fffffff,0,1' 'OK-AT-OK' 'AT+CGDCONT=1,"IP","3g.utel.ua"' 'OK' 'ATDT*99***1#' TIMEOUT 30 CONNECT
Запускаем демона протокола ppp:
pppd /dev/ttyUSB0 460800 modem connect "/usr/sbin/chat -v -f /etc/ppp/utel.chat" defaultroute nodetach ipcp-accept-remote novj mru 1500 mtu 1500 noipdefault usepeerdns user "" password "" &
Смотрим результат:
# pppd /dev/ttyUSB0 460800 modem connect "/usr/sbin/chat -v -f /etc/ppp/utel.cha t" defaultroute nodetach ipcp-accept-remote novj mru 1500 mtu 1500 noipdefault u sepeerdns user "" password "" & # chat: Jan 01 01:11:54 CONNECT Serial connection established. Using interface ppp0 Connect: ppp0 <--> /dev/ttyUSB0 Could not determine remote IP address: defaulting to 10.64.64.64 not replacing existing default route via 192.168.0.1 local IP address 46.203.26.33 remote IP address 10.64.64.64 primary DNS address 213.179.249.151 secondary DNS address 213.179.249.152 #
Запускаем ifconfig чтобы посмотреть текущие активные интерфейсы:
# ifconfig eth0 Link encap:Ethernet HWaddr 00:04:00:00:00:00 inet addr:192.168.0.102 Bcast:192.168.0.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:54 errors:0 dropped:0 overruns:0 frame:0 TX packets:26 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:7911 (7.7 KiB) TX bytes:0 (0.0 B) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) ppp0 Link encap:Point-to-Point Protocol inet addr:46.203.26.33 P-t-P:10.64.64.64 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:9 errors:0 dropped:0 overruns:0 frame:0 TX packets:10 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3 RX bytes:192 (192.0 B) TX bytes:183 (183.0 B) #
Примечание: при использовании модема SIM5320 заменяем ttyUSB0 на ttyUSB2.
Отключаем интерфейс eth0 (Ethernet)
ifconfig eth0 down
Пробуем пинговать ukr.net:
# ping ukr.net ping: bad address 'ukr.net'
Прописываем DNS и gateway:
# echo "nameserver 213.179.249.151" > /etc/resolv.conf # route add default gw 10.64.64.64 # ping ukr.net PING ukr.net (212.42.76.252): 56 data bytes 64 bytes from 212.42.76.252: seq=0 ttl=57 time=1415.330 ms 64 bytes from 212.42.76.252: seq=1 ttl=57 time=1023.645 ms 64 bytes from 212.42.76.252: seq=2 ttl=57 time=792.919 ms # ping google.com PING google.com (173.194.35.104): 56 data bytes 64 bytes from 173.194.35.104: seq=0 ttl=53 time=1113.641 ms 64 bytes from 173.194.35.104: seq=1 ttl=53 time=250.997 ms
Интернет через 3G модем настроен. Если зайти по адресу 46.203.26.33 можно увидеть нашу web страницу с графиками, описанную в предыдущей части статьи.