⌨ Labor omnia vincit ☮

OpenBSD – wireless adapters

Posted in OpenBSD by anaumov on 12.03.2014

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

Но в начале хотелось бы сказать пару слов о проекте в целом. OpenBSD это не просто еще одна Free Software ОС, это проект со своей, очень специфичной (или даже консервативной) культурой. Цели проекта во многом противоположны целям, которые ставит, к примеру, Canonical для своей Ubuntu. Тут никто не говорит, что эта система как раз именно то, что вам нужно, и что она полностью будет удовлетворять вашим потребностям и т.д. Скорее даже наоборот😉

Я не сисадмин. Я работаю системным программистом. Проект меня привлекает исключительно как набор правил для написания software. С, хотя его описание и занимает всего пару сотен страниц, достаточно сложный язык (а точнее – сложным является его граммотное использование). На работе мне приходится писать на нем сервера для клиентов. Требовния к безопасности достаточно высокие. Именно поэтому этот проект интересен для меня.

Но речь сегодня пойдет не о правилах написания безопасных программ на C, а о поддержке wireless чипов. Я надеюсь, что, даже если вы не используете эту ОС, просто бегло просмотрев выводы команд, согласитесь, что в использовании этой ОС нет ничего сложного. Возможно кто-то найдет тут ответы на вопросы по поводу настройки своего wireless чипа.

Intel PRO/Wireless 2200BG IEEE 802.11a/b/g

Итак, работать я буду со стереньким fujitsu siemens amilo m7424. Этому ноутбуку уже наверное лет 10. У него на борту wireless чип Intel PRO/Wireless 2200BG и ethernet Realtek 8139. Последний без проблем определяется и работает, а вот для wireless нам понадобится доустановить firmware. Какой именно и где его найти? И откуда я узнал, что на борту именно эти два чипа? В OpenBSD для этого есть утилита pcidump(8).

# pcidump           
Domain /dev/pci0:
 0:0:0: Intel 82855PM Host
 0:1:0: Intel 82855PM AGP
 0:29:0: Intel 82801DB USB
 0:29:1: Intel 82801DB USB
 0:29:2: Intel 82801DB USB
 0:29:7: Intel 82801DB USB
 0:30:0: Intel 82801BAM Hub-to-PCI
 0:31:0: Intel 82801DBM LPC
 0:31:1: Intel 82801DBM IDE
 0:31:3: Intel 82801DB SMBus
 0:31:5: Intel 82801DB AC97
 0:31:6: Intel 82801DB Modem
 1:0:0: ATI Radeon Mobility M10
 2:9:0: TI TSB43AB22 FireWire
 2:10:0: Realtek 8139
 2:11:0: O2 Micro OZ711M1 CardBus
 2:11:1: O2 Micro OZ711M1 CardBus
 2:11:2: O2 Micro OZ711Mx Misc
 2:13:0: Intel PRO/Wireless 2200BG

В проверке на наличие ошибок поможет dmesg(8). Сразу после установки у меня один error:

> dmesg | grep error
iwi0: error 2, could not read firmware iwi-bss

Сейчас мне просто важно, связанна ли эта ошибка с wireless или нет. Если ifconfig(8) находит интерфейс iwi0, значит да – необходимо доустановить firmware (ifconfig тут даже не обязательно вызывать, т.к. причина проблемы и так понятна из сообщения dmesg). Как найти необходимый firmware? Разобраться в этом нам поможет старая добрая команда man(0). Ее вызов с ключем -k, как вы помните, показывает все, что попадает под критерий того или иного запроса (в принципе, для этого можно воспользоваться и командой apropos(1)). В нашем случае:

> man -k iwi
iwi (4) - Intel PRO/Wireless 2200BG/2225BG/2915ABG IEEE 802.11a/b/g wireless network device

Заглядываем в man 4 iwi. Первое, что бросается в глаза:

The iwi driver provides support for Intel PRO/Wireless 2200BG/2915ABG Mini PCI and 2225BG PCI network adapters.

Звучит здророво🙂
Читаем дальше, в разделе FILES:

The driver needs at least version 3.1 of the following firmware files, which are loaded when an interface is brought up:

/etc/firmware/iwi-bss
/etc/firmware/iwi-ibss
/etc/firmware/iwi-monitor

These firmware files are not free because Intel refuses to grant distribution rights without contractual obligations. As a result, even though OpenBSD includes the driver, the firmware files cannot be included and users have to download these files on their own.

Первый файл в этом списке очень похож на то, о чем нам сообщил dmesg. Стало быть, установка этого пакета (он содержит файл iwi-bss) решит нашу проблему. Но как установить этот пакет? Читаем дальше:

A prepackaged version of the firmware can be installed using fw_update(1)

Т.е. для установки firmware, в OpenBSD существует специальная утилита fw_update(1).
Ей даже можно не говорить какой именно firmware нам нужен. Просто запускаем, и она тянет нужный нам пакет:

# fw_update -v
fw_update: Installing firmware files: iwi-firmware.
iwi-firmware-3.1p1: ok

# pkg_info -L iwi-firmware
Information for inst:iwi-firmware-3.1p1

Files:
/etc/firmware/iwi-bss
/etc/firmware/iwi-ibss
/etc/firmware/iwi-license
/etc/firmware/iwi-monitor

Все доступные для OpenBSD firmware можно найти на странице http://firmware.openbsd.org/firmware/.
После установки пакета надо перезагрузить сеть. Это делается при помощи запуска #sh /etc/netstart. Смотрим, видит ли он wifi-сети: ifconfig iwi0 scan | grep nwid. Прочтите dhclient(8) и hostname.if(5) для того, чтобы иметь представление как создать dhcp-запрос. Мой файл выглядит вот так:

# cat /etc/hostname.iwi0                                                                                                                   
nwid alex
wpakey admin123:)
dhcp

Как вы поняли, я подключаюсь к сети “alex” и использую пароль “admin123”. После выполнения команды dhclient iwi0 dhcp-сервер присваивает мне IP, а также сообщает имя шлюза и адреса DNS серверов.

# ifconfig iwi0                                                                                                                             
iwi0: flags=8843 mtu 1500                                                                           
        lladdr 00:00:00:00:00:00                                                                                                            
        priority: 4                                                                                                                         
        groups: wlan egress                                                                                                                 
        media: IEEE802.11 autoselect (OFDM36)                                                                                               
        status: active                                                                                                                      
        ieee80211: nwid alex chan 1 bssid 00:00:00:00:00:00 53dB wpakey 0x0 wpaprotos wpa1,wpa2
wpaakms psk wpaciphers tkip,ccmp wpagroupcipher tkip 100dBm                                                              
        inet6 ffff::ffff:ffff:ffff:ffff%iwi0 prefixlen 64 scopeid 0x2                                                                        
        inet 192.168.2.100 netmask 0xffffff00 broadcast 192.168.2.255

На тот случай, если у вас что-то не заработает, отсылаю к 6 главе FAQ (на русском).
Не забывайте о wpa_supplicant.

Пара слов о поддержке чипов

Как узнать какие чипы поддерживаются OpenBSD? Это наверное самый распространенный вопрос. Подробный список драйверов, в соответствующем разделе FAQ: http://www.openbsd.org/faq/faq6.html#wireless (смотрите оригинал страницы, несмотря на то, что есть русский перевод). Там же информация и о поддержке драйверами режима AP.
Возможно интересной также будет wiki-страница о поддержке wireless чипов свободными драйверами.

openbsd_802_11

Лично для меня бОльшей проблемой являлось определение названия и типа чипсета до покупки самого адаптера, нежели информации о поддерживаемых драйверах. Интернет-магазины далеко не всегда предоставляют информацию об используемых чипах, считая эту информцию слишком техничной. Тут поможет банальный сбор информации при помощи google. Вот, к примеру, информация о usb wifi-адаптере Atheros TL-WN822N (о его поддержке в GNU/Linux я писал тут). Мы видим, что там используются чипы AR7010 и AR9287, доступ к которым мы получаем через интерфейс USB 2.0, т.е. система будет использовать драйвер athn.

Еще один важный момент. Очень редко, но все же можно столкнуться с ситуацией, при которой теоретически поддерживаемое устройство не работает. При тестировании OpenBSD 5.3 (i386 и amd64) я столкнулся с проблемой в athn драйвере. Баг заключается в том, что firmware не может подхватить устройство.

/bsd: athn0 at uhub0 port 5 "ATHEROS USB WLAN" rev 2.00/2.02 addr 2
/bsd: athn0: failed loadfirmware of file athn-ar7010-11 (error 2)
/bsd: athn0: could not load firmware
...
...
...
pkg_add: Added athn-firmware-1.1p0
...
/bsd: athn0 at uhub0 port 5 "ATHEROS USB WLAN" rev 2.00/2.02 addr 2
/bsd: athn0: bad ROM checksum 0x2c64
/bsd: athn0: could not read ROM
/bsd: athn0: could not attach chip

Причина ясна, но как исправить баг или просто обойти проблему? Я не знаю.
Даже если вы нашли поддерживаемый в OpenBSD чип или usb-адаптер, не поленитесь спросить в рассылке об известных проблемах и поддержке.

В OpenBSD не используются блобы. Именно из-за этого механизм поддержки некоторых устройств усложняется. Драйвер, определяющий устройство, загружается автоматически (мы видим устройство через ifconfig), но о том, как именно работает устройство, драйвер не знает. Для этого устанавливается firmware, которое в последствии загружается на самом устройстве или чипе (имя файла firmware зашито в драйвер; изменение адреса/имени_файла приведет к тому, что драйвер не найдет firmare, и вы увидете соответствующее сообщение ядра (dmesg)). Именно оно и создает понятный для драйвера интерфейс. В этом случае на нашей машине (или правильней будет сказать – на нашем CPU) мы всегда работаем с 100% Open Source ядром, которе через драйвер общается с устройством или чипом, на CPU которого запущено установленное нами firmware.

stay stable…

Когда я задумывал этот пост, я хотел показать настройку и для чипа Intel WiFi-Link 5100, но в процессе написания передумал. Дело в том, что там ТОЧНО такие же команды. Вообще, это еще один из плюсов OpenBSD. Точно также в ней настраивалась WiFi-сеть и 10 лет назад. Да, количество поддерживаемых устройств выросло, но принцип настройки не изменился. Необходимые для этого операции (последовательность выполняемых команд) точно такиже же и для других версий OpenBSD и для других wireless чипов.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: