Wake-on-Lan для Qualcomm Atheros AR8161 в Ubuntu Server 18.04
У меня есть компьютер с Ubuntu Server 18.04. Обычно он выключен, но иногда у меня возникает потребность его удаленно включить, чтобы удаленно на нем работать. Решение простое и очевидное: нужно настроить Wake-on-Lan (WOL) и при необходимости отправлять компьютеру magic packet, чтобы он включился. Остается одна проблема. На некоторых чипах Qualcomm Atheros в линуксе WOL выпилен 6 лет назад.
Что делать? Надо пересобрать драйвер для сетевого адаптера с поддержкой WOL и включить его. Скачать драйвер можно отсюда. Там же есть короткая инструкция по установке. Но остается проблема с обновлениями ядра, особенно если они автоматические. Драйвер, собранный для одной версии ядра, не подойдет к другой. Я решил эту проблему радикально: собирать и устанавливать драйвер надо при каждом запуске системы. На время запуска это практически не влияет и делается добавлением нескольких строчек в rc.local.
####################################################
# Enable WOL on eth0 at start-up
rmmod alx
make -C /lib/modules/$(uname -r)/build M=/Drivers/alx modules
make -C /lib/modules/$(uname -r)/build M=/Drivers/alx modules_install
insmod /Drivers/alx/alx.ko
cp /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/atheros/alx/alx.ko /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/atheros/alx/alx.ko.good
rm /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/atheros/alx/alx.ko
cp /Drivers/alx/alx.ko /lib/modules/$(uname -r)/kernel/drivers/net/ethernet/atheros/alx/alx.ko
cp /Drivers/alx/alx.ko /Drivers/alx.ko
Поначалу во время сборки драйвера у меня возникала ошибка error: code model kernel does not support PIC mode
. Я испробовал много способов ее решения, но помог только один. В моем конкретном случае, похоже, ошибка возникала, потому тчо я обновил Ubuntu Server с 16.04 до 18.04. Процедура обновления не обновила ядро с 4.15 до 4.18. После ручного обновления все заработало.