首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从linux内核访问物理内存

问从linux内核访问物理内存
EN

Stack Overflow用户
提问于 2011-10-26 02:38:13
回答 3查看 20.6K关注 0票数 10

我们可以通过一些内核代码访问任何物理内存吗?因为,我写了一个只有init_module和exit_module的设备驱动程序。代码如下所示。

代码语言:javascript
复制
int init_module(void) {
    unsigned char *p = (unsigned char*)(0x10);
    printk( KERN_INFO  "I got %u \n", *p);
    return 0;
}

和一个虚拟的exit_module..问题是当我执行lsmod时,计算机挂起了。会发生什么?我应该得到某种许可才能进入mem的位置吗?

请解释一下..我是个初学者!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-26 06:38:36

要访问真实的物理内存,您应该使用phys_to_virt函数。如果是io内存(例如PCI内存),您应该仔细查看ioremap。

整个主题非常复杂,如果你是初学者,我建议你阅读一些内核/驱动程序开发书籍/文档。

票数 12
EN

Stack Overflow用户

发布于 2011-10-26 06:42:03

我建议阅读本书中关于记忆的章节:

http://lwn.net/Kernel/LDD3/

它可以在网上免费获得。好东西!

票数 6
EN

Stack Overflow用户

发布于 2011-10-26 14:19:01

在内核内部,内存仍然是虚拟映射的,只是方式与用户空间不同。

很有可能0x10在保护页或其他地方,以捕获空指针,因此当您接触它时,它会在内核中生成一个未处理的页错误。

通常,这会导致OOPS而不是挂起(但可以将其配置为导致死机)。OOPS是一种意外的内核情况,在某些情况下可以恢复,并不一定会导致整个系统崩溃。正常情况下,它会终止任务(在本例中为insmod)

您是在加载了GUI的桌面Linux系统上执行此操作的吗?如果你想解决内核问题,我建议你设置一个Linux虚拟机(Vmware,virtualbox等),使用一个简单的(即快速重启)基于文本的发行版。你会让它崩溃一点,你想让它尽快重启。此外,通过使用基于文本的发行版,更容易看到内核崩溃消息(Oops或panic)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7894160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档