Realtek 8168 и Ubuntu 11.10

Так случилось, что в поставленных в нашу школу после капитального ремонта компьютерах интегрированный сетевой адаптер — на Realtek 8168. При установке Ubuntu 11.10 сперва создалось впечатление, что всё работает. Но довольно быстро обнаружилось, что сеть действует как-то странно: то связь есть, то она пропадает напрочь. Поиск в Интернете дал множество ссылок на обсуждения подобных проблем с данной сетевой картой… и множество рецептов, нередко, совершенно шаманских.

В итоге — спасибо англоязычным товарищам — было найдено следующее (imho наиболее разумное) решение: драйвер Realtek 8169, установленный в Ubuntu и включающийся там и для 8168, заменяем на взятый с сайта производителя драйвер, рассчитанный именно на нашу карту. Для этого:

1. Идем на сайт Realtek и загружаем свежий LINUX driver (r8168-x.y.z.tar.bz2 — вместо x, y и  z будут числа, указывающие версию драйвера).

2. Разворачиваем загруженный архив. Из Терминала это можно сделать такой командой:

[bash]tar -jxf r8168-x.y.z.tar.bz2[/bash]

(здесь можно обойтись и без командной строки, но дальше она всё равно потребуется)

*. Если не установлены пакеты, необходимые для сборки модуля ядра из исходников, устанавливаем их:

[bash]apt-get install build-essential linux-headers-`uname -r`[/bash]

3. Переходим в каталог с исходниками и собираем модуль:

[bash]cd r8168-x.y.z
make clean modules && make install[/bash]

Итогом этого будет файл r8168.ko (он появится в каталоге src) — модуль, собранный для активного в данный момент ядра.

4. Переходим в каталог src, копируем собранный модуль ядра в соответствующую папку, а ненужный теперь r8169.ko на всякий случай переименовываем:

[bash]cd src
sudo cp r8168.ko /lib/modules/`uname -r`/kernel/drivers/net/
sudo mv /lib/modules/`uname -r`/kernel/drivers/net/r8169.ko /lib/modules/`uname -r`/kernel/drivers/net/r8169.ko.old[/bash]

5. Выгружаем ненужный модуль:

[bash]sudo rmmod r8169[/bash]

6. Перестраиваем список зависимостей модулей ядра:

[bash]sudo depmod -a[/bash]

7. Подгружаем наш новый модуль:

[bash]sudo modprobe r8168[/bash]

8. Обновляем initramfs:

[bash]sudo update-initramfs -u[/bash]

После этого сеть должна заработать нормально.

9. Отправим r8169 в блэклист:

[bash]sudo echo "blacklist r8169" >> /etc/modprobe.d/blacklist.conf[/bash]

…и, на всякий случай, укажем на обязательную загрузку модуля r8168:

[bash]sudo echo "r8168" >> /etc/modules[/bash]

(хотя, вроде бы, должно работать и без этого)

10. Перезагружаем компьютер, убеждаемся, что всё работает и после перезагрузки.

*. Если у сетевого интерфейса теперь имя eth1 вместо eth0, нужно удалить из файла

/etc/udev/rules.d/70-persistent-net.rules

две строки, заканчивающиеся на NAME=”eth0″ и NAME=”eth1″

Внимание! После обновления ядра сборку и установку модуля придется повторять!


Полезные команды:

lsmod — посмотреть, какие модули подгружены; в нашем случае полезно давать в виде:

lsmod | grep r81

lspci — посмотреть, какие устройства подключены через шину PCI, в данном случае:

lspci | grep Eth

lspci с ключом -v показывает подробную информацию об устройствах, включая используемые драйверы:

lspci -v

1 комментарий

Артём

Фух… :)))
Ребята, благодарю вас за хорошую инструкцию!!!
Два дня парился…

Всем здравия!

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