微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从Linux内核访问物理内存

我们可以通过一些内核代码访问任何物理内存吗? 因为,我写了一个只有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位置?

好心解释..我是初学者!

如何调用MyChecksum而不是KernelChecksum(KernelChecksum汇编编码)

开发没有信息的驱动程序

这个内联汇编的意义是什么(:“0”(THREAD_SIZE – 1))在Linux内核2.6.11中为i386

虚拟内存分配没有物理内存分配

如何在Process Explorer中获得进程开始地址的“名称”?

强制驱动程序与设备匹配

有没有办法让Splint或类似的静态检查器与Linux内核模块一起工作?

这是在ntoskrnl.exe tolower的实施中的一个错误

为什么mm_struct-> start_stack和vm_area_struct-> start不指向相同的地址?

内核内存在Windows操作系统中包含什么?

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

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

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

http://lwn.net/coreel/LDD3/

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

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

这个机会是0x10是在一个守卫页面或什么东西,捕捉空指针,所以当你触摸它时,它会在内核中产生一个未处理的页面错误

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

你是否在桌面Linux系统上加载了GUI? 我建议你设置一个Linux虚拟机(Vmware,virtualBox等),如果你想破解内核的话,用一个简单的(即快速重启)文本分发。 你会崩溃一下,你想它尽快重新启动。 另外通过使用基于文本的分发,更容易看到内核崩溃消息(糟糕或恐慌)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐