Wi-Fi Broadcom

Настройка, программирование, распределённые вычисления

Модераторы: Olej, bellic, vikos

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Wi-Fi Broadcom

Непрочитанное сообщение Olej » 20 фев 2015, 18:01

Olej писал(а):

Код: Выделить всё

...
/home/Olej/2015-WORK/devices/hybrid_wl/src/wl/sys/wl_cfg80211_hybrid.c:2015:3: ошибка: несовместимый тип аргумента 3 функции «cfg80211_inform_bss»
   (const u8 *)notify_ie, notify_ielen, signal, GFP_KERNEL);
   ^
...
/home/Olej/2015-WORK/devices/hybrid_wl/src/wl/sys/wl_cfg80211_hybrid.c:2015:3: ошибка: слишком мало аргументов в вызове функции «cfg80211_inform_bss»
   (const u8 *)notify_ie, notify_ielen, signal, GFP_KERNEL);
...
Начинаем разгребаться в этом новом месте.
Смотрим </net/cfg80211.h>:
- ядро 3.17:

Код: Выделить всё

3796 static inline struct cfg80211_bss * __must_check
3797 cfg80211_inform_bss(struct wiphy *wiphy,
3798                     struct ieee80211_channel *rx_channel,
3799                     const u8 *bssid, u64 tsf, u16 capability,
3800                     u16 beacon_interval, const u8 *ie, size_t ielen,
3801                     s32 signal, gfp_t gfp)
3802 {
3803         return cfg80211_inform_bss_width(wiphy, rx_channel,
3804                                          NL80211_BSS_CHAN_WIDTH_20,
3805                                          bssid, tsf, capability,
3806                                          beacon_interval, ie, ielen, signal,
3807                                          gfp);
3808 }
- ядро 3.18:

Код: Выделить всё

3839 static inline struct cfg80211_bss * __must_check
3840 cfg80211_inform_bss(struct wiphy *wiphy,
3841                     struct ieee80211_channel *rx_channel,
3842                     enum cfg80211_bss_frame_type ftype,
3843                     const u8 *bssid, u64 tsf, u16 capability,
3844                     u16 beacon_interval, const u8 *ie, size_t ielen,
3845                     s32 signal, gfp_t gfp)
3846 {
3847         return cfg80211_inform_bss_width(wiphy, rx_channel,
3848                                          NL80211_BSS_CHAN_WIDTH_20, ftype,
3849                                          bssid, tsf, capability,
3850                                          beacon_interval, ie, ielen, signal,
3851                                          gfp);
3852 }
По всему видно (хотя бы по номерам строк в заголовочном файле) видно, что контора активно пишет... ;-) :-o :-?

Добавили 3-й параметр cfg80211_inform_bss() : enum cfg80211_bss_frame_type ftype

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Wi-Fi Broadcom

Непрочитанное сообщение Olej » 20 фев 2015, 18:07

Olej писал(а): По всему видно (хотя бы по номерам строк в заголовочном файле) видно, что контора активно пишет... ;-) :-o :-?

Добавили 3-й параметр cfg80211_inform_bss() : enum cfg80211_bss_frame_type ftype

Код: Выделить всё

3795 /**
3796  * enum cfg80211_bss_frame_type - frame type that the BSS data came from
3797  * @CFG80211_BSS_FTYPE_UNKNOWN: driver doesn't know whether the data is
3798  *      from a beacon or probe response
3799  * @CFG80211_BSS_FTYPE_BEACON: data comes from a beacon
3800  * @CFG80211_BSS_FTYPE_PRESP: data comes from a probe response
3801  */
3802 enum cfg80211_bss_frame_type {
3803         CFG80211_BSS_FTYPE_UNKNOWN,
3804         CFG80211_BSS_FTYPE_BEACON,
3805         CFG80211_BSS_FTYPE_PRESP,
3806 };

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Wi-Fi Broadcom

Непрочитанное сообщение Olej » 20 фев 2015, 18:26

Тупо добавляем:

Код: Выделить всё

#if LINUX_VERSION_CODE <= KERNEL_VERSION(3, 18, 0)
        cbss = cfg80211_inform_bss(wiphy, channel, (const u8 *)(bi->BSSID.octet),
                0, beacon_proberesp->capab_info, beacon_proberesp->beacon_int,
                (const u8 *)notify_ie, notify_ielen, signal, GFP_KERNEL);
#else
        cbss = cfg80211_inform_bss(wiphy, channel, CFG80211_BSS_FTYPE_UNKNOWN, (const u8 *)(bi->BSSID.octet),
                0, beacon_proberesp->capab_info, beacon_proberesp->beacon_int,
                (const u8 *)notify_ie, notify_ielen, signal, GFP_KERNEL);
#endif
По принципу: CFG80211_BSS_FTYPE_UNKNOWN - если он до 3.18 был неизвестным, то пусть и дальше остаётся таким ;-) .

Код: Выделить всё

[Olej@modules hybrid_wl]$ make
KBUILD_NOPEDANTIC=1 make -C /lib/modules/`uname -r`/build M=`pwd`
make[1]: Вход в каталог `/usr/src/kernels/3.18.5-101.fc20.x86_64'
CFG80211 API is prefered for this kernel version
Using CFG80211 API
...
  MODPOST 1 modules
WARNING: modpost: missing MODULE_LICENSE() in /home/Olej/2015-WORK/devices/hybrid_wl/wl.o
see include/linux/module.h for more information
WARNING: modpost: Found 1 section mismatch(es).
To see full details build your kernel with:
'make CONFIG_DEBUG_SECTION_MISMATCH=y'
  CC      /home/Olej/2015-WORK/devices/hybrid_wl/wl.mod.o
  LD [M]  /home/Olej/2015-WORK/devices/hybrid_wl/wl.ko
make[1]: Выход из каталога `/usr/src/kernels/3.18.5-101.fc20.x86_64'
Там где ... ловим кучу предупреждений, но оставим это на совести авторов драйвера...

Код: Выделить всё

[Olej@modules hybrid_wl]$ sudo insmod wl.ko
[sudo] password for Olej:

[Olej@modules hybrid_wl]$ lsmod | grep wl
wl                   6367663  0
cfg80211              498962  1 wl

[Olej@modules hybrid_wl]$ ifconfig wlo1
wlo1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.21  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::3623:87ff:fed6:850d  prefixlen 64  scopeid 0x20<link>
        ether 34:23:87:d6:85:0d  txqueuelen 1000  (Ethernet)
        RX packets 4  bytes 1300 (1.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 6
        TX packets 27  bytes 5103 (4.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 19
И фонарь WiFi на ноутбуке из жёлтого становится ярко белым ;-) ...

Код: Выделить всё

[Olej@modules hybrid_wl]$ ping 8.8.8.8 -Iwlo1
PING 8.8.8.8 (8.8.8.8) from 192.168.1.21 wlo1: 56(84) bytes of data.
From 192.168.1.21 icmp_seq=1 Destination Host Unreachable
From 192.168.1.21 icmp_seq=2 Destination Host Unreachable
From 192.168.1.21 icmp_seq=3 Destination Host Unreachable
From 192.168.1.21 icmp_seq=4 Destination Host Unreachable
...
:shock:
А вот это несколько неожиданно...

Но вспоминаю, что у меня же работает всё под управлением NetworkManager и активен проводной интерфейс:

Код: Выделить всё

[Olej@modules hybrid_wl]$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.1     0.0.0.0         UG    1024   0        0 em1
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 em1
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 wlo1
Выключаю проводной интерфейс (в NM):

Код: Выделить всё

[Olej@modules hybrid_wl]$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.1     0.0.0.0         UG    1024   0        0 wlo1
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 wlo1

[Olej@modules hybrid_wl]$ ping 8.8.8.8 -I wlo1
PING 8.8.8.8 (8.8.8.8) from 192.168.1.21 wlo1: 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=46 time=78.7 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=46 time=80.9 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=46 time=80.1 ms
^C
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 78.785/79.948/80.961/0.952 ms
Наслаждайтесь! ;-)

andrey874
Активист
Сообщения: 12
Зарегистрирован: 19 фев 2015, 18:22
Контактная информация:

Re: Wi-Fi Broadcom

Непрочитанное сообщение andrey874 » 23 фев 2015, 17:18

ВОТ РЕШЕНИЕ УСТАНОВКИ ДРАЙВЕРА-Инструкция для Kali Linux с ядром 3.18.0-kali1-amd64 ССЫЛКА-http://www.sakryukin.ru/?module=article ... 0%BE%D1%82

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Wi-Fi Broadcom

Непрочитанное сообщение Olej » 15 апр 2015, 16:39

andrey874 писал(а):ВОТ РЕШЕНИЕ УСТАНОВКИ ДРАЙВЕРА-Инструкция для Kali Linux с ядром 3.18.0-kali1-amd64 ССЫЛКА-http://www.sakryukin.ru/?module=article ... 0%BE%D1%82
Ссылка не работающая (это ссылка на чью-то личную страницу) ... а установка беспроводных интерфейсов Broadcom актуальна, поскольку почти все новые ноутбуки ставят эти чипы...
Поэтому повторяем весь ход по-новой ;-) ...

Идентифицируем свой чип по VID:PID командой что-то типа:

Код: Выделить всё

$ lspci -vnn -d 14e4:
Проверяем свой чип на Linux-ресурсе: b43 and b43legacy.
Убеждаемся что (если) он не поддерживается модулем bcma ... то нужен модуль wl.

Оригинальный (от Broadcom) модуль берём на Broadcom-ресурсе: [urlhttp://www.broadcom.com/support/802.11/linux_sta.php]802.11 Linux STA driver[/url]
Выбираем нужные нам 32-бит или 64-бит.

Но этот модуль патчен и работает только до ядра 3.16.
Я специально (вид ошибок) покажу что происходит при его сборке в ядре 3.19:

Код: Выделить всё

bash-4.2$ uname -r
3.19.3-100.fc20.i686

bash-4.2$ make
KBUILD_NOPEDANTIC=1 make -C /lib/modules/`uname -r`/build M=`pwd`
make[1]: Вход в каталог `/usr/src/kernels/3.19.3-100.fc20.i686'
CFG80211 API is prefered for this kernel version
Using CFG80211 API
  LD      /home/Olej/tmp/built-in.o
  CC [M]  /home/Olej/tmp/src/shared/linux_osl.o
  CC [M]  /home/Olej/tmp/src/wl/sys/wl_linux.o
/home/Olej/tmp/src/wl/sys/wl_linux.c: В функции «wl_alloc_linux_if»:
/home/Olej/tmp/src/wl/sys/wl_linux.c:1310:64: ошибка: для макроса «alloc_netdev» требуется 4 аргументов, но указано только 3
  dev = alloc_netdev(sizeof(priv_link_t), intf_name, ether_setup);
                                                                ^
/home/Olej/tmp/src/wl/sys/wl_linux.c:1310:8: ошибка: «alloc_netdev» undeclared (first use in this function)
  dev = alloc_netdev(sizeof(priv_link_t), intf_name, ether_setup);
        ^
/home/Olej/tmp/src/wl/sys/wl_linux.c:1310:8: замечание: each undeclared identifier is reported only once for each function it appears in
make[2]: *** [/home/Olej/tmp/src/wl/sys/wl_linux.o] Ошибка 1
make[1]: *** [_module_/home/Olej/tmp] Ошибка 2
make[1]: Выход из каталога `/usr/src/kernels/3.19.3-100.fc20.i686'
make: *** [all] Ошибка 2
Модуль нужно патчить...

andrey874
Активист
Сообщения: 12
Зарегистрирован: 19 фев 2015, 18:22
Контактная информация:

Re: Wi-Fi Broadcom

Непрочитанное сообщение andrey874 » 15 апр 2015, 16:46

Инструкция для Kali Linux с ядром 3.18.0-kali1-amd64

Для ядра 3.18.0 необходимо патчить исходники драйвера.

Драйвер для Broadcom Corporation BCM43142 скачан отсюда (i686/amd64):
http://www.broadcom.com/support/802.11/linux_sta.php

Прямая ссылка на драйвер (amd64)
http://www.broadcom.com/docs/linux_sta/ ... 248.tar.gz

Патчи взяты у archlinux
https://aur.archlinux.org/packages/broadcom-wl-dkms/

Прямая ссылка на архив с патчами
https://aur.archlinux.org/packages/br/b ... kms.tar.gz

Ну, и на всякий случай, архив с драйвером (amd64) + патчи в одной упаковке можно скачать здесь:
http://www.sakryukin.ru/index.php?modul ... id=7&get=1

Дальнейшие действия описываю относительно архива с драйвером и патчами из одной упаковки.

Открываем терминал.
Создаём каталог ~/build
mkdir ~/build
Заходим терминалом в созданный каталог
cd ~/build
Качаем драйвер с патчами:
wget http://www.sakryukin.ru/uploads/src/hyb ... 8.0.tar.gz
распаковываем архив скомандовав:
tar -xvf hybrid-v35_64-nodebug-pcoem-6_30_223_248_patch_for_kernel-3.18.0.tar.gz
Заходим в получившийся после распаковки каталог:
cd ./hybrid-v35_64-nodebug-pcoem-6_30_223_248+patch_for_kernel-3.18.0
Выполняем наложение патчей поочерёдно командуя:
patch -p1 -i linux-recent.patch
patch -p1 -i license.patch
patch -p1 -i gcc.patch
sed -e "/BRCM_WLAN_IFNAME/s:eth:wlan:" -i src/wl/sys/wl_linux.c
Компилируем модуль ядра скомандовав:
make
Если сборка прошла успешно и в текущем каталоге появился файл wl.ko,
то получаем права root.

Если терминал свалился в домашний каталог пользователя root, то необходимо вернуться в каталог
/home/имя_пользователя/build/hybrid-v35_64-nodebug-pcoem-6_30_223_248+patch_for_kernel-3.18.0

Место расположения терминала проверяется командой pwd.

Находясь в каталоге hybrid-v35_64-nodebug-pcoem-6_30_223_248+patch_for_kernel-3.18.0 с правами root
выполняем поочерёдно команды:
cp ./broadcom-wl-dkms.conf /etc/modprobe.d/blacklist.conf
cp ./wl.ko /lib/modules/`uname -r`/kernel/net/wireless/
depmod
modprobe wl
Чтобы увидеть наш интерфейс можно скомандовать:
ifconfig -a
или
iwconfig
в выводе консоли должен фигурировать интерфейс wlan0. я устанавливал таким образом.всё работает.с сайта сакрюкина к.е.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Wi-Fi Broadcom

Непрочитанное сообщение Olej » 15 апр 2015, 16:53

Olej писал(а):Модуль нужно патчить...
Единственное место где я нашёл (?) - это Arch Linux: https://aur.archlinux.org/packages/broadcom-wl-dkms/ - это страница патча:
Last Updated: 2015-03-21 21:22
Вот прямой URL архива патча: https://aur.archlinux.org/packages/br/b ... kms.tar.gz ... но он же может поменяться?
Там в коде встречаются такие строки как:

Код: Выделить всё

#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)
Т.е. патч обновлялся под ядро 3.20 ... которое Торвальдс назвал 4.0 ;-) , т.е. освежается периодически.

Дальше и архив исходников модуля Broadcom, и архив патчей разархивируем в один каталог, который будет рабочим...
Это сам архив патчей:

Код: Выделить всё

olej@nvidia ~/tmp/patch/broadcom-wl-dkms $ ls -l broadcom-wl-dkms.tar.gz
-rw-r--r-- 1 olej olej 6289 апр.  15 15:55 broadcom-wl-dkms.tar.gz
olej@nvidia ~/tmp/patch/broadcom-wl-dkms $ ls -l
итого 36
-rw-r--r-- 1 olej olej   139 марта 21 23:13 broadcom-wl-dkms.conf
-rw-r--r-- 1 olej olej   983 марта 21 23:13 broadcom-wl-dkms.install
-rw-r--r-- 1 olej olej   177 марта 21 23:13 dkms.conf
-rw-r--r-- 1 olej olej   380 марта 21 23:13 gcc.patch
-rw-r--r-- 1 olej olej   279 марта 21 23:13 license.patch
-rw-r--r-- 1 olej olej 12105 марта 21 23:13 linux-recent.patch
-rw-r--r-- 1 olej olej  1878 марта 21 23:13 PKGBUILD
И накладываем патчи:

Код: Выделить всё

olej@nvidia ~/tmp $ patch -p1 -i linux-recent.patch
patching file src/wl/sys/wl_cfg80211_hybrid.c
patching file src/wl/sys/wl_cfg80211_hybrid.c
patching file src/wl/sys/wl_dbg.h
patching file src/wl/sys/wl_linux.c

olej@nvidia ~/tmp $ patch -p1 -i license.patch
patching file src/wl/sys/wl_linux.c

olej@nvidia ~/tmp $ patch -p1 -i gcc.patch
patching file Makefile

olej@nvidia ~/tmp $ sed -e "/BRCM_WLAN_IFNAME/s:eth:wlan:" -i src/wl/sys/wl_linux.c
И дальше сборка:

Код: Выделить всё

bash-4.2$ uname -r
3.19.3-100.fc20.i686

bash-4.2$ lsb_release -ircd
Distributor ID: Fedora
Description:    Fedora release 20 (Heisenbug)
Release:        20
Codename:       Heisenbug

Код: Выделить всё

bash-4.2$ make
KBUILD_NOPEDANTIC=1 make -C /lib/modules/`uname -r`/build M=`pwd`
make[1]: Вход в каталог `/usr/src/kernels/3.19.3-100.fc20.i686'
CFG80211 API is prefered for this kernel version
Using CFG80211 API
  LD      /home/Olej/tmp/built-in.o
  CC [M]  /home/Olej/tmp/src/shared/linux_osl.o
  CC [M]  /home/Olej/tmp/src/wl/sys/wl_linux.o
  CC [M]  /home/Olej/tmp/src/wl/sys/wl_iw.o
  CC [M]  /home/Olej/tmp/src/wl/sys/wl_cfg80211_hybrid.o
  LD [M]  /home/Olej/tmp/wl.o
  Building modules, stage 2.
CFG80211 API is prefered for this kernel version
Using CFG80211 API
  MODPOST 1 modules
  CC      /home/Olej/tmp/wl.mod.o
  LD [M]  /home/Olej/tmp/wl.ko
make[1]: Выход из каталога `/usr/src/kernels/3.19.3-100.fc20.i686'
Вы имеете собранный модуль wl.ko :

Код: Выделить всё

bash-4.2$ ls -l wl.ko
-rw-rw-r-- 1 Olej Olej 7457716 апр 15 16:21 wl.ko

bash-4.2$ modinfo wl.ko
filename:       /home/Olej/tmp/wl.ko
license:        Mixed/Proprietary
alias:          pci:v*d*sv*sd*bc02sc80i*
depends:        cfg80211
vermagic:       3.19.3-100.fc20.i686 SMP mod_unload 686 
parm:           passivemode:int
parm:           wl_txq_thresh:int
parm:           oneonly:int
parm:           piomode:int
parm:           instance_base:int
parm:           nompc:int
parm:           intf_name:string

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Wi-Fi Broadcom

Непрочитанное сообщение Olej » 15 апр 2015, 17:06

andrey874 писал(а):Инструкция для Kali Linux с ядром 3.18.0-kali1-amd64
Спасибо, andrey874, что подключился ... ;-)
У нас теперь кой в чём и дублирование вышло, но оно не страшно - возня с этими (разными) Broadcom-ами очень муторная.

Какой Linux - это совершенно не важно ... важно откуда и что брать, URL.
Я вот прямо сейчас сижу собираю модуль для Fedora 20, ядро 3.19 ...

Важно: если кто не обратил внимание, то у меня показана сборка для 32-бит драйвера, а в описаниях везде - 64-бит.
Т.е. патч - единый и для 32-бит и для 64-бит.

P.S. Там вообще хитрая структура дравера у Broadcom ;-) :

Код: Выделить всё

bash-4.2$ ls -l lib
итого 6288
-rwxrwxr-x 1 Olej Olej   12381 июн 26  2014 LICENSE.txt
-rw-rw-r-- 1 Olej Olej 6420572 июн 26  2014 wlc_hybrid.o_shipped
bash-4.2$ file lib/wlc_hybrid.o_shipped 
lib/wlc_hybrid.o_shipped: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
В каталоге lib в драйвере они помещают 1 объектный скомпилированный файл, который и определяет 32/64 бит, и в нём они и прячут свои проприетарные секреты! :lol:
Вот потому у них и 2 разных варианта архива драйвера, и вот почему патчи подходят к обоим вариантам (такое не часто бывает).

andrey874
Активист
Сообщения: 12
Зарегистрирован: 19 фев 2015, 18:22
Контактная информация:

Re: Wi-Fi Broadcom

Непрочитанное сообщение andrey874 » 15 апр 2015, 17:15

да голову поломал я с ним...но решение нашёл автор сайта тоже 2 дня сидел искал

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Wi-Fi Broadcom

Непрочитанное сообщение Olej » 15 апр 2015, 17:26

Olej писал(а):Вы имеете собранный модуль wl.ko :
Дальнейшую установку полученного модуля подробно описал andrey874 выше ... она достаточно обычная для всех Linux.

Единственно, что я советовал прежде установки драйвера "на постоянно", проверить его работу разовой загрузкой.
При этом обязательно выгрузить сначала имеющийся (не подходящий) драйвер bcma.

Итого (прямо из каталога сборки):

Код: Выделить всё

$ sudo rmmod bcma
$ sudo insmod wl.ko
И ещё в напомнинание: в чипах Broadcom встроены сетевые интерфейсы и Wi-Fi, и Bluetooth.
И проблемы со старым драйвером вылезают то там, то здесь (в зависимости от номера чипа) ... или сразу в обоих интерфейсах.
Это привносит дополнительную путаницу.

Ответить

Вернуться в «Сети»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей