ядро 6 Заморозка с Broadcom 4313

Вопрос или проблема

Ubuntu 23.04 зависает на 1-2 минуты при использовании Wi-Fi. Я попробовал проприетарный драйвер broadcom-sta-dkms, предложенный Ubuntu, но это не решило проблему. У меня была точно такая же проблема с любым дистрибутивом с ядром 6 (например, Fedora). Есть мысли, как решить эту проблему?

Вывод команды lspci -nn | grep Broadcom

05:00.0 Сетевой контроллер [0280]: Broadcom Inc. and subsidiaries BCM4313 802.11bgn Беспроводной сетевой адаптер [14e4:4727] (rev 01)

Я считаю, что лучший работающий драйвер для вашего 14e4:4727 Broadcom – это bcmwl-kernel-source, а не brcmsmac или b43 и прошивка. Давайте установим его и посмотрим, будет ли улучшение:

sudo apt update
sudo apt install bcmwl-kernel-source

Перезагрузите и сообщите нам, есть ли какие-либо улучшения.

ИЗМЕНЕНИЕ: Вы показали, что bcmwl-kernel-source не работает. Давайте попробуем brcmsmac:

sudo -i
apt purge bcmwl-kernel-source
echo "blacklist b43" >>  /etc/modprobe.d/blacklist.conf
echo "blacklist ssb" >>  /etc/modprobe.d/blacklist.conf
exit

Перезагрузите. Есть ли какие-либо улучшения?

Следуя подсказкам, я нашёл баг, о котором сообщалось в ядре. У репортера была та же проблема, что и у меня, которая признана проблемой регрессии ядра.

Решение уже было предложено разработчиками Arch для ядра.

Как указано в обсуждении:

Существуют некоторые пути кода, которые не инициализируют rx->link_sta должным образом. Это вызывает сбой в местах, которые предполагают, что rx->link_sta действителен, если rx->sta действителен. Один известный случай вызван вызовом __ieee80211_rx_h_amsdu из fast-rx. Это приводит к сбою.

Я не смог это проверить на Ubuntu, так как у нее ядро 6.2, но патч работает на основном ядре 6.1.

Для тех, кто не может использовать

sudo apt install bcmwl-kernel-source

Вы можете вручную собрать из исходного кода (с применением патчей для сборки для ядра 6.x).

!заметьте: у меня ядро 6.5, тест пройден успешно.

Сначала мы клонируем исходный код:

git clone https://git.launchpad.net/ubuntu/+source/bcmwl/

(чтобы было подробно, мой последний коммит – cd76516d116a73018ca4cbe6b580bfd603465cb9, вы можете ‘git checkout cd76516d116a73018ca4cbe6b580bfd603465cb9’, если хотите иметь ту же ветку, что и я)

Перейдите в исходный код, вы увидите Makefile, README, debian и src, переместите Makefile в папку src

mv Makefile ./src/

Теперь создайте скрипт в директории src для применения патчей (уже в исходном коде)

#!/bin/bash

# путь к вашим патчам (измените, если хотите абсолютный путь)
PATCH_DIR="../debian/patches"

PATCHES=(
    "0002-Makefile.patch"
    "0003-Make-up-for-missing-init_MUTEX.patch"
    "0010-change-the-network-interface-name-from-eth-to-wlan.patch"
    "0013-gcc.patch"
    "0019-broadcom-sta-6.30.223.248-3.18-null-pointer-fix.patch"
    "0020-add-support-for-linux-4.3.patch"
    "0021-add-support-for-Linux-4.7.patch"
    "0022-add-support-for-Linux-4.8.patch"
    "0023-add-support-for-Linux-4.11.patch"
    "0024-add-support-for-Linux-4.12.patch"
    "0025-add-support-for-Linux-4.14.patch"
    "0026-add-support-for-Linux-4.15.patch"
    "0027-add-support-for-linux-5.1.patch"
    "0028-add-support-for-linux-5.6.patch"
    "0029-Update-for-set_fs-removal-in-Linux-5.10.patch"
    "0040-add-support-for-linux-5.18.patch"
    "0041-dev-addr-access.patch"
    "0042-add-support-for-linux-6.x.patch"
)

# Применяем все
for PATCH in "${PATCHES[@]}"; do
    echo "Применение патча: $PATCH"
    patch -p1 < "$PATCH_DIR/$PATCH"

    if [ $? -ne 0 ]; then
        echo "Не удалось применить $PATCH, пропускаем."
    fi
done

echo "Все патчи успешно применены."

Теперь мы можем собрать

make -C /lib/modules/$(uname -r)/build M="$(pwd)"

или просто :

make

После сборки мы можем установить с помощью команды:

sudo make install
sudo modprobe -r wl
sudo modprobe wl
lsmod |grep wl

Если есть wl, вы увидите, что Wi-Fi работает.


Для тех, кто хочет использовать dkms для сборки: Вам нужно получить исходный код и применить патч, как указано выше. Скопируйте папку src в

/var/lib/dkms/bcmwl/6.30.223.271+bdcom/source

Теперь проверьте, есть ли какие-либо установленные dkms ранее, мы должны удалить его:

dkms status
sudo dkms remove bcmwl/6.30.223.271+bdcom --all
dkms status

Перейдите в /var/lib/dkms/bcmwl/6.30.223.271+bdcom/source/dkms.conf и удалите все патчи:

PACKAGE_NAME="bcmwl"
PACKAGE_VERSION="#VERSION#"
CLEAN="rm -f *.*o"

BUILT_MODULE_NAME[0]="wl"
MAKE[0]="make -C $kernel_source_dir M=$dkms_tree/$PACKAGE_NAME/$PACKAGE_VERSION/build"
DEST_MODULE_LOCATION[0]="/updates"
AUTOINSTALL="yes"

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

sudo dkms build bcmwl/6.30.223.271+bdcom
sudo dkms install bcmwl/6.30.223.271+bdcom

или просто сделайте это:

sudo apt update
sudo apt install bcmwl-kernel-source

Теперь все работает нормально.

Ответ или решение

Решение проблемы зависания ядра 6 с Broadcom 4313 на Ubuntu 23.04

Введение

Проблемы с зависанием операционной системы, особенно при использовании Wi-Fi, могут значительно ухудшить пользовательский опыт. В рассматриваемом случае, у вас возникла проблема с зависанием системы на Ubuntu 23.04 при использовании драйвера для адаптера Broadcom BCM4313. Давайте подробно разберем возможные решения.

Описание проблемы

Вы упомянули, что ноутбук зависает через 1-2 минуты использования Wi-Fi, и аналогичная проблема наблюдалась на других дистрибутивов с ядром 6, таких как Fedora. Проблема может быть связана с несовместимостью драйвера или ошибками, связанными с версией ядра, что подтверждается вашим исследованием и ссылками на ошибки в сообществе.

Анализ драйверов

Изначально вы попробовали установить broadcom-sta-dkms, который не решил проблему. В свете вышеописанного трудно не отметить, что наилучшее решение для адаптера Broadcom 4313 может заключаться в использовании драйвера bcmwl-kernel-source. Однако, учитывая vostro обновление, предлагается альтернативный путь через brcmsmac.

Пошаговые шаги к решению
  1. Удаление текущего драйвера:

    sudo apt purge bcmwl-kernel-source
    echo "blacklist b43" | sudo tee -a /etc/modprobe.d/blacklist.conf
    echo "blacklist ssb" | sudo tee -a /etc/modprobe.d/blacklist.conf
  2. Переустановка альтернативного драйвера:
    Убедитесь, что у вас установлены brcmsmac и необходимые компоненты:

    sudo apt update
    sudo apt install firmware-b43-installer
  3. Перезагрузка системы:
    Перезагрузите компьютер и проверьте, появилась ли разница в работе Wi-Fi.

Устранение ошибок на уровне ядра

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

В этом случае вы можете попробовать использовать рекомендованное решение разработчиков Arch, связанное с патчами для исправления инициализации параметров. Такую процедуру можно выполнить следующим образом:

  1. Клонирование и патчинг драйвера:

    git clone https://git.launchpad.net/ubuntu/+source/bcmwl/
    cd bcmwl
    mv Makefile ./src/
  2. Создание и запуск скрипта для применения патчей:
    Сохраните предложенный вами скрипт в папке src и выполните его, что позволит автоматизировать применение всех необходимых патчей.

  3. Сборка и установка:

    make -C /lib/modules/$(uname -r)/build M="$(pwd)"
    sudo make install
    sudo modprobe -r wl
    sudo modprobe wl
    lsmod | grep wl

Заключение

Проблемы с Wi-Fi адаптерами часто требуют терпения и экспериментов с различными драйверами и конфигурациями. Убедитесь, что вы используете актуальные патчи и версии драйверов, которые подходят для вашего ядра. Если после всех предпринятых действий проблема все еще сохраняется, возможно, стоит рассмотреть возможность использования другого адаптера или возврата к предыдущей версии ядра, пока не будет выпущено стабильное решение проблемы.

Надеюсь, предоставленная информация будет полезна и поможет вам успешно решить проблему с зависанием системы при использовании Wi-Fi.

Оцените материал
Добавить комментарий

Капча загружается...