Debian 上带有 vanilla 内核的 WoL 损坏

Debian 上带有 vanilla 内核的 WoL 损坏

我使用的是 Debian Buster/Sid,但我喜欢自己编译新的 vanilla 内核,只是为了试用一下。但是我遇到了一个反复出现的问题:如果我使用 Debian 打包的内核,Wake On Lan 可以正常工作,我可以通过向 PC 发送魔法包来唤醒它。如果我使用自己编译的 vanilla 内核,则不行。

以下是我使用的程序:

$ 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 数据包,但我的 PC 无法启动。如果我使用 Debian 打包的内核(4.19.0-2,对应于上游 4.19.16)启动它,然后关闭它,那么 WoL 数据包将按预期工作,我的 PC 可以启动。

这是 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

我错过了什么?

答案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 配置。

相关内容