Главная > Linux > Новое ядро для Debian — как я это делаю и зачем

Новое ядро для Debian — как я это делаю и зачем

Я никогда не думал, что буду про это писать, и уж тем более не думал, что буду этим заниматься. Увы, суровые будни обладателя свежего драйвера на 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):

iwconfig wlan0 power off

Это не помогало. Да вообще ничего не помогало, кроме исходящей активности - если с карты отсылались в дерби сети какие-то данные, это мешало ей заснуть. В качестве хоть какого-нибудь решения с проблемой Wi-Fi (провода тянуть через всю квартиру не хотелось, знаете ли) я повесил на старт системы простейший скрипт, пингующий мой роутер пакетом в 1 байт каждые 5 секунд.

ping -s 1 -i 5 10.10.0.1 > /dev/null&

Этого костыля было достаточно, чтобы заставить карту бодрствовать и спокойно ожидать обновления драйвера от производителя. Впрочем, я потом совсем забыл об его существовании. Работает - не трогай.

И вот буквально только что меня ткнули носом, что, дескать, драйвер-то давно обновился, и в нем исправлена масса ошибок. Я скачал его и обнаружил, что на моем ядре (2.6.32) работать корректно он не будет, и более того, даже не собирается компилироваться. Это тот самый редкий случай, когда недалекий начинающий линуксоид, коим я являюсь, вынужден посягнуть  на святая святых - пересбор ядра.

Пересобираем ядро

Для такого чайника, как я, сборка ядра - непосильная задача. Даже если я просижу около компьютера сутки, пытаясь разобраться, что там мне нужно в make menuconfig, а что нет - яволь, я не осилю.

Поэтому разумным вариантом мне представляется использование конфигурационного файла от "родного" ядра. Это файл /boot/config-версия-текущего-ядра.

Я делаю это так.

  1. Скачиваем с http://kernel.org свежую версию ядра. В качестве примера я оперирую последней стабильной версией ядра, 3.4.4.
  2. Кладем скачанный архив опять же в /usr/src и распаковываем. У меня это выглядело так:
    tar xjf linux-3.4.4.tar.bz2
  3. Смотрим версию текущего ядра:
    #uname -a
  4. Берем соответствующий /boot/config-* файл и помещаем в папку /usr/src/linux-3.4.4 под именем .config. Если повезет, после этого можно будет собрать deb-пакет с новейшим ядром, с которым последние драйвера моей карты будут работать без нареканий.
Перед сборкой надо поставить ряд приложений и скриптов, необходимых для удачного завершения процесса:
#apt-get install build-essential fakeroot ncurses-devel

Переходим в /usr/src/linux-3.4.4 и собираем:

  1. #make clean
  2. #make menuconfig

    Вот здесь я просто пересохраняю .config файл, чтобы все значения параметров и модулей, не определенных в старом конфиге, приняли значения по умолчанию.
  3. #make  KDEB_PKGVERSION=i386-hb860 deb-pkg

    i386-hb860 - это идентификационный суффикс, указывающий, что ядро собрал я сам для x86 системы. Рекомендую попридержать фантазию, и в этом суффиксе использовать только цифры, латинские буквы и тире -. А то ядро скомпилится (а это может занять несколько часов), и только после этого плюнет ошибку, что версия содержит недопустимые символы.

На выходе получаем комплект deb-пакетов:

Теперь можно установить новое ядро при помощи команды

dpkg -i linux-image-3.4.4_i386-hb860_i386.deb

И выбрать его при загрузке.

Всё необходимое для компиляции дополнительных приложений и модулей так же под рукой, если они потребуются.

Дополнительную информацию по процессу сборки ядра можно почерпнуть из этого руководства.


UPD. При пересборке модулей для своей Wi-Fi карточки я обнаружил, что необходимые драйверы уже включены в ядро версии 3.4.4. Таким образом, при сборке мне следовало их включить в make menuconfig:

К слову, эти модули не поддерживают режим управления электропитанием, что лично мне на руку, но может огорчить владельцев нетбуков с такой картой. В остальном устройство работает без нареканий.


Что ж, моя эпопея с Wi-Fi закончилась успешно, и я избавился ото всех проблем. Возможно, пересбор ядра здесь был излишней мерой, и кто-то предпочтет подключить репозитории Debian Backports и поставит ядро оттуда. В любом случае, мораль такова - Linux по прежнему не готов к принятию широкими массами. Процесс установки и обновления драйверов, ставший прозрачным в продукции Редмонда, требует здесь навыков гораздо более высоких, требует внимания и концентрации на происходящем. В современных реалиях общества потребления, когда отношение к компьютерам стало сродни отношению к телевизору или стиральной машинке, это требование к себе внимания со стороны Linux играет с ним злую шутку и резко умаляет его крайне неплохие потребительские качества в глазах обычного пользователя. Мотивации вникать в подобные сложные процессы у рядового пользователя просто нет.

Winreview.ru можно найти в Вконтакте, Facebook и Twitter. Присоединяйтесь!

Комментарии

  1. gendozz

    К сожалению, описаное не единственная болезнь Линукса. И для обычного пользователя даже простая смена-установка драйвера может стать огромной проблемой. Не говоря уже о компиляции и\или сборке собственного ядра. А про подключение юсб-модемов в Линуксе вообще можно написать отдельный роман в стиле Кинга. Как правило, тому кто бегает в Интернет чтобы проверить аккаунт в соц.сети или узнать об очередной глупости бывших одноклассников, нет никакого дела до глубин командной строки. Большинство обычных людей на вопрос о том какая система стоит на их ПК, чаще всего затрудняются с ответом, или же путают висту с семеркой или с хр. Так что о дружелюбности Линукса лучше даже не заикаться. Увы. Линукс - удел профессионалов, экстремалов и любителей делать все руками. Автору респект!!!

  2. myr4ik07

    Не могу не выразить благодарность за столь предложенный вами интересный для чтения текст.

  3. Дмитрий

    Пересобрать ядро с готовым конфигом - нету особой сложности, кроме времени ожидания пока оно компилируется. Вот уже настроить его под себя - тут уже начинается веселье. Автору спасибо за простой мануал)

  4. Сергей Ткаченко

    @gendozz
    Согласен с вашим комментарием. USB-модемы это вообще ад. Необходимости использовать на компьютере с Linux я пока не испытывал, но приходилось изучать вопрос с Android-планшетом. Как несложно догадаться, там абсолютно те же проблемы.

  5. Сергей Ткаченко

    @myr4ik07
    Рад, что пригодилось.

  6. Сергей Ткаченко

    @Дмитрий
    Вот настроить под себя я как раз и не смогу. Увы.

    Кстати, в написанном мной есть пробел.

    Оказывается, в ядре 3.4.4 УЖЕ есть драйверы на указанную в статье карту, и они отлично работают.

    В итоге я таки влез в make menuconfig и включил недостающие драйверы.

    После очередной пересборки ядра всё работает "из коробки" и без костылей.

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