我使用的是 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 配置。