我想了解内核并尝试打印一些组成内核格局的基本数据结构的一些时间,但不成功。我的问题是,给定一个内存地址,我希望能够打印该地址的内容。从指定的内核访问内核内存
例如,我有一个函数来确定IDT的位置。它返回(void *)
的订单0xffff81b8c0000fff
。但是,每当我尝试printk
那个地址时,结果都是内核恐慌。我知道有防止从用户空间访问内核内存的保护措施,但我试图在start_kernel内部执行此操作,在那里我会认为它们是可读的。
的代码是:
idt_ptr = sidt(); // returns (void *)
printk(KERN_INFO "680: IDT TABLE, FIRST ENTRY\n");
//entry is 64 bits
printk(KERN_INFO "680: %llx\n", *(unsigned long long *)idt_ptr);
下面是使这一尝试后发生的核恐慌的末尾:
看来我需要的读访问的信号,但这不是一个任意的地址吗?
从我在操作系统开发方面的经验来看,好像是触发了页面错误。当您尝试访问您不应该或不存在的分页内存时,会发生这种情况。不幸的是,我不知道更多我可以说帮助你。 – user99545 2012-04-16 02:33:59