• Авторизация


О модуле b43, и настройка его в ядре 2.6.26 на Dell Inspiron 1501 в частности. 18-04-2009 18:05 к комментариям - к полной версии - понравилось!


Оригинал сообщения
Комментарии: [показать]
Совсем недавно вышло ядро 2.6.26. В нем множество различных изменений, например memtest теперь в ядре. И может заблокировать использование битых ячеек вашей памяти. Но безусловно - решение это временное, так как работать на битой памяти даже с memtest - опасно. Очень часто так бывает что с течением времени кол-во ошибок увеличивается, или меняется их адрес. Также в ошибках может быть виновата не память, а интерфейс. Или контроллер, который например у процессоров AMD - встроенный.

Но, собственно, тема не об этом. Меня в новом ядре интересовал модуль b43, так как я имею ноутбук Dell 1501, у которого встроенная WiFi карта - от Broadcom (BCM94311MCG rev 01). До выхода ядра 2.6.25, я использовал утилиту-модуль ndiswrapper, которая брала firmware из 4-ой версии проприетарных драйверов. Версию под Linux который, товарищи из Broadcom, так и не удосужились написать. Утилита ndiswrapper не баловала своей стабильностью, скоростью и загрузкой процессора. Но в целом она меня устраивала. Модуль ядра bcm43xx использовать я не стал, так как даже найти проприетарную 3-ю версию драйверов для меня было проблемой. И более того - я не уверен что она существует для моей железки.

Начиная с выхода ядра 2.6.25, я стал использовать для беспроводной сети модуль b43. Он встроен в ядро. Так как мой linux дистрибутив - Mandriva 2008.1 x86-64, имел родное ядро 2.6.24, в нем были сделаны GUI для простой установки только через ndiswrapper и bcm43xx.

Это кстати неплохая отличительая черта Mandriva’ы от многих других дистрибутивов - почти ко всему там есть GUI’я, пускай и не всегда охватывающая полностью все возможности.

В связи с отсутствием GUI для настройки модуля b43, пришлось обратится к сайту wireless.kernel.org. На котором также находились firmware-cutter(утилиты для выковыривания firmware) для различных версий модуля b43. Собственно сама firmware находится там же. Список поддерживаемого оборудования на сайте есть даже по vendor’ам(производителям). Но там, как я понял, не полный список - к примеру моего BCM94311 там нет, но он прекрасно работает.

Для модуля b43 заявлена поддержка следующих технологий:


  • Режим станции

  • Ячеистый режим

  • Режим точки доступа

  • Децентрализованный Ad-Hoc режим

  • Режим снифера и наблюдения.

  • Режим наблюдения при работе и множественного наблюдения.

  • Аппаратное (де-)шифрование трафика.

  • Управление сигнальными светодиодами.

  • Аппаратная фильтрация MAC-адресов.

  • Инжекция пакетов (с radiotap; без FCS(Frame Check Sequece) injection)

  • Что-то, о чем возможно забыли.


Изменений в этом модуле ядра 2.6.26 прилично. Но большинство из них просто исправляют ошибки, не добавляя новых функций. Таких как

  • Уменьшение интерференции.

  • Поддержка встроенного Bluetooth (большая часть кода написана, но не оттестирована)


Поддержки нового оборудования также нет(взято с wireless.kernel.org):

Поддерживаемое:

  • bcm4303 (802.11b-только, используя b43legacy)

  • bcm4306 (Rev. 2 использует b43legacy, Rev. 3 использует b43)

  • bcm4309 (только 2.4ГГц часть)

  • bcm4311 rev 1 / bcm4312

  • bcm4311 rev 2 / bcm4312 (необходимы патчи в 2.6.24)

  • bcm4312 (только 2.4ГГц часть)

  • bcm4318



Неподдерживаемое:


  • 802.11a часть из 4309 и 4312.

  • BCM 4310 - Это устройство имеет LP PHY(маломощное PHY - physical layer). Мы думаем что это связанно с его маломощностью. В любом случае, предыдущий код с этим чипом не работает. Методом обратного програмирования мы транслируем множество кода и в данный момент готовим спецификации для программистов.

  • BCM 4328/4329 - Эти устройства имеют N физ. частей. В проекте 802.11n нет поддержки ни одной этой особенности. Мы работаем над этим.


Но всеже кое-какие новшества появились - самые важные из них это

  • Добавлена поддежка QoS(Quality of Service - управление качеством услуг)

  • Добавлена поддержка HostFlags HI(high 16 bits)


Список изменений:

1.
b43: Fix possible MMIO access while device is down

This fixes a possible MMIO access while the device is still down
from a suspend cycle. MMIO accesses with the device powered down
may cause crashes on certain devices.

Если кратко, то исправлена проблема которая иногда вызывала крах при пробуждении ноутбука. Не знаю связано это с этой проблемой или нет, но мой ноутбук с ядром 2.6.25 иногда не просыпался не из Suspend-to-RAM, не из Suspend-to-Disk. И эта проблема пропала в 2.6.26.



2.
b43: Do not return TX_BUSY from op_tx

Never return TX_BUSY from op_tx. It doesn't make sense to return
TX_BUSY, if we can not transmit the packet.
Drop the packet and return TX_OK.
This will fix the resume hang.

Эта исправление тоже связано с зависанием после пробуждения.

3.
b43: Fix noise calculation WARN_ON

This removes a WARN_ON that is responsible for the following koops:
http://www.kerneloops.org/searchweek.php?search=b43_generate_noise_sample

The comment in the patch describes why it's safe to simply remove
the check.

Это изменение просто убирает Warn_On в процедуре b43_generate_noise

4.
b43: Fix possible NULL pointer dereference in DMA code

This fixes a possible NULL pointer dereference in an error path of the
DMA allocation error checking code. This is also necessary for a future
DMA API change that is on its way into the mainline kernel that adds
an additional dev parameter to dma_mapping_error().
This patch moves the whole struct b43_dmaring struct initialization
right before any DMA allocation operation.

Исправляет возможный нулевой указатель. Также, кроме исправления, появился задел для будущих изменений в DMA API по добавлению в

основную часть ядра дополнительных dev параметров в dma_mapping_error().

5.
b43: Fix controller restart crash

This fixes a kernel crash on rmmod, in the case where the controller
was restarted before doing the rmmod.

Это исправляет крах ядра при rmmod, в случае когда контроллер перезапускается до команды rmmod.

6.
b43: Fix some TX/RX locking issues

This fixes some TX/RX related locking issues.
With this patch applied, some of the PHY transmission errors are fixed.

Это исправляет некоторое TX/RX проблемы. С этим патчем некоторые ошибки связанные с PHY передачей были исправлены.

7.
b43: Workaround DMA quirks

Some mainboards/CPUs don't allow DMA masks bigger than a certain limit.
Some VIA crap^h^h^h^hdevices have an upper limit of 0xFFFFFFFF. So in this
case a 64-bit b43 device would always fail to acquire the mask.
Implement a workaround to fallback to lower DMA mask, as we can always
also support a lower mask.

Улучшение DMA, работа над причудами(?)

Некоторые платы/процессоры не позволяют устанавливать DMA маски выше некоторого лимита.

Некоторое дерьмо от VIA(имеются в виду устройства) имеет верхний предел 0xFFFFFFFF. Так, в этом случае 64-битное b43 устройство никогда не сможет получить маску.

Исправление делает возможность понижение маски в таком случае.

8.
b43: Workaround invalid bluetooth settings

This adds a workaround for invalid bluetooth SPROM settings
on ASUS PCI cards.
This will stop the microcode from poking with the BT GPIO line.
This fixes data transmission on this device, as the BT GPIO line
is used for something TX related on this device
(probably the power amplifier or the radio).
This also adds a modparam knob to help debugging this in the future,
as more devices with this bug may show up.

Судя по всему патч добавляет/исправляет работоспособность для карточек с bluetooth, в частности ASUS.

В changelog’е еще множество исправлений по модулю b43(он вообще - весьма большой файл - очень много исправлений и добавлений в 2.6.26 относительно 2.6.25 - ребята явно не сидят)

Я не совсем понял структуру Changelog’а, но выгядит так, что сначала идут списки заданий(?) от Торвальдса:
commit 1beee8dc8cf58e3f605bd7b34d7a39939be7d8d2
Merge: 9db8ee3... 3446b9d...
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date: Fri May 30 07:45:20 2008 -0700

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (26 commits)
llc: Fix double accounting of received packets
netfilter: nf_conntrack_expect: fix error path unwind in nf_conntrack_expect_init()
bluetooth: fix locking bug in the rfcomm socket cleanup handling
mac80211: fix alignment issue with compare_ether_addr()
mac80211: Fix for NULL pointer dereference in sta_info_get()
mac80211: fix a typo in ieee80211_handle_filtered_frame comment
rndis_wlan: add missing range check for power_output modparam
iwlwifi: fix rate scale TLC column selection bug
iwlwifi: fix exit from stay_in_table state
rndis_wlan: Make connections to TKIP PSK networks work
mac80211 : Fixes the status message for iwconfig
rt2x00: Use atomic interface iteration in irq context
rt2x00: Reset antenna RSSI after switch
rt2x00: Don't count retries as failure
rt2x00: Fix memleak in tx() path
mac80211: reorder channel and freq reporting in wext scan report
b43: Fix controller restart crash
mac80211: fix ieee80211_rx_bss_put/get imbalance
net/mac80211: always true conditionals
b43: Upload both beacon templates on initial load
...
commit d02aacff4467806ee56f147ac8eff6911d95811a
Merge: e270b51... 9edb74c...
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date: Thu Apr 24 08:40:34 2008 -0700

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (22 commits)
tun: Multicast handling in tun_chr_ioctl() needs proper locking.
[NET]: Fix heavy stack usage in seq_file output routines.
[AF_UNIX] Initialise UNIX sockets before general device initcalls
[RTNETLINK]: Fix bogus ASSERT_RTNL warning
iwlwifi: Fix built-in compilation of iwlcore (part 2)
tun: Fix minor race in TUNSETLINK ioctl handling.
ppp_generic: use stats from net_device structure
iwlwifi: Don't unlock priv->mutex if it isn't locked
wireless: rndis_wlan: modparam_workaround_interval is never below 0.
prism54: prism54_get_encode() test below 0 on unsigned index
mac80211: update mesh EID values
b43: Workaround DMA quirks
mac80211: fix use before check of Qdisc length
net/mac80211/rx.c: fix off-by-one
mac80211: Fix race between ieee80211_rx_bss_put and lookup routines.
ath5k: Fix radio identification on AR5424/2424
ssb: Fix all-ones boardflags
b43: Add more btcoexist workarounds
b43: Fix HostFlags data types
b43: Workaround invalid bluetooth settings

...

А затем исправления, к примеру:
commit a259d6a45b915e00e8c6085e35fea7b61e3008a8
Author: Michael Buesch <mb@bu3sch.de>
Date: Fri Apr 18 21:06:37 2008 +0200

b43: Fix HostFlags data types

The HostFlags are a bitmask of 48bit. So we must use an u64 datatype
to hold all bits.

Signed-off-by: Michael Buesch <mb@bu3sch.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

Но перейдем дальше - к конфигурированию ядра. Так как у меня ноутбук и железки не сильно варьируются, я отключил всякие RAID контроллеры, звуковые карты кроме своей,

другие Wireless контроллеры и т.д. Для того чтобы не было проблем с модулем b43, надо отключить модуль CONFIG_WLAN_PRE80211.

Обладатели ноутбуков Dell 1501 могут скачать мой конфиг ядра.

Далее после компиляции ядра, настраиваем модуль b43.

Для настройки b43 используем b43-fwcutter 011 версии.

Скачаем, развернем b43-fwcutter из тарболла и соберем его следующими командами:
wget http://bu3sch.de/b43/fwcutter/b43-fwcutter-011.tar.bz2
tar xjf b43-fwcutter-011.tar.bz2
cd b43-fwcutter-011
make

cd ..

Следующим этапом будем использовать 4.150.10.5 версию проприетарного драйвера Broadcom.

Скачаем и развернем прошивку из этого архива следующими командами:
export FIRMWARE_INSTALL_DIR="/lib/firmware"
wget http://mirror2.openwrt.org/sources/broadcom-wl-4.150.10.5.tar.bz2
tar xjf broadcom-wl-4.150.10.5.tar.bz2
cd broadcom-wl-4.150.10.5/driver

sudo ../../b43-fwcutter-011/b43-fwcutter -w "$FIRMWARE_INSTALL_DIR" wl_apsta_mimo.o

Где FIRMWARE_INTSALL_DIR - место куда будет развернута прошивка. Для Mandriva’ы это - /lib/firmware. Для других дистрибутивов возможны другие варианты.

Перед запуском необходимо убрать другие модули которые могут работать с данным чипом. Это ndiswrapper и bcm43xx. Их неободимо добавить в blacklist. Например создав файл в папке /etc/modprobe.d с именем ndiswrapper и со следующим содержимым(для Mandriva’ы):
blacklist bcm43xx

blacklist ndiswrapper

После чего либо перезагрузить компьютер, либо убрать эти модули командами:

rmmod bcm43xx

rmmod ndiswrapper

Теперь все готово для запуска модуля.

Запускаем его командой:
modprobe b43



После чего командой iwconfig смотрим, появился ли WiFi интерфейс.

В моем случае это выглядило так:

lo no wireless extensions.



eth0 no wireless extensions.



wmaster0 no wireless extensions.



wlan0 IEEE 802.11 ESSID:”Dinyasoft WiFi Zone”

Mode:Managed Frequency:2.412 GHz Access Point: 02:1B:11:E1:AE:00

Bit Rate=54 Mb/s Tx-Power=27 dBm

Retry min limit:7 RTS thr:off Fragment thr=2352 B

Encryption key:6162-6361-6263-6162-6361-6263-64 [2]

Link Quality=85/100 Signal level=-49 dBm Noise level=-71 dBm

Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0

Tx excessive retries:0 Invalid misc:0 Missed beacon:0

Отсюда видно, что в системе появился интерфейс wlan0. Далее через NetworkManager его настраиваем как обычный интерфейс. В ручную тоже возможно, но несколько сложнее, так как обычно еще необходимо настраивать Wireless mode, Wireless ESSID, Wireless Enc_key, Wireless WPA Driver.

Режимы работы, такие как мощность сигнала, частота, канал, качество связи можно смотреть/менять с помощю iwconfig.

Команда iwlist - поможет дать расширенную информацию по возможностям вашей карты.

Таким образом, при использовании Linux с версией ядра 2.6.26 и модуля b43 в частности, можно настроить Wireless-модуль bcm94311 стоящий в нуотбуке Dell Inspiron 1501/




Я сейчас нахожусь City
Мой настрой Unknown
Я слушаю Unknown
[показать]LIci WP - WordPress crossposting plugin
вверх^ к полной версии понравилось! в evernote


Вы сейчас не можете прокомментировать это сообщение.

Дневник О модуле b43, и настройка его в ядре 2.6.26 на Dell Inspiron 1501 в частности. | Dinyasoft - Всякое разное, местами несуразное. | Лента друзей Dinyasoft / Полная версия Добавить в друзья Страницы: раньше»