内存管理 – 帮助Linux中的APIC功能

内存管理 – 帮助Linux中的APIC功能,第1张

概述我正在尝试使用2.6.32.40 linux内核中的本地APIC函数,但我遇到了一些问题.我想尝试向系统上的所有处理器发送不可屏蔽中断(NMI)(我使用的是Intel i7 Q740).首先,我阅读了与APIC功能相关的英特尔软件开发人员手册第3卷中的文档.它声明可以通过使用位于地址0xFEE00300的中断命令寄存器(ICR)向所有处理器广播中断.所以我写了一个带有以下init函数的内核模块来尝 我正在尝试使用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 0x000C4C89static 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使用?提前致谢.

解决方法 APIC地址是物理内存地址,但您尝试将其作为线性内存地址访问 – 这就是您的第一种方法不起作用的原因.内存被标记为“保留”,因为它属于APIC,而不是真正的内存.

您应该使用内部内核函数.为此,您应该包含< asm / APIc.h>并使用:

APIc->send_IPI_allbutself(vector);
总结

以上是内存溢出为你收集整理的内存管理 – 帮助Linux中的APIC功能全部内容,希望文章能够帮你解决内存管理 – 帮助Linux中的APIC功能所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1017669.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存