Я никогда не думал, что буду про это писать, и уж тем более не думал, что буду этим заниматься. Увы, суровые будни обладателя свежего драйвера на Realtek 8191SE и старого ядра в стабильном релизе Debian 6 могут вас толкнуть и не на такие извращения. В этой статье я расскажу вам, как я в очередной раз убедился, что Linux вовсе не такой дружелюбный, как вам, вероятно, могли рассказывать, и поделюсь своим опытом пересбора ядра. Но сначала предыстория, дабы вы имели представление, ради чего я трачу своё время на такие сомнительные занятия.
Предыстория
В январе-феврале 2011 года в лапы ко мне попал неттоп Foxconn NT-510, не шибко мощная машинка с двухядерным атомом 1.6 Гц, двумя гигабайтами оперативки и парой винтов(внутрь можно установить только один). Этот аппарат должен был являть собой осуществление светлой мечты - хостить унылый веб-ресурс Winreview.ru у меня дома. Для этих целей и задач в теории должно было хватить и мощности неттопа, и моего домашнего канала. Увы, эта затея вдребезги разлетелась о нежелание местного провайдера идти на компромисс (это отдельная история с несчастливым концом), да и как оказалось, "белый" IP адрес виден далеко не со всех точек земного шара.
Дабы не пропадать добру, неттоп был перепрофилирован в отладочный веб-сервер/файловую помойку/сервер удаленного доступа/фтп сервер и т.п., куда сервисы добавляются по необходимости.
Особенность текущей реализации такова, что, став сервером удаленного доступа и файловой помойкой, неттоп подключается к сети посредством Wi-Fi. В неттопе стоит беспроводной адаптер Realtek 8191SE, который поддерживается производителем в большинстве современных операционных систем. Изначально в качестве операционной системы для целей хостинга была установлена FreeBSD, за что автор приносит благодарность своему приятелю, уже известному постоянным читателям под ником Zloy. Ну а для задач попроще ваш покорный слуга остановил свой выбор на ОС Debian, о чем до сих пор не жалеет.
Проблема
Скачав драйверы Realtek 8191SE для Linux, я успешно установил их, чему способствовала подробная инструкция в файле readme. Практически сразу же за ними выявился довольно неприятный баг - карта постоянно спала. Она напрочь игнорировала настройки питания, а они были такими (исполняемым скриптом в /etc/network/if-up.d):
[code]iwconfig wlan0 power off[/code]
Это не помогало. Да вообще ничего не помогало, кроме исходящей активности - если с карты отсылались в дерби сети какие-то данные, это мешало ей заснуть. В качестве хоть какого-нибудь решения с проблемой Wi-Fi (провода тянуть через всю квартиру не хотелось, знаете ли) я повесил на старт системы простейший скрипт, пингующий мой роутер пакетом в 1 байт каждые 5 секунд.
[code]ping -s 1 -i 5 10.10.0.1 > /dev/null&[/code]
Этого костыля было достаточно, чтобы заставить карту бодрствовать и спокойно ожидать обновления драйвера от производителя. Впрочем, я потом совсем забыл об его существовании. Работает - не трогай.
И вот буквально только что меня ткнули носом, что, дескать, драйвер-то давно обновился, и в нем исправлена масса ошибок. Я скачал его и обнаружил, что на моем ядре (2.6.32) работать корректно он не будет, и более того, даже не собирается компилироваться. Это тот самый редкий случай, когда недалекий начинающий линуксоид, коим я являюсь, вынужден посягнуть на святая святых - пересбор ядра.
Пересобираем ядро
Для такого чайника, как я, сборка ядра - непосильная задача. Даже если я просижу около компьютера сутки, пытаясь разобраться, что там мне нужно в make menuconfig, а что нет - яволь, я не осилю.
Поэтому разумным вариантом мне представляется использование конфигурационного файла от "родного" ядра. Это файл /boot/config-версия-текущего-ядра.
Я делаю это так.
- Скачиваем с http://kernel.org свежую версию ядра. В качестве примера я оперирую последней стабильной версией ядра, 3.4.4.
- Кладем скачанный архив опять же в /usr/src и распаковываем. У меня это выглядело так:
[code]tar xjf linux-3.4.4.tar.bz2[/code] - Смотрим версию текущего ядра:
[code]#uname -a[/code] - Берем соответствующий /boot/config-* файл и помещаем в папку /usr/src/linux-3.4.4 под именем .config. Если повезет, после этого можно будет собрать deb-пакет с новейшим ядром, с которым последние драйвера моей карты будут работать без нареканий.
Переходим в /usr/src/linux-3.4.4 и собираем:
- [code]#make clean[/code]
- [code]#make menuconfig[/code]
Вот здесь я просто пересохраняю .config файл, чтобы все значения параметров и модулей, не определенных в старом конфиге, приняли значения по умолчанию. - [code]#make KDEB_PKGVERSION=i386-hb860 deb-pkg[/code]
i386-hb860 - это идентификационный суффикс, указывающий, что ядро собрал я сам для x86 системы. Рекомендую попридержать фантазию, и в этом суффиксе использовать только цифры, латинские буквы и тире -. А то ядро скомпилится (а это может занять несколько часов), и только после этого плюнет ошибку, что версия содержит недопустимые символы.
На выходе получаем комплект deb-пакетов:
Теперь можно установить новое ядро при помощи команды
[code]dpkg -i linux-image-3.4.4_i386-hb860_i386.deb[/code]
И выбрать его при загрузке.
Всё необходимое для компиляции дополнительных приложений и модулей так же под рукой, если они потребуются.
Дополнительную информацию по процессу сборки ядра можно почерпнуть из этого руководства.
UPD. При пересборке модулей для своей Wi-Fi карточки я обнаружил, что необходимые драйверы уже включены в ядро версии 3.4.4. Таким образом, при сборке мне следовало их включить в make menuconfig:
К слову, эти модули не поддерживают режим управления электропитанием, что лично мне на руку, но может огорчить владельцев нетбуков с такой картой. В остальном устройство работает без нареканий.
Что ж, моя эпопея с Wi-Fi закончилась успешно, и я избавился ото всех проблем. Возможно, пересбор ядра здесь был излишней мерой, и кто-то предпочтет подключить репозитории Debian Backports и поставит ядро оттуда. В любом случае, мораль такова - Linux по прежнему не готов к принятию широкими массами. Процесс установки и обновления драйверов, ставший прозрачным в продукции Редмонда, требует здесь навыков гораздо более высоких, требует внимания и концентрации на происходящем. В современных реалиях общества потребления, когда отношение к компьютерам стало сродни отношению к телевизору или стиральной машинке, это требование к себе внимания со стороны Linux играет с ним злую шутку и резко умаляет его крайне неплохие потребительские качества в глазах обычного пользователя. Мотивации вникать в подобные сложные процессы у рядового пользователя просто нет.
💡Узнавайте о новых статьях быстрее. Подпишитесь на наши каналы в Telegram и Twitter.
К сожалению, описаное не единственная болезнь Линукса. И для обычного пользователя даже простая смена-установка драйвера может стать огромной проблемой. Не говоря уже о компиляции и\или сборке собственного ядра. А про подключение юсб-модемов в Линуксе вообще можно написать отдельный роман в стиле Кинга. Как правило, тому кто бегает в Интернет чтобы проверить аккаунт в соц.сети или узнать об очередной глупости бывших одноклассников, нет никакого дела до глубин командной строки. Большинство обычных людей на вопрос о том какая система стоит на их ПК, чаще всего затрудняются с ответом, или же путают висту с семеркой или с хр. Так что о дружелюбности Линукса лучше даже не заикаться. Увы. Линукс — удел профессионалов, экстремалов и любителей делать все руками. Автору респект!!!
Согласен с вашим комментарием. USB-модемы это вообще ад. Необходимости использовать на компьютере с Linux я пока не испытывал, но приходилось изучать вопрос с Android-планшетом. Как несложно догадаться, там абсолютно те же проблемы.
Не могу не выразить благодарность за столь предложенный вами интересный для чтения текст.
Рад, что пригодилось.
Пересобрать ядро с готовым конфигом — нету особой сложности, кроме времени ожидания пока оно компилируется. Вот уже настроить его под себя — тут уже начинается веселье. Автору спасибо за простой мануал)
Вот настроить под себя я как раз и не смогу. Увы.
Кстати, в написанном мной есть пробел.
Оказывается, в ядре 3.4.4 УЖЕ есть драйверы на указанную в статье карту, и они отлично работают.
В итоге я таки влез в make menuconfig и включил недостающие драйверы.
После очередной пересборки ядра всё работает «из коробки» и без костылей.