Назад | Перейти на главную страницу

сломанный WoL с ванильным ядром на Debian

Я использую Debian Buster / Sid, но мне нравится сам компилировать новые ванильные ядра, просто чтобы опробовать их. Однако я сталкиваюсь с повторяющейся проблемой: если я использую пакетное ядро ​​Debian, Wake On Lan работает правильно, и я могу разбудить свой компьютер, отправив ему волшебный пакет. Если я использую ванильное ядро, которое компилирую сам, это не так.

Вот процедура, которую я использую:

$ wget 'https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.2.tar.xz'
$ tar xJf linux-5.0.2.tar.xz 
$ cd linux-5.0.2/
linux-5.0.2 $ cp /boot/config-4.19.0-2-amd64 .config
linux-5.0.2 $ make oldconfig

[Вопросы KCONFIG опущены] Я кое-что добавляю, но никогда ничего не удаляю

linux-5.0.2 $ CONCURRENCY_LEVEL=20 fakeroot make-kpkg --initrd binary-arch
[...]
linux-5.0.2 $ cd..
$ su -
# dpkg -i linux-image-*.deb linux-headers-*.deb
# reboot

[... загружается новое ядро ​​...]

# init 0

Теперь я пытаюсь отправить волшебный пакет WoL с другого сетевого устройства, но мой компьютер не запускается. Если я загружаю его с упакованным ядром Debian (4.19.0-2, что соответствует восходящей версии 4.19.16), а затем выключаю его, пакет WoL работает должным образом, и мой компьютер запускается.

Вот результат lsmod, потому что меня об этом просили:

$ lsmod 
Module                  Size  Used by
nft_chain_route_ipv4    16384  1
xt_CHECKSUM            16384  1
nft_chain_nat_ipv4     16384  4
ipt_MASQUERADE         20480  1
xt_conntrack           16384  1
ipt_REJECT             16384  1
nf_reject_ipv4         16384  1 ipt_REJECT
nft_counter            16384  34
xt_tcpudp              20480  2
nft_compat             20480  27
devlink                73728  0
nf_tables             147456  188 nft_chain_route_ipv4,nft_compat,nft_chain_nat_ipv4,nft_counter
nfnetlink              16384  2 nft_compat,nf_tables
tun                    57344  5
bridge                188416  0
stp                    16384  1 bridge
llc                    16384  2 bridge,stp
binfmt_misc            24576  1
nls_ascii              16384  1
nls_cp437              20480  1
vfat                   24576  1
fat                    81920  1 vfat
edac_mce_amd           28672  0
kvm_amd               102400  0
ccp                    94208  1 kvm_amd
rng_core               16384  1 ccp
snd_hda_codec_realtek   122880  1
snd_hda_codec_hdmi     61440  1
kvm                   733184  1 kvm_amd
snd_hda_codec_generic    90112  1 snd_hda_codec_realtek
ledtrig_audio          16384  2 snd_hda_codec_generic,snd_hda_codec_realtek
irqbypass              16384  1 kvm
crct10dif_pclmul       16384  1
snd_hda_intel          45056  6
amdgpu               3928064  17
crc32_pclmul           16384  0
ghash_clmulni_intel    16384  0
snd_hda_codec         155648  4 snd_hda_codec_generic,snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec_realtek
joydev                 28672  0
aesni_intel           372736  0
aes_x86_64             20480  1 aesni_intel
snd_hda_core           98304  5 snd_hda_codec_generic,snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec,snd_hda_codec_realtek
crypto_simd            16384  1 aesni_intel
chash                  16384  1 amdgpu
cryptd                 24576  3 crypto_simd,ghash_clmulni_intel,aesni_intel
eeepc_wmi              16384  0
asus_wmi               32768  1 eeepc_wmi
snd_hwdep              20480  1 snd_hda_codec
sparse_keymap          16384  1 asus_wmi
snd_pcm               118784  4 snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec,snd_hda_core
rfkill                 32768  2 asus_wmi
gpu_sched              36864  1 amdgpu
glue_helper            16384  1 aesni_intel
ttm                   114688  1 amdgpu
snd_timer              45056  1 snd_pcm
drm_kms_helper        204800  1 amdgpu
video                  49152  1 asus_wmi
pcc_cpufreq            20480  0
pcspkr                 16384  0
snd                    98304  20 snd_hda_codec_generic,snd_hda_codec_hdmi,snd_hwdep,snd_hda_intel,snd_hda_codec,snd_hda_codec_realtek,snd_timer,snd_pcm
drm                   487424  12 gpu_sched,drm_kms_helper,amdgpu,ttm
evdev                  24576  31
sg                     36864  0
soundcore              16384  1 snd
i2c_algo_bit           16384  1 amdgpu
sp5100_tco             20480  0
efi_pstore             16384  0
k10temp                16384  0
efivars                20480  1 efi_pstore
fam15h_power           16384  0
button                 16384  0
acpi_cpufreq           28672  0
wmi_bmof               16384  0
mxm_wmi                16384  0
iptable_nat            16384  0
nf_nat_ipv4            16384  3 ipt_MASQUERADE,nft_chain_nat_ipv4,iptable_nat
nf_nat                 36864  1 nf_nat_ipv4
nf_conntrack          159744  4 xt_conntrack,nf_nat,ipt_MASQUERADE,nf_nat_ipv4
nf_defrag_ipv6         24576  1 nf_conntrack
nf_defrag_ipv4         16384  1 nf_conntrack
ecryptfs              122880  0
parport_pc             32768  0
ppdev                  24576  0
nfsd                  425984  13
lp                     20480  0
auth_rpcgss            69632  1 nfsd
nfs_acl                16384  1 nfsd
lockd                 118784  1 nfsd
parport                61440  3 parport_pc,lp,ppdev
grace                  16384  2 nfsd,lockd
sunrpc                421888  18 nfsd,auth_rpcgss,lockd,nfs_acl
efivarfs               16384  1
ip_tables              28672  1 iptable_nat
x_tables               49152  7 xt_conntrack,nft_compat,xt_tcpudp,ipt_MASQUERADE,xt_CHECKSUM,ipt_REJECT,ip_tables
autofs4                49152  2
ext4                  733184  2
crc16                  16384  1 ext4
mbcache                16384  1 ext4
jbd2                  126976  1 ext4
fscrypto               36864  1 ext4
dm_mod                151552  3
hid_generic            16384  0
usbhid                 61440  0
hid                   147456  2 usbhid,hid_generic
raid10                 65536  1
sd_mod                 53248  13
raid456               176128  0
async_raid6_recov      24576  1 raid456
async_memcpy           20480  2 raid456,async_raid6_recov
async_pq               20480  2 raid456,async_raid6_recov
async_xor              20480  3 async_pq,raid456,async_raid6_recov
async_tx               20480  5 async_pq,async_memcpy,async_xor,raid456,async_raid6_recov
xor                    24576  1 async_xor
raid6_pq              122880  3 async_pq,raid456,async_raid6_recov
libcrc32c              16384  3 nf_conntrack,nf_nat,raid456
crc32c_generic         16384  0
raid1                  49152  1
raid0                  24576  1
multipath              20480  0
linear                 20480  0
md_mod                167936  8 raid1,raid10,raid0,linear,raid456,multipath
ohci_pci               20480  0
ahci                   40960  9
libahci                40960  1 ahci
xhci_pci               20480  0
ohci_hcd               57344  1 ohci_pci
ehci_pci               20480  0
libata                278528  2 libahci,ahci
crc32c_intel           24576  3
r8169                  90112  0
xhci_hcd              258048  1 xhci_pci
realtek                20480  1
ehci_hcd               94208  1 ehci_pci
libphy                 86016  2 r8169,realtek
i2c_piix4              28672  0
usbcore               286720  7 xhci_hcd,ohci_hcd,ehci_pci,usbhid,ehci_hcd,xhci_pci,ohci_pci
scsi_mod              241664  3 sd_mod,libata,sg
wmi                    36864  3 asus_wmi,wmi_bmof,mxm_wmi

А вот конфигурации модулей в /etc/modprobe.d/:

blacklist microcode
blacklist radeon
options md_mod start_ro=1
options cirrus modeset=1
options mgag200 modeset=1

Что мне не хватает?

Поскольку вы используете модуль Realtek (r8169), Я считаю, что это ожидаемое поведение перед фиксацией fa6821c (r8169: улучшена обработка WoL). После небольшого перебора драйвер в конечном итоге делегировал выбор пользовательскому пространству, и только упомянутая последняя фиксация восстанавливала ранее известное поведение:

Кроме того, мы сообщаем, что WoL отключен в get_wol, что соответствует
это устройство не поддерживает пробуждение.

Это означает, что с версией, которую вы используете, ваш systemd видит WoL как уже настроенный, хотя, возможно, ему все еще придется запросить это.

Конечно, у пользователя все еще есть возможность переопределить это, например, ethtool.

Итак, вам просто нужно протестировать WoL после этого ручного шага. Заменить g если вы используете другой пакет пробуждения, замените enp1s0 если у вашего сетевого интерфейса другое имя:

root@machine:~ # ethtool -s enp1s0 wol g

Если эта ручная установка работает с вашей текущей сборкой 5.0.2, вы можете ожидать, что будущая версия ядра (или HEAD, прямо сейчас) также будет отражать вашу конфигурацию systemd.