页次: 1
*为什么要特地来水这一篇呢,因为我发现把kexec当重启用真的好爽。。。
*至于说为什么kexec会和nvidia同时出现。。。好吧,我闲的
首先,(对于我来说的)正常操作是这样的:
> sudo kexec -l /boot/vmlinuz-linux-custom --reuse-cmdline
> sudo kexec -e
当然,高贵的systemd-boot用户可以使用systemctl kexec大法
但是当nvidia出现的时候画风就不对了
> startx
...
(EE) No Screen Found
大概就是这样的情况
当然我们是知道为什么的,因为N卡在kexec的时候没有正确关闭,所以在重新初始化N卡的时候就出现了bug
那么我们要做的就是,在kexec之前关闭N卡
> sudo rmmod nvidia_drm
> sudo rmmod nvidia_modeset
> sudo rmmod nvidia_uvm
> sudo rmmod nvidia
> sudo tee /sys/bus/pci/devices/0000:01:00.0/remove <<<1
用bbswitch的话操作会有一些区别。
其中0000:01:00.0是我这台机子N卡的pci地址,可以用lspci | grep -i nvidia | awk '{print $1}'查到
但是显然,
rmmod: ERROR: Module nvidia_drm is in use
那么,我们的脚本最后就变成了这样的:
trap "" 1
pkill xinit
sudo rmmod nvidia_drm
sudo rmmod nvidia_modeset
sudo rmmod nvidia_uvm
sudo rmmod nvidia
sudo tee /sys/bus/pci/devices/0000:01:00.0/remove <<<1
sudo kexec -l /boot/vmlinuz-linux-custom --reuse-cmdline
sudo kexec -e
不过高贵的nvidia-xrun用户们显然是不需要这样做的,因为nvidia-xrun在pkill xinit后会自动关掉N卡。
所以(如果你的xserver是用nvidia-xrun打开的并且你用systemd--boot),
trap "" 1
pkill xinit
sudo systemctl kexec
所以原来这个破事就这么简单。。。
不过像我这种还有其他事情需要担心的人,比如说这条看门狗,还有一些额外的工作需要处理,
[Service]
Type=idle
*真的超快的,比重启快多了。
ecmascript是世界上最好的语言
离线
没用过,systemctl kexec似乎需要UEFI才会工作,这个是所谓内核热更新?用户态能保持吗?还是说就是个快速重启,当前内核作为bootloader启动当初kexec -l加载好的内核但是用户态还是要重启?
反社会,精神极其不稳定,随时可能炸碎身边所有人
离线
不能。这个只是内核 exec 内核,用户空间需要重建。也就是只内核重启,不走硬件的重启流程。
离线
没用过,systemctl kexec似乎需要UEFI才会工作,这个是所谓内核热更新?用户态能保持吗?还是说就是个快速重启,当前内核作为bootloader启动当初kexec -l加载好的内核但是用户态还是要重启?
kexec相当于是个快速重启
ecmascript是世界上最好的语言
离线
页次: 1