LINUX.ORG.RU

Установка драйвера carl9170 для Wi-Fi адаптера TP-Link


0

0

Здравствуйте! С целью создания софтовой точки доступа на базе Ubuntu приобрел USB Wi-Fi адаптер TP-Link TL-WN821N v.2, проверил дополнительно по VID/PID - внутри, как и предполагалось, Atheros 9170... Далее прошел на http://wireless.kernel.org/en/users/Drivers/carl9170 насколько я понял это единственный драйвер для моего устройства, который умеет работать в режиме AP...

Но я никак не могу понять как его поставить... Ставил из репозиториев Ubunt'ы (стоит Server 10.04) wireless-compat, устройство определилось, но драйверов carl9170usb там нет, только старые ar9170... Скачал исходники самые свежие, запустил скрипт driver-select, carl9170 нет, хотя в списке драйверов на сайте он присутствует...

Пошел обратно на страничку драйвера, скачал бинарник прошивки и скинул его /lib/firmwares, как скомпилировать сам драйвер - не понимаю...

Насколько я понял из написанного, все лежит тут: http://www.kernel.org/pub/linux/kernel/people/chr/carl9170/ Но что с этим делать? В директории последней версии /drv/1.8.8.1 лежит только .diff (патч насколько я понимаю), куда и как его применять ни слова...

Скачал /1.0.5.3/carl9170-1.0.5.3.tar.bz2, там исходники и даже Readme... Попытался собрать драйвер, как и сказано командой Код: make -f Makefile , в ответ сообщение о том, что собирать нечего (нет целей), Makefile практически пустой...

Помогите пожалуйста разобраться как все-таки это поставить... Гугл молчит :(

А ядро какое

А то в ридми написано

SYSTEM REQUIREMENTS & SOFTWARE PREREQUISITES

wireless-testing kernel 2.6.34-rc3-wl+

hostapd 0.7.1+ fresh from git (only necessary for AP-Mode)

gcc 4.4+, cmake 2.8.0+, (libusb 1.0+, SDL 1.2.13+ for carlu)

kraftello ★★★★★ ()

А я вот заказал эту свистульку в магазине, жду-недождусь пока придёт... Буду на арче делать точку доступа.

kraftello: ;-)

leonder ()

выполни

patch -p1 < carl9170-driver-1.8.8.1.diff

в каталоге с распакованным compat-wireless, потом

./scripts/driver-select ath

и

CONFIG_CARL9170=m make

для того что бы модуль собрался на linux 2.6.32 надо немного поправить исходники (в main.c переписать код в функции carl9170_op_prepare_multicast из ar9170/main.c ar9170_op_prepare_multicast, и добавить в carl9170.h определение list_for_each_entry_continue_rcu из rculist.h для ядер >= 2.6.32)

inoremap ★★ ()

Снова здравствуйте! Итак, по-порядку...

1. Скачал http://wireless.kernel.org/download/compat-wireless-2.6/compat-wireless-2.6.t...

2. Распаковал...

3. В эту же директорию закачал carl9170-driver-1.8.8.1.diff...

4. Патчу: sudo patch -p1 < carl9170-driver-1.8.8.1.diff В ответ все файлы патчатся корректно, кроме одного:

patching file MAINTAINERS
Hunk #1 FAILED at 1120.
1 out of 1 hunk FAILED -- saving rejects to file MAINTAINERS.rej
Удалил директорию с compat, повторил пункт 2, попробовал версию патча 1.8.8 В ответ:
patching file MAINTAINERS
Hunk #1 FAILED at 1108.
1 out of 1 hunk FAILED -- saving rejects to file MAINTAINERS.rej
По той же схеме, вновь 1.8.8.1 и продолжаю...

5. sudo ./scripts/driver-select ath

6. В корне compat-wireless, дописываю в config.mk, за блоком

ifndef CONFIG_COMPAT_KERNEL_28
CONFIG_AR9170_USB=m
CONFIG_AR9170_LEDS=y
endif #CONFIG_COMPAT_KERNEL_28

CONFIG_CARL9170=m

7. В carl9170/main.c убираю функцию carl9170_op_prepare_multicast Взамен, переношу целиком функцию из ar9170/main.c, меняю название обоих вариантов функции с ar9170* на carl9170:

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
static u64 carl9170_op_prepare_multicast(struct ieee80211_hw *hw,
                                       struct netdev_hw_addr_list *mc_list)
#else
static u64 carl9170_op_prepare_multicast(struct ieee80211_hw *hw, int mc_count,
                                       struct dev_addr_list *ha)
#endif
{
        u64 mchash;
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
        struct netdev_hw_addr *ha;
#else
        int i;
#endif

        /* always get broadcast frames */
        mchash = 1ULL << (0xff >> 2);

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
        netdev_hw_addr_list_for_each(ha, mc_list)
                mchash |= 1ULL << (ha->addr[5] >> 2)

#else
        for (i = 0; i < mc_count; i++) {
                if (WARN_ON(!ha))
                        break;
                mchash |= 1ULL << (ha->dmi_addr[5] >> 2);
                ha = ha->next;
        }
#endif

        return mchash;
} 

8. Ухожу в /usr/src/linux-headers-2.6.32-24-generic/include/linux и копирую из rculist.h следующее в carl9170.h:

#define list_for_each_continue_rcu(pos, head) \
        for ((pos) = rcu_dereference((pos)->next); \
                prefetch((pos)->next), (pos) != (head); \
                (pos) = rcu_dereference((pos)->next))

Определения list_for_each_entry_continue_rcu я там не нашел...

9. Ухожу в корень compat-wireless sudo make

В ответ:

/home/alex/compat-wireless-2010-09-12/drivers/net/wireless/ath/carl9170/mac.c: In function ‘carl9170_update_beacon’:
/home/alex/compat-wireless-2010-09-12/drivers/net/wireless/ath/carl9170/mac.c:472: error: implicit declaration of function ‘list_for_each_entry_continue_rcu’
/home/alex/compat-wireless-2010-09-12/drivers/net/wireless/ath/carl9170/mac.c:472: error: ‘list’ undeclared (first use in this function)
/home/alex/compat-wireless-2010-09-12/drivers/net/wireless/ath/carl9170/mac.c:472: error: (Each undeclared identifier is reported only once
/home/alex/compat-wireless-2010-09-12/drivers/net/wireless/ath/carl9170/mac.c:472: error: for each function it appears in.)
/home/alex/compat-wireless-2010-09-12/drivers/net/wireless/ath/carl9170/mac.c:472: error: expected ‘;’ before ‘{’ token
/home/alex/compat-wireless-2010-09-12/drivers/net/wireless/ath/carl9170/mac.c:482: warning: label ‘found’ defined but not used
make[5]: *** [/home/alex/compat-wireless-2010-09-12/drivers/net/wireless/ath/carl9170/mac.o] Ошибка 1
make[4]: *** [/home/alex/compat-wireless-2010-09-12/drivers/net/wireless/ath/carl9170] Ошибка 2 
make[3]: *** [/home/alex/compat-wireless-2010-09-12/drivers/net/wireless/ath] Ошибка 2
make[2]: *** [/home/alex/compat-wireless-2010-09-12/drivers/net/wireless] Ошибка 2
make[1]: *** [_module_/home/alex/compat-wireless-2010-09-12] Ошибка 2
make[1]: Выход из каталога `/usr/src/linux-headers-2.6.32-24-generic'
make: *** [modules] Ошибка 2
Пробовал define list_for_each_continue_rcu переименовывать в list_for_each_entry_continue_rcu, вовсе удалять... Одна и та же ошибка...

Помогите пожалуйста!

Gamber ()
Ответ на: комментарий от Gamber

list_for_each_entry_continue_rcu надо скопировать из rculist.h для ядер >= 2.6.34, про 2.6.32 была опечатка

еще можно поставить ядро от маверика, с ним carl9170 собирается без правок

inoremap ★★ ()

Пробовал и вовсе list_for_each_entry_continue_rcu не копировать все равно ошибки...

Сейчас попробую ядро обновить...

Насколько я понимаю ядро можно не собирать, а стянуть готовое отсюда? http://kernel.ubuntu.com/~kernel-ppa/mainline/v2.6.35-maverick/

Gamber ()
Ответ на: комментарий от Gamber

> Насколько я понимаю ядро можно не собирать, а стянуть готовое отсюда?

я ставил из обычного репозитория для маверика, дописав временно

deb http://ru.archive.ubuntu.com/ubuntu/ maverick main

в /etc/apt/sources.list

достаточно трех пакетов linux-headers-2.6.35-22 linux-headers-2.6.35-22-generic и linux-image-2.6.35-22-generic

inoremap ★★ ()

Так, вроде бы что-то вышло...

Обновил ядро, как вы сказали, перезагрузился..

Далее шаги 1-6 (с той же ошибкой на шаге 4)...

Потом в корне compat-wireless make make install make unload

В /lib/firmware закинул carl1970-1.fw

Перезагрузился... iwconfig кажет следующее:

 wlan0 IEEE 802.11bgn ESSID:off/any Mode:Managed Access Point: Not-Associated Tx-Power=20 dBm Retry long limit:7 RTS thr:off Fragment thr:off Power Management:off 
Вроде бы 'n' появилась... Но при попытке перевести wlan0 в Master:
 Error for wireless request "Set Mode" (8B06) : SET failed on device wlan0 ; Invalid argument. 
В Ad-hoc, Monitor и Managed работает... Как все-таки понять, встал драйвер или нет?

Gamber ()
Ответ на: комментарий от inoremap
lrwxrwxrwx 1 root root 0 2010-09-18 00:32 /sys/class/net/wlan0/device/driver -> ../../../../../../bus/usb/drivers/ar9170usb

Видимо не встал...

Gamber ()
Ответ на: комментарий от inoremap

Ага тож подумал про это, ралинк научил :)

Завелся hostapd, точка обнаружилась, правда в g режиме ('n' я так понимаю hostapd не умеет?) и индикатор на адаптере не живой...

Gamber ()
Ответ на: комментарий от Gamber

параметры

ieee80211n=1

ht_capab=[HT40+][SHORT-GI-40][DSSS_CCK-40]

в /etc/hostapd/hostapd.conf должны включить n-режим

inoremap ★★ ()
Ответ на: комментарий от inoremap

Работает или певрое или второе...

Первое показывает n режим, но 11Мбит/сек Второе вообще переводит точку в b режим, тоже 11Мбит/сек

Одновременное применение параметров дает следующее:

Configuration file: /etc/hostapd/hostapd.conf
Opening raw packet socket for ifindex 10362868
BSS count 1, BSSID mask ff:ff:ff:ff:ff:ff (0 bits)
SIOCGIWRANGE: WE(compiled)=22 WE(source)=21 enc_capa=0xf
nl80211: Added 802.11b mode based on 802.11g information
Allowed channel: mode=1 chan=1 freq=2412 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=2 freq=2417 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=3 freq=2422 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=4 freq=2427 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=5 freq=2432 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=6 freq=2437 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=7 freq=2442 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=8 freq=2447 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=9 freq=2452 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=10 freq=2457 MHz max_tx_power=20 dBm
Allowed channel: mode=1 chan=11 freq=2462 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=1 freq=2412 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=2 freq=2417 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=3 freq=2422 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=4 freq=2427 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=5 freq=2432 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=6 freq=2437 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=7 freq=2442 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=8 freq=2447 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=9 freq=2452 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=10 freq=2457 MHz max_tx_power=20 dBm
Allowed channel: mode=0 chan=11 freq=2462 MHz max_tx_power=20 dBm
HT40: control channel: 1  secondary channel: 5
Driver does not support configured HT capability [HT40*]
Could not select hw_mode and channel. (-1)
wlan0: Unable to setup interface.

Да Бог с ним с 'n', я пока по воздуху и по g соедениться не могу... Точка видна, подключение к ней происходит, но сама точка не пингуется...

Gamber ()
Ответ на: комментарий от Gamber

со следующими конфигурационными файлами у меня hostapd нормально поднимает точку доступа в 11n режиме

/etc/hostapd/hostapd.conf

interface=wlan1
driver=nl80211

ssid=mywlan
country_code=RU
hw_mode=g
channel=1
ieee80211n=1
ht_capab=[HT40+][SHORT-GI-40][DSSS_CCK-40]

macaddr_acl=0

wpa=2
wpa_key_mgmt=WPA-PSK

wpa_passphrase=12345678
wpa_pairwise=CCMP
/etc/dhcp3/dhcpd.conf
ddns-update-style none;
option domain-name "test.mylan";
option domain-name-servers 192.168.7.1;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.70.0 netmask 255.255.255.0 {
    range 192.168.70.100 192.168.70.200;
    option routers 192.168.70.1;
}
/etc/network/interfaces
auto lo
iface lo inet loopback

iface wlan1 inet static
	address 192.168.70.1
	netmask 255.255.255.0
	gateway 192.168.70.1
после добавления wlan1 в /etc/network/interfaces надо перезапустить network-manager, сбросить wlan1 командами ifdown wlan1; ifup wlan1 запустить hostapd и dhcp3-server

inoremap ★★ ()
Ответ на: комментарий от inoremap

OK. Завтра попробую ваши конфиги...

На всякий случай у меня hostapd 0.6.9, может версия виновата?

Блин уже 3 часа ночи *падает лицом в клавиатуру*

Gamber ()
Ответ на: комментарий от inoremap

Вообщем скачал я исходники hostapd 0.7.3, собрал их с поддержкой 'n'...

Но установка hostapd, не раскидывает приложение по директориям, в /etc/defaults тоже ничего нет, нет и автозапуска...

Скинул hostapd.conf в /etc/hostapd/ Запускаю из консоли

hostapd /etc/hostapd/hostapd.conf
Работает...

Но автозапуск сделать не получается, скинул исполняемый файл hostapd в /usr/bin

В rc.local прописал

/etc/init.d/dhcp3-server restart
/usr/bin/hostapd -B /etc/hostapd/hostapd.conf
exit 0
Ни dhcp, ни hostapd не стартуют, только вручную из консоли... Подскажите пожалуйста, что я не так делаю?

Вот мои конфиги (немного отличаются от ваших, ввиду наличия моста): hostapd.conf

interface=wlan0
driver=nl80211
bridge=br0

ssid=mywlan
country_code=RU
hw_mode=g
channel=1
ieee80211n=1
ht_capab=[HT40+][SHORT-GI-40][DSSS_CCK-40]

macaddr_acl=0

wpa=2
wpa_key_mgmt=WPA-PSK

wpa_passphrase=12345678
wpa_pairwise=CCMP

interfaces

auto lo
iface lo inet loopback

auto eth1
iface eth1 inet static
	address 172.16.84.98
	netmask 255.255.255.252
	gateway	172.16.84.97

auto wlan0
iface wlan0 inet manual
	up ifconfig $IFACE 0.0.0.0 up
	up ip link set $IFACE promisc on
	down ip link set $IFACE promisc off
	down ifconfig $IFACE down

auto eth0
iface eth0 inet manual
	up ifconfig $IFACE 0.0.0.0 up
	up ip link set $IFACE promisc on
	down ip link set $IFACE promisc off
	down ifconfig $IFACE down

auto br0
iface br0 inet static
	address 192.168.1.250
	network 192.168.1.0
	netmask 255.255.255.0
	broadcast 192.168.1.255
	bridge-ports wlan0 eth0

dhcpd.conf

ddns-update-style none;
option domain-name "atlantida.local";
option domain-name-servers 80.247.97.23;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.100 192.168.1.200;
    option routers 192.168.1.250;
}

Gamber ()
Ответ на: комментарий от Gamber

My configuration looks like this:

(I removed the automatic start of hostapd and dhcp3-server from the runlevel rc2.d)

auto wlanap

allow-hotplug wlanap


iface wlanap inet static


address 10.0.128.1


netmask 255.0.0.0.0


gateway 10.0.128.2


dns-nameservers 10.0.128.2


pre-up /etc/init.d/hostapd start


pre-up sleep 10;


^^ for HT40 hostapd does a extended scan to check if there's
another HT40 AP on the same primary channel.

pre-up /etc/init.d/dhcp3-server start

pre-down /etc/init.d/hostapd stop


pre-down /etc/init.d/dhcp3-server stop



With this configuration you can easily remove & replug the stick and
the userspace will automatically restore the connection on its own.

anonymous ()

Снова здравствуйте! Вообщем как выяснилось у мостов есть свои заморочки...

Пока сделал конфиг как предложил inoremap...

Предварительно поставил hostapd 0.6.9 из apt, и затем заменил файлы hostapd и hostapd_cli в /usr/sbin и /usr/local/bin версией 0.7.3, чтобы иметь возможность запуска через демон, все OK все работает, dhcp корректно стартует...

Но я обнаружил одну серъезную проблему, при попытке скачать что-то крупное на высокой скорости (например, фильм по p2p провайдера), точка доступа отваливается...

inoremap, у Вас такое было?

Gamber ()
Ответ на: комментарий от inoremap

Сейчас был на странице http://wireless.kernel.org/en/users/Drivers/carl9170

В разделе «code» изменения... Как я понял, теперь скачать можно только прошивку... Сам драйвер включен в некое ядро wireless-testing...

Подскажите пожалуйста... Можно ли установить данное ядро по следующей схеме: http://open80211s.org/trac/wiki/Ubuntu

Gamber ()
Ответ на: комментарий от inoremap

P/S Удлинитель не использую, донгл подключен напрямую в порт МП... По конфигу wireless-testing - mesh мне нужен?

Gamber ()
Ответ на: комментарий от inoremap

OK... Сейчас докачаю 10.10 и буду пробовать все по новой...

Gamber ()
Ответ на: комментарий от Gamber

Вообщем скомпилил я вчера самое свежее ядро wireless-testing, с параметрами текущего ядра + включил в конфигурации поддержку carl9170...

Ситуация повторяется...

Около минуты стабильной закачки по p2p на скорости около 2 МБ/сек, точка (hostapd) отваливается, ubunta виснет намертво...

Мдааа...

Gamber ()
Ответ на: комментарий от Gamber

Вообщем ситуация прояснилась... С вероятность 99,9 чудит USB контроллер МП...

Проверил работу данной конструкции на другой машине (P55), все заработало отлично, никаких сбоев...

На ION опять начинаются приключения... Сбой гарантированно происходит, если контроллер работает в режиме 2.0, в 1.1 - все стабильно, но скорость ~8.5 Мбит/сек...

BIOS свежий, драйвера для чипсета есть только для Ubuntu и те старая бэта (сейчас стоит openSUSE 11.3)...

Собственно для меня ситуация не критична, но кому нужны высокие скорости по воздуху, имейте ввиду...

МП: ZOTAC Synergy E-E

Gamber ()

Испытываю очень сильное затруднение в установке драйвера carl9170. Подробности позже, в другой день, устал уже с ним воевать на сегодня. Ни в какую не собирается, пока затык на этом: http://pastebin.com/igZ0EGyP

leonder ()

Ура!!!

Большое спасибо отписавшимся в этой теме, гуглу и особенно автору этого: http://permalink.gmane.org/gmane.linux.kernel.wireless.general/56778

Скачал там по ссылке архив, сделал как положено модуль, установил, скопировал конфиг hostapd, приведенный здесь и получил счастье. До этого мучился много раз, пытаясь собрать то ядро, то модули разных версий - ни в какую.

leonder ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.