本篇文章给大家分享的是有关Linux中怎么初始化 APM,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
misc设备的主设备号是10, 而Linux APM_bios作为个misc设备, 次设备号是134。 Linux2.6.30.10内核的/drivers/char/apm-emulation.c提供了Linux APM_bios的驱动模型,也就是系统进入睡眠的入口函数,更早的版本的接口文件为:arch/arm/kernel/apm.c
在Linux APM-emulation.c中:
/* * The apm_bios device is one of the misc char devices. * This is its minor number. */ #define Linux APM_MINOR_DEV 134
这个Linux APM_bios设备通过ioctl系统调用和用户空间进行通讯, 即当用户进程通过ioctl发来suspend命令时, 它就传给内核, 使系统进入suspend状态.
1,初始化
static int __init apm_init(void) { int ret; if (apm_disabled) { printk(KERN_NOTICE "apm: disabled on user request.\n"); return -ENODEV; }
//创建一个线程, 用于处理事件队列, 工作函数是kapmd
kapmd_tsk = kthread_create(kapmd, NULL, "kapmd"); if (IS_ERR(kapmd_tsk)) { ret = PTR_ERR(kapmd_tsk); kapmd_tsk = NULL; goto out; } wake_up_process(kapmd_tsk);
//通过proc,向用户空间输出Linux APM信息
#ifdef CONFIG_PROC_FS proc_create("apm", 0, NULL, &apm_proc_fops); #endif
//注册misc设备
ret = misc_register(&apm_device); if (ret) goto out_stop; ret = register_pm_notifier(&apm_notif_block); if (ret) goto out_unregister; return 0; out_unregister: misc_deregister(&apm_device); out_stop: remove_proc_entry("apm", NULL); kthread_stop(kapmd_tsk); out: return ret; }
免责声明:本站发布的内容(图片、视频和文字)以原创、来自本网站内容采集于网络互联网转载等其它媒体和分享为主,内容观点不代表本网站立场,如侵犯了原作者的版权,请告知一经查实,将立刻删除涉嫌侵权内容,联系我们QQ:712375056,同时欢迎投稿传递力量。
Copyright © 2009-2022 56dr.com. All Rights Reserved. 特网科技 特网云 版权所有 特网科技 粤ICP备16109289号
域名注册服务机构:阿里云计算有限公司(万网) 域名服务机构:烟台帝思普网络科技有限公司(DNSPod) CDN服务:阿里云计算有限公司 百度云 中国互联网举报中心 增值电信业务经营许可证B2
建议您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流浏览器浏览本网站