С выходом ядра Linux 3.15 появились проблемы с компиляцией "ядерного" модуля r8168 для некоторых сетевых карт Realtek. Поскольку разработчики Realtek никогда особой оперативностью не отличались, то те люди, которые решили использовать r8168 вместо встроенного в ядро (и безупречно собирающегося) r8169 столкнулись с невозможностью полноценно пользоваться новым ядром. И в самом деле, как так, без доступа к интернету? :-)
Ниже решение с использованием отзывов и патчей, найденных на просторах сети.
Для ядра 3.15 достаточно было поменять в файле r8168_n.c (устаревшую?) функцию PREPARE_DELAYED_WORK на INIT_DELAYED_WORK и проблема решалась. В случае с ядром 3.16 потребовалось искать патч.
Собственно, вот и он, delayed_work_ethtool_ops_fix2.patch:
--- r8168-8.038.00/src/r8168_n.c.origДля Gentoo проблема решается так:
+++ r8168-8.038.00/src/r8168_n.c
@@ -17542,7 +17542,11 @@ rtl8168_init_one(struct pci_dev *pdev,
RTL_NET_DEVICE_OPS(rtl8168_netdev_ops);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,16,0)
SET_ETHTOOL_OPS(dev, &rtl8168_ethtool_ops);
+#else
+ dev->ethtool_ops = &rtl8168_ethtool_ops;
+#endif
dev->watchdog_timeo = RTL8168_TX_TIMEOUT;
dev->irq = pdev->irq;
@@ -19119,7 +19123,11 @@ static void rtl8168_schedule_work(struct
{
struct rtl8168_private *tp = netdev_priv(dev);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,15,0)
PREPARE_DELAYED_WORK(&tp->task, task);
+#else
+ INIT_DELAYED_WORK(&tp->task, task);
+#endif
schedule_delayed_work(&tp->task, 4);
}
#endif
- Кладём патчик в /etc/portage/patches/net-misc/r8168/. Название файла особого значения, вроде бы, не имеет. Если субдиректории net-misc и r8168 не созданы - самое время их создать, mkdir -p в помощь.
- В ebuild r8168 (в моём случае находится по адресу /usr/portage/net-misc/r8168/r8168-8.038.00.ebuild, в Вашем может быть иным, если Вы используете другую версию r8168) добавляем возможность использовать пользовательские патчи из /etc/portage/patches - вставляем перед секцией pkg_setup следующее:
src_prepare() {
epatch_user
}
- После этого сохраняем ebuild и делаем digest, чтобы portage "ознакомился" с размером нового ebuild'а с помощью
ebuild /usr/portage/net-misc/r8168/r8168-8.038.00.ebuild digestПосле этого модуль можно компилировать. Проверено на ядрах 3.15.8 и 3.16.0, всё работает :-)
Комментариев нет:
Отправка комментария