Linksys WRT54GL и OpenWRT
Продолжение истории про мою домашнюю сеть. А точнее — про роутер Linksys WRT54GL, который раздает интернет на все домашние устройства. Расскажу об обнаруженных граблях и как их обойти.
Этот самый WRT54GL я в свое время выбрал за его аппаратную кнопку “Secure Easy Setup”, чтобы, заменив прошивку на OpenWRT, перепрограммировать кнопку на отключение Wi-Fi. В стоковой прошивке это, к сожалению, невозможно.
На момент покупки роутера самой свежей была версия OpenWRT Backfire (10.03.1).
Она и была успешно прошита согласно инструкции.
Я выбрал вариант прошивки brcm47xx
— с ядром 2.6 и стандартным драйвером b43
для Wi-Fi адаптера. Вариант brcm-2.4
был забракован, т.к. это более старое
ядро 2.4 и проприетарный драйвер от Broadcom.
Проводная сеть работала отлично, однако беспроводная постоянно отваливалась,
стоило только начать качать что-нибудь тяжелое. Причем отваливалась настолько,
что приходилось перезагружать роутер. Эпическая
переписка в багтрекере намекала, что такая
проблема не только у меня. Через некоторое время разработчики OpenWRT пофиксили
драйвер b43
, и я обновил прошивку сначала на trunk,
потом на вышедший вскоре релиз Attitude Adjustment (12.09).
Новый драйвер b43
действительно решил проблему с Wi-Fi. Однако стали возникать
кратковременные (примерно на минуту) перебои с сетью, в том числе с проводной.
В конце концов выяснилось, что новая прошивка Attitude Adjustment стала
более требовательной к объему оперативной памяти. Под нагрузкой память
заканчивалась и роутер перезагружался, что выглядело как перебои с сетью.
Когда стало понятно, что новая прошивка для WRT54GL слишком тяжелая, я решил
откатиться обратно на Backfire. Но, зная о проблемах с драйвером b43
в ней,
на этот раз взял вариант brcm-2.4
с Linux 2.4 и проприетарным драйвером wl
от Broadcom. К нему, вроде бы, ни у кого претензий не было. И — бинго — с этой прошивкой сеть работает как часы уже пару месяцев.
Единственный недостаток: стандартный пакет wifitoggle не совместим с ядром 2.4. Но нетрудно ручками написать работающий аналог:
# /bin/sh
button=ses
device=wl0
led=/proc/diag/led/ses_white
if [ "$BUTTON" = "$button" -a "$ACTION" = "pressed" ]; then
disabled="$(uci get "wireless.$device.disabled")"
if [ "$disabled" = "1" ]; then
uci set "wireless.$device.disabled=0"
wifi up "$device"
echo 1 > "$led"
else
uci set "wireless.$device.disabled=1"
wifi down "$device"
echo 0 > "$led"
echo 1 > /proc/diag/led/power
fi
fi
Скрипт надо положить в директорию /etc/hotplug.d/button/
. Назвать можно,
например, 50-mywifitoggle
.
Кроме /proc/diag/led/ses_white
есть еще /proc/diag/led/ses_orange
. Можно выбрать,
каким цветом подсвечивать кнопку при включении Wi-Fi: белым или оранжевым — по вкусу.
При отключении W-Fi почему-то начинает моргать индикатор Power, поэтому в скрипт
добавлена строчка echo 1 > /proc/diag/led/power
, возвращающая индикатор в
обычное постоянно включенное состояние.
Мораль сей басни такова: самое новое не всегда самое лучшее. Для роутера WRT54GL
лучше всего подошла довольно старая версия прошивки OpenWRT Backfire brcm-2.4
.