mini2440电源管理 suspend实现遇到的一些问题

内核:linux-3.4.99

bootloade:u-boot-2012-04-01

开发板:mini2440

参考:韦东山第三期视频,电源管理


边看视频边写代码边做实验,由于没有用韦老师视频中提供的现成的bootloade,image 等等,没想到一个suspend实现,把我折腾了很久,过程很曲折,但好在在各种调试中,我也学到了很多。


1.在开发板启动后 命令行键入“echo mem > /sys/power/state"没有反应?

键入之后,系统一点反应也没有 ,尝试"cat mem > /sys/power/state“后也为空。PM根本就没起来,难道PM没初始化,查看mach-smdk2440.c文件中的代码,原来我之前在学习移植linux内核代码的时候,没有PM的概念,就把PM相关的初始化代码给注释掉了(s3c_pm_init();)还原后,重新编译。cat查看就能看到支持mem suspend了。


2.使用“echo mem > /sys/power/state"进入suspend需注册唤醒源,在key驱动中的reques_irq之后,用irq_set_irq_wake函数注册,之后调用“echo mem > /sys/power/state",此时系统进入休眠。随之,问题3又来了。


3系统进入休眠后,由于我的开发板的uImage,filesystem 都是通过NFS挂载的,此时网络就中断了,明明视频上韦老师的网络还是连着的?

还是查看源码,韦老师的DM9000源码是自己重新改过的,我的dm9000用的是内核自带的源码。阅读后发现,内核自带的源码有suspend,resume函数:

static const struct dev_pm_ops dm9000_drv_pm_ops = {
.suspend = dm9000_drv_suspend,
.resume = dm9000_drv_resume,
};

当系统进入休眠后,dpm_suspended_list会调用dm9000的suspend函数,此时网络就进入了休眠,于是就断开了。当

//.pm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值