ubuntu从休眠中恢复(Resuming from Hibernation)

本文介绍了一种解决Ubuntu 11.10升级后因swap分区更改而导致的无法从休眠状态恢复正常的方法。通过手动设置/etc/initramfs-tools/conf.d/resume中的UUID以匹配/etc/fstab中的swap UUID,并更新initramfs,可以成功解决此问题。

https://help.ubuntu.com/community/UsingUUID#Grub

升级到ubuntu 11.10后,由于更改了swap分区,导致每次机器从休眠恢复时直接进入了重启的界面,而无法恢复到休眠时的状态。从ubuntu的帮助中找到如下解决方法:


系统不会自动更新 /etc/initramfs-tools/conf.d/resume,必须手动设置确保RESUME=UUID=<some_UUID><some_UUID>/etc/fstab文件中swap对应 UUID相同

首先cat这两个文件:

cat /etc/initramfs-tools/conf.d/resume
cat /etc/fstab | grep swap

如果 UUID不匹配或者 resume 文件中没有UUID,编辑resume:

gksudo gedit /etc/initramfs-tools/conf.d/resume
sudo nano -Bw /etc/initramfs-tools/conf.d/resume

并添加正确的UUID,如下:

  •  RESUME=UUID=<swap_UUID>

然后执行如下命令:

sudo update-initramfs -u

经试验,该方法可以解决无法从休眠状态恢复的问题。

休眠唤醒功能中,`suspend()` 函数起着关键作用。它负责将系统或设备从正常运行状态转换到休眠状态,以降低功耗。 从代码层面来看,在 Linux 系统里,`SET_SYSTEM_SLEEP_PM_OPS` 宏定义中会关联 `suspend()` 函数,它会被赋值给 `suspend`、`freeze`、`poweroff` 等操作,这表明 `suspend()` 函数在多种休眠相关状态下都会被调用。例如在 `SIMPLE_DEV_PM_OPS` 结构体定义中,就包含了 `SET_SYSTEM_SLEEP_PM_OPS` 对 `suspend()` 函数的设置,这意味着设备的电源管理操作会使用该函数来处理休眠相关事务 [^1]。 进入休眠模式时,`suspend()` 函数会执行一系列操作。在系统休眠方面,它会关闭大多数功能时钟组,使得系统进入低功耗状态。像在 ZYNQ - Linux 配置休眠模式中,除了一个 CPU、侦听控制单元(SCU)和唤醒设备外,其他大部分设备会停止工作,从而大大降低功耗 [^4]。 在设备层面,`suspend()` 函数会处理设备的休眠操作。例如在中断唤醒相关场景中,如果在中断处理里调用某些资源(如 i2c),可能会因 i2c 处于休眠状态而出现问题,这也从侧面反映出 `suspend()` 函数会让设备进入休眠状态 [^3]。 以下是一个简单的伪代码示例,展示 `suspend()` 函数在设备驱动中的使用: ```c #include <linux/module.h> #include <linux/device.h> // 定义 suspend 函数 static int my_device_suspend(struct device *dev) { // 执行设备休眠操作,如关闭设备时钟等 printk(KERN_INFO "My device is going to suspend.\n"); return 0; } // 定义 resume 函数 static int my_device_resume(struct device *dev) { // 执行设备唤醒操作,如重新开启设备时钟等 printk(KERN_INFO "My device is resuming.\n"); return 0; } // 定义设备的电源管理操作 SIMPLE_DEV_PM_OPS(my_device_pm_ops, my_device_suspend, my_device_resume); // 设备驱动相关代码 static struct platform_driver my_device_driver = { .driver = { .name = "my_device", .pm = &my_device_pm_ops, }, // 其他驱动成员 }; module_platform_driver(my_device_driver); MODULE_LICENSE("GPL"); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值