wi-fi карта broadcom bcm4318 и драйвер b43

Итак, на ноутбуке есть такая железка:

0a:03.0 Network controller: Broadcom Corporation BCM4318 [AirForce One 54g] 802.11g Wireless LAN Controller (rev 02)
	Subsystem: AMBIT Microsystem Corp. TravelMate 2410
	Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 96
	Interrupt: pin A routed to IRQ 18
	Region 0: Memory at d0100000 (32-bit, non-prefetchable) [=8K]
	Kernel driver in use: b43-pci-bridge
	Kernel modules: ssb

Если загрузиться с system rescue cd (live cd, основанный на gentoo), то она сходу цепляется и нормально работает. в логе пишется:

[ 1213.939113] b43-phy0: Loading OpenSource firmware version 410.31754
[ 1213.939120] b43-phy0: Hardware crypto acceleration not supported by firmware
[ 1213.939123] b43-phy0: QoS not supported by firmware

lsmod показывает, что загружен модуль b43
на gentoo-wiki.com есть статья, описывающая установку этого драйвера. Там говорится, что необходимо поставить пакет b43-firmware из портажа.

Если так сделать в моей системе, то при команде ifconfig wlan0 up из-под терминала в иксах система напрочь отбрасывает копыта - даже sys_rq-комбинации не работают (в ядре они включены и обычно работают). Если же эту команду запустить из-под голой консоли, то система не виснет, на консоль выдаётся сообщение "Disabling IRQ #10", а в dmesg выдаётся следующее:

[  203.313419] b43-phy0: Loading firmware version 478.104 (2008-07-01 00:50:23)
[  203.336788] b43-phy0 debug: Chip initialized
[  203.336934] b43-phy0 debug: 32-bit DMA initialized
[  203.336993] b43-phy0 debug: QoS enabled
[  203.354407] b43-phy0 debug: Wireless interface started
[  204.892206] irq 10: nobody cared (try booting with the "irqpoll" option)
[  204.892211] Pid: 976, comm: kworker/u:2 Not tainted 3.1.1-gentoo #6
[  204.892214] Call Trace:
[  204.892224]  [<c1041b1c>] ? __report_bad_irq.clone.6+0x14/0x7b
[  204.892230]  [<c1041b23>] ? __report_bad_irq.clone.6+0x1b/0x7b
[  204.892234]  [<c1041cd5>] ? note_interrupt+0x11e/0x18d
[  204.892239]  [<c1040ddd>] ? handle_irq_event_percpu+0xe6/0xf7
[  204.892243]  [<c104216b>] ? unmask_irq+0x1a/0x1a
[  204.892248]  [<c1040e07>] ? handle_irq_event+0x19/0x22
[  204.892252]  [<c10421d3>] ? handle_level_irq+0x68/0x7e
[  204.892255]  <IRQ>  [<c100318f>] ? do_IRQ+0x2b/0x68
[  204.892264]  [<c12089a9>] ? common_interrupt+0x29/0x30
[  204.892270]  [<c101e901>] ? __do_softirq+0x30/0xd0
[  204.892274]  [<c101e8d1>] ? local_bh_enable+0x69/0x69
[  204.892277]  <IRQ>  [<c101eaa4>] ? irq_exit+0x31/0x7f
[  204.892283]  [<c10031bc>] ? do_IRQ+0x58/0x68
[  204.892287]  [<c12089a9>] ? common_interrupt+0x29/0x30
[  204.892302]  [<c10f21e0>] ? ioread32+0x9/0x24
[  204.892312]  [<f8636a9b>] ? b43_bus_ssb_read32+0xb/0xc [b43]
[  204.892320]  [<f86347f1>] ? b43_mac_suspend+0x74/0xbf [b43]
[  204.892328]  [<f8638b87>] ? b43_gphy_op_pwork_15sec+0x8/0x17 [b43]
[  204.892336]  [<f8636211>] ? b43_periodic_work_handler+0xf2/0x1f8 [b43]
[  204.892341]  [<c1028040>] ? process_one_work+0x140/0x235
[  204.892349]  [<f863611f>] ? b43_controller_restart+0x2f/0x2f [b43]
[  204.892354]  [<c10293b3>] ? worker_thread+0x12f/0x1df
[  204.892358]  [<c1029284>] ? manage_workers.clone.33+0x17e/0x17e
[  204.892363]  [<c102b70f>] ? kthread+0x62/0x67
[  204.892368]  [<c102b6ad>] ? kthread_worker_fn+0xd9/0xd9
[  204.892372]  [<c12089b6>] ? kernel_thread_helper+0x6/0xd
[  204.892374] handlers:
[  204.892379] [<f821d300>] sky2_intr
[  204.892383] [<f83c93b7>] azx_interrupt
[  204.892391] [<f815dbda>] usb_hcd_irq
[  204.892397] [<f815dbda>] usb_hcd_irq
[  204.892400] Disabling IRQ #10
[  204.892907] b43-phy0 debug: Adding Interface type 2
[  204.894958] ADDRCONF(NETDEV_UP): wlan0: link is not ready

первое, что можно заметить - то, что фирмварь не опенсорсная. Тут, в отличие от dmesg под system rescue cd, вообще не выдаётся её открытость-закрытость, а ещё на вроде как официальном сайте опенсорсной фирмвари http://www.ing.unibs.it/~openfwwf/ первый релиз приходится на 9й год, а тут фирмварь от 8-го года, ну и конечно, нельзя не заметить то, что вайфай в итоге не работает. Да, ещё стоит добавить, что включение-выключение опции irqpoll в grub.conf, затем reboot ничего не меняет.

А ещё на странице драйвера написано, что опенсорсная фирмварь поддерживает только чипы bcm4313, bcm43224, bcm43225, bcm4329, то есть мой bcm4318 вроде как поддерживаться не должен. Спрашивается: какого фига в system rescue cd он работает с опенсорсной фирмварью?

Как же в итоге-то поставить опенсорсную фирмварь и заставить её работать? Хотя нет, лучше так: Как же заставить просто работать эту говно-железку?

Да, ещё немного предыстории: Пока из портаж не был выброшен последний udev, не жалующийся на 2.6.31, что у меня слишком старое ядро - всё работало. То есть проблема связана именно с новыми ядрами, хотя в sytem rescue cd ядро 3.0.13

P.S. Broadcom - дерьмо. Не покупайте их железо!

.

Интересно...
Как соотносится версия твоего ядра с наличной на SysRescueCD?
Если пересобрать равную [или более свежую] версию с конфигом [ядра] от последнего?

:wq
--
Live free or die

ядро свежее

Спасибо за ответ.
Всё, что здесь описано применительно к основной системе, что на жёском диске ноутбука, сделано с использованием ядра 3.1.1, что свежее 3.0.13-std241-i586, что на system rescue cd. Однако, проявляется на всех ядрах >=2.6.32.

Насколько я понял, предлагается взять /proc/config.gz из system rescue cd, положить его в /usr/src/linux в разархивированном виде и под именем .config, собрать ядро и попробовать с ним? Я так попробую, но вряд ли это будет успешно.

.

totto написал(а):
Насколько я понял, предлагается взять /proc/config.gz из system rescue cd, положить его в /usr/src/linux в разархивированном виде и под именем .config, собрать ядро и попробовать с ним? Я так попробую, но вряд ли это будет успешно.

Кстати, я не вполне уверен, что оно (/proc/config.* там (в SysRescueCD) есть.
По крайней мере по воспоминаниям о результатах моего последнего опыта...

:wq
--
Live free or die

Я в это не верил, но оно

Я в это не верил, но оно таки-сработало!
с конфигом от system rescue cd. Правда загружает оно всё же ту фирмварю, что ставится из портажа, то есть, как я понимаю, проприетарную. Но это, в принципе, ладно - главное работает.
Теперь буду выяснять какие конкретно опции у меня были не так настроены методом постепенного приближения к своему конфигу ядра.

скорее всего дело в

скорее всего дело в

Processor type and features  --->
  Preemption Model  --->
CONFIG_PREEMPT_NONE=y
# CONFIG_PREEMPT_VOLUNTARY is not set
# CONFIG_PREEMPT is not set

нужно будет добавить в вики, между прочим

Опять же, оба ядра (как

Опять же, оба ядра (как работающее с карточкой, так и не работающее) настрены на Voluntary :)

причина - CONFIG_SMP

Господа! Методом бисекции мне удалось найти виноватую в моих проблемах конфигурацию линукса. Этой конфигурацией оказалась CONFIG_SMP, отвечающая вроде как за поддержку множества процессоров. На моём лаптопе используется один одноядерный процессор, поэтому я эту опцию при настройке деактивировал. В System Rescue CD же она включена.
При изменении данной опции, автоматом изменяются ряд других, большинство из которых недоступны для изменения вручную. Поэтому несмотря на то что разница всего в одной галке, diff между этими конфигами довольно приличный. Со знаком > помечены опции, относящиеся к работающему с картой конфигу, а со знаком < - к неработающему:

14a15
> CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
45a47,48
> CONFIG_X86_32_SMP=y
> CONFIG_X86_HT=y
48a52
> CONFIG_ARCH_CPU_PROBE_RELEASE=y
57d60
< CONFIG_BROKEN_ON_SMP=y
90a94
> CONFIG_GENERIC_PENDING_IRQ=y
97c101
< CONFIG_TINY_RCU=y
---
> CONFIG_TREE_RCU=y
99a104,106
> CONFIG_RCU_FANOUT=32
> # CONFIG_RCU_FANOUT_EXACT is not set
> # CONFIG_RCU_FAST_NO_HZ is not set
162a170
> CONFIG_USE_GENERIC_SMP_HELPERS=y
183a192
> CONFIG_STOP_MACHINE=y
226c235
< # CONFIG_MUTEX_SPIN_ON_OWNER is not set
---
> CONFIG_MUTEX_SPIN_ON_OWNER=y
236c245,247
< # CONFIG_SMP is not set
---
> CONFIG_SMP=y
> # CONFIG_X86_MPPARSE is not set
> # CONFIG_X86_BIGSMP is not set
237a249
> # CONFIG_X86_MRST is not set
238a251
> # CONFIG_X86_32_NON_STANDARD is not set
296c309,311
< CONFIG_NR_CPUS=1
---
> CONFIG_NR_CPUS=8
> # CONFIG_SCHED_SMT is not set
> CONFIG_SCHED_MC=y
301c316,318
< # CONFIG_X86_UP_APIC is not set
---
> CONFIG_X86_LOCAL_APIC=y
> CONFIG_X86_IO_APIC=y
> # CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set
338d354
< CONFIG_NEED_PER_CPU_KM=y
361a378
> CONFIG_HOTPLUG_CPU=y
373a391
> CONFIG_PM_SLEEP_SMP=y
436c454,455
< # CONFIG_ARCH_SUPPORTS_MSI is not set
---
> CONFIG_ARCH_SUPPORTS_MSI=y
> # CONFIG_PCI_MSI is not set
438a458
> # CONFIG_HT_IRQ is not set
546a567,569
> CONFIG_RPS=y
> CONFIG_RFS_ACCEL=y
> CONFIG_XPS=y
2122a2146
> CONFIG_RCU_CPU_STALL_TIMEOUT=60
2125a2150,2151
> # CONFIG_DEBUG_PER_CPU_MAPS is not set
> # CONFIG_CPU_NOTIFIER_ERROR_INJECT is not set
2212a2239
> # CONFIG_CRYPTO_PCRYPT is not set
2326a2354
> CONFIG_CPU_RMAP=y

Я совершенно ума не приложу как эта опция могла отразиться на работоспособности wi-fi карты. Может быть, это какой-то баг, который следует сообщить в багтрекер генту или даже линукса?

.

totto написал(а):
Господа!

Товарищи!

totto написал(а):
Я совершенно ума не приложу как эта опция могла отразиться на работоспособности wi-fi карты. Может быть, это какой-то баг, который следует сообщить в багтрекер генту или даже линукса?

Думаю, большой беды от вопроса в родном трекере с просьбой истолковать и/или послать в направлении правильного апстрима, не будет.

:wq
--
Live free or die

недавно развлекался с

недавно развлекался с аналогичной проблемой.
если я правильно понял, надо firmware залить в ядро.
искать где тут
-> Device Drivers
-> Generic Driver Options
-> Userspace firmware loading support (FW_LOADER [=y]
должно получиться как то так
CONFIG_EXTRA_FIRMWARE_DIR="/lib/firmware"
CONFIG_EXTRA_FIRMWARE="brcm/bcm43xx-0.fw brcm/bcm43xx_hdr-0.fw"

Спасибо, в первую очередь

Спасибо, в первую очередь разберусь с этой опцией.

В обоих линуксах настройки

В обоих линуксах настройки одинаковы:
FW_LOADER=y
CONFIG_EXTRA_FIRMWARE=""
а CONFIG_EXTRA_FIRMWARE_DIR не определена.
Насколько я понял, эти опции сделаны на случай, если надо фирмварь прямо в бинарь линукса засунуть, а тут она грузится на ходу. Просто в одном случае почему-то безуспешно.
Так что дело не в этой опции.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".