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. Разворачиваем загруженный архив. Из Терминала это можно сделать такой командой:

tar -jxf r8168-x.y.z.tar.bz2

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

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

apt-get install build-essential linux-headers-`uname -r`

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

cd r8168-x.y.z
make clean modules && make install

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

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

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

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

sudo rmmod r8169

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

sudo depmod -a

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

sudo modprobe r8168

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

sudo update-initramfs -u

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

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

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

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

sudo echo "r8168" >> /etc/modules

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

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

One Comment

Add a Comment