[英]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。
在内核中,内存仍然是虚拟映射的,与用户空间的方式不同。
可能是0x10在保护页面或其他东西中,以捕获空指针,因此当您触摸它时,它会在内核中生成未处理的页面错误。
通常这会导致OOPS不挂起(但可以配置为导致恐慌)。 OOPS是一种意想不到的内核条件,在某些情况下可以恢复,并不一定会导致整个系统崩溃。 通常它会杀死任务(在本例中为insmod)
您是否在加载了GUI的桌面Linux系统上执行此操作? 如果您想破解内核,我建议您使用简单(即快速重启)基于文本的分发来设置Linux VM(Vmware,virtualbox等)。 你会崩溃一点,你希望它尽快重启。 此外,通过使用基于文本的分发,更容易看到内核崩溃消息(糟糕或恐慌)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.