繁体   English   中英

从linux内核访问物理内存

[英]accessing physical memory from linux kernel

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

int init_module(void) {
    unsigned char *p = (unsigned char*)(0x10);
    printk( KERN_INFO  "I got %u \n", *p);
    return 0;
}

和一个虚拟的exit_module ..问题是当我做lsmod时计算机挂起..会发生什么? 我应该获得访问mem位置的某种许可吗?

请解释..我是初学者!

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

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

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

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

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

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

可能是0x10在保护页面或其他东西中,以捕获空指针,因此当您触摸它时,它会在内核中生成未处理的页面错误。

通常这会导致OOPS不挂起(但可以配置为导致恐慌)。 OOPS是一种意想不到的内核条件,在某些情况下可以恢复,并不一定会导致整个系统崩溃。 通常它会杀死任务(在本例中为insmod)

您是否在加载了GUI的桌面Linux系统上执行此操作? 如果您想破解内核,我建议您使用简单(即快速重启)基于文本的分发来设置Linux VM(Vmware,virtualbox等)。 你会崩溃一点,你希望它尽快重启。 此外,通过使用基于文本的分发,更容易看到内核崩溃消息(糟糕或恐慌)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM