#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功能所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)