Linux APM在ARM中具體實現(xiàn)初始化
misc設(shè)備的主設(shè)備號是10, 而Linux APM_bios作為個misc設(shè)備, 次設(shè)備號是134。 Linux2.6.30.10內(nèi)核的/drivers/char/apm-emulation.c提供了Linux APM_bios的驅(qū)動模型,也就是系統(tǒng)進入睡眠的入口函數(shù),更早的版本的接口文件為: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設(shè)備通過ioctl系統(tǒng)調(diào)用和用戶空間進行通訊, 即當用戶進程通過ioctl發(fā)來suspend命令時, 它就傳給內(nèi)核, 使系統(tǒng)進入suspend狀態(tài).
1,初始化
 
- static int __init apm_init(void)
 - {
 - int ret;
 - if (apm_disabled) {
 - printk(KERN_NOTICE "apm: disabled on user request.\n");
 - return -ENODEV;
 - }
 
//創(chuàng)建一個線程, 用于處理事件隊列, 工作函數(shù)是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設(shè)備
 
- 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;
 - }
 
【編輯推薦】
- Linux 查看磁盤空間實現(xiàn)代碼介紹
 - Linux操作系統(tǒng)需要微軟的十大幫助
 - 探尋Linux到底需要多低的配置
 - Linux測試工具tcpdump監(jiān)視TCP/IP連接命令介紹
 - Linux流量控制實例應(yīng)用介紹
 















 
 
 





 
 
 
 