回答
我解決的解決方案是使用通知鏈。在更高版本的內核上,您可以註冊register_pm_notifier。如果您的內核不支持該API,您可以使用通知程序cpu hot-plug events(這似乎是KVM使用的)。在進入和退出的過程中,CPU熱插拔通知器鏈會觸發。
的ACPI Howto可能會給你一個很好的領先地位......
不是很有幫助。他正在尋找他可以在他的模塊中使用的導出的FP符號,以便通知特定的事件。這實際上是一個非常好的問題,特別是對於可能無意中使用BKL for ioctl的模塊。 – 2010-05-01 03:26:51
@Tim Post;感謝您的更正。 – 2010-05-01 05:05:41
我敢肯定你想acpi_install_fixed_event_handler()
,在acpi/acpi.h
發現,在acpi/actypes.h
發現的一般事件(從acpi.h
包括在內)。
acpi_install_fixed_event()
的第二個參數需要u32
類型的處理程序,最後一個參數是void *context
。我找不到的是上下文可能存在的可能性列表。然而,看起來你只是在事件上輸入的內容,這意味着你可能不關心上下文。不是相當於回調,但結果相同。
如果您註冊固定處理程序(例如ACPI_EVENT_POWER_BUTTON
或ACPI_EVENT_SLEEP_BUTTON
),則應在相應事件中輸入您的處理程序。我不是100%肯定ACPI_EVENT_SLEEP_BUTTON
是你想要的,也就是說我不能確定它是否與系統自己睡覺的事件相同。當然,測試和進一步調查是讀者的練習。
使用它的一個例子可以在drivers/rtc/rtc-cmos.c
找到。
請小心包裹從acpi.h任何代碼
#ifdef CONFIG_ACPI
....
#endif /* CONFIG_ACPI */
我可能是完全錯誤的在這裏,我還沒有實際需要爲任何我寫的司機做到這一點。以上是大約30分鐘通過2.6.32.8來源挖掘的結果,這可能與您正在使用的內核完全不同。
請留下評論,如果我遠離基地:)我認爲這是你在找什麼。
附加
至於許可,其出口:
drivers/acpi/acpica/evxface.c:ACPI_EXPORT_SYMBOL(acpi_install_fixed_event_handler)
不
*_EXPORT_SYMBOL_GPL()
...所以你應該使用它沒有任何問題,無論你恰巧是這樣做。
最後,這是一個非常好的問題,可能會在Linux Kernel郵件列表中得到很好的接收。如果有疑問,請在那裏詢問。即使這個「正常工作」,確認它也是一個好主意。
感謝您的迴應。不幸的是,測試顯示這個回調只在實際按鈕按下時調用。 – lucas 2010-05-03 18:40:08
@lucas - 它是一種什麼樣的設備? Chardev,PCI,...? – 2010-05-03 19:20:07
這取決於你有什麼樣的驅動程序。例如,如果您有一個驅動程序註冊了platform_device_register()
,則struct platform_driver
包含一個.suspend
成員用於設備的暫停回調。對於PCI設備,您傳遞給pci_register_driver()
的struct pci_driver
同樣包含.suspend
成員。
大多數設備類應提供類似的機制。
- 1. Windows驅動程序卸載掛起
- 2. 如何確定DirectX 11驅動程序掛起的原因
- 3. Linux如何測試PCIe驅動程序?
- 4. 呼叫到MySQL cursor.execute()(Python的驅動程序)掛
- 5. 在Linux驅動程序中的PWM insmod
- 6. 設備驅動程序在linux中
- 7. 帶等待隊列掛起系統的Linux驅動程序代碼
- 8. Windows驅動程序編程或Linux驅動程序編程?
- 9. Chrome驅動程序在執行期間間歇性掛起
- 10. Firefox驅動程序在使用Jenkins節點時掛起創建
- 11. I2C linux驅動程序
- 12. 學習linux驅動程序
- 13. Linux驅動程序phys_mem_access_prot undefined
- 14. Linux驅動程序和device.h
- 15. Linux設備驅動程序
- 16. Linux TTY和驅動程序
- 17. 訪問Linux驅動程序
- 18. Linux SPI驅動程序crasj
- 19. IE驅動程序丟棄後,IEDriverServer.exe進程仍然掛起
- 20. 如何在Linux中調試多線程掛起進程?
- 21. 如何使用android/linux電源驅動程序註冊設備驅動程序?
- 22. 嵌入式Linux的Linux驅動程序
- 23. 如何在Linux中安全地刪除blockdevice驅動程序
- 24. Pci驅動程序如何在Linux中工作
- 25. 我們如何在linux驅動程序代碼中使用kmalloc
- 26. 如何在Linux UVC驅動程序中啓用UVC_QUIRK_FIX_BANDWIDTH怪癖?
- 27. 設備如何鏈接到驅動程序在Linux中
- 28. 如何在linux中創建內置設備驅動程序
- 29. 如何在Linux Ubuntu中編譯驅動程序/內核模塊?
- 30. malloc在Linux中掛起
您正在使用哪個版本的內核? – 2010-05-01 03:27:29
我正在使用內核2.6及更高版本。 – lucas 2010-05-03 18:39:32
這是一個chardev,PCI設備...? – 2010-05-03 19:18:56