我正在尝试使用2.6.32.40
linux内核中的本地APIC函数,但我遇到了一些问题.我想尝试向系统上的所有处理器发送不可屏蔽中断(NMI)(我使用的是Intel i7 Q740).首先,我阅读了与APIC功能相关的英特尔软件开发人员手册第3卷中的文档.它声明可以通过使用位于地址0xFEE00300的中断命令寄存器(ICR)向所有处理器广播中断.所以我写了一个带有以下init函数的内核模块来尝试写入这个寄存器:
#include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> MODULE_LICENSE("GPL"); #define SUCCESS 0 #define ICR_ADDRESS 0xFEE00300 #define ICR_PROGRAM 0x000C4C89 static int icr_init(void){ int * ICR = (int *)ICR_ADDRESS; printk(KERN_ALERT "Programing ICR\n"); *ICR = ICR_PROGRAM; return SUCCESS; } static void icr_exit(void){ printk(KERN_ALERT "Removing ICR Programing module removed"); } module_init(icr_init); module_exit(icr_exit);
但是,当我insmod这个模块时,内核崩溃并抱怨无法处理分页请求@ address 00000000fee00300.在/ proc / iomem下查看我看到这个地址在标记为“保留”的范围内
fee00000-fee00fff : reserved
我也试过使用下面的函数:
static inline void __default_local_send_IPI_allbutself(int vector)
但内核仍在抛出“无法处理分页请求”的消息并崩溃.有没有人有什么建议?为什么此内存范围标记为“保留”且未标记为由本地APIC使用?提前致谢.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。