当前位置:  技术问答>linux和unix

内核程序会诊 高手请进!!

    来源: 互联网  发布时间:2015-05-13

    本文导语:  写了一个内核程序,想获得用户空间的虚拟地址所对应的物理地址,但是老是有问题,请大侠们帮忙! 内核:linux 2.4.20 static char * virt_to_phy(struct task_struct * p,  struct vm_area_struct *vm,  unsigned long addr) { pgd_t...

写了一个内核程序,想获得用户空间的虚拟地址所对应的物理地址,但是老是有问题,请大侠们帮忙!

内核:linux 2.4.20

static char * virt_to_phy(struct task_struct * p,
 struct vm_area_struct *vm,
 unsigned long addr) {
pgd_t *pgd;
pmd_t *page_middle;
pte_t *pte;
pgd = pgd_offset(p->mm, addr);
        page_middle =ckpt_pmd_offset(pgd, addr);
        pte = pte_offset_kernel(page_middle,addr);
if (!pte_present(*pte)) {
  printk("ERROR: Page for %08lx still not present!n", addr);
  return NULL;
}
return (char *)(page_address(pte_page(*pte)) + (addr & ~PAGE_MASK));
      经过初步调试 ,好像错误在最后一行。

|
通过找资料,我发现:
1,内核编译时,关于x86cpu 有两种映射方式,他们一宏定义 CONFIG_x86_PAE来区分,是不是你的方法和内核的编译方式相冲突:
(很可能是这种原因,尤其是你改动后能转换一部分,我查了一下原代码,但还不能肯定)
2,pte_offset_kernel() ckpt_pmd_offset()两个函数我从2。4。18和2。4。21中都没有找到,不能确定其运行方式!
  可以用pmd_offset和pte_offset 试一下!
3,看过 《Linux内核源代码情景分析》吗,存储管理一章讲得比较清楚,网上有下载的
                  应该可以解决你的问题了

|
是否考虑到有的虚拟地址没有物理地址?

    
 
 

您可能感兴趣的文章:

  • ubuntu升级内核时无法解压内核,求高手解答
  • Android 内核移植问题 要求识别SATA硬盘 请问内核的make menuconfig 要如何配置?求高手
  • 高手请进,内核构造UDP包的问题
  • 请教高手:如何学习内核编程?
  • 请问高手,内核升级到2.6以后,rpm的问题解决了吗?
  • 高手来谈谈:C++写内核的可行性
  • linux内核里面的所有头文件,有没有整理过的,请高手指点!谢谢!!!
  • 请问高手们,有没有一款工具可以测试内核内存泄露的?
  • 万能的CSDN啊,100分请教高手一个编译内核传参的问题!
  • iptables已打入string match补丁,编译内核无法找到该项,求助高手!
  • 求高手提供编译linux内核的经验
  • 如何配置linux内核!! 请高手多多指点!!! 多谢多谢!!!
  • 内核版本兼容性问题,高手请进!
  • 内核启动错误,高分请高手指点。。。
  • 关于linux内核的ioctl函数,请高手指点一下
  • 有那些高手将linux内核源代码完整的看过一遍啊
  • LINUX内核高手帮帮忙
  • 请教内核高手,抽空解释一下系统中断调用处理流程
  • 各位高手:red hat linux 7.2 中如何配置、重新生成内核啊?
  • 哪位高手能详细的讲讲内核中slab allocator到底是什么?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux内核中影响tcp三次握手的一些协议配置
  • Fedora Core 2自带的内核升级程序下载下来内核后,要不要再编译一遍内核?
  • TCP协议四次断连过程介绍及Linux内核协议栈中相关设置项
  • 进程内核栈和操作系统内核栈的关系
  • CentOS 6内核升级:下载编译启用新内核版本详细过程
  • Linux中内核线程不访问内核态地址空间?
  • Linux进程的内核栈和用户栈概念,相互关系及切换过程
  • 2.6内核下编译2.4内核
  • linux内核中的likely宏和unlikely宏介绍及用法
  • 谁能提供kgdb内核补丁内核模块的下载
  • CentOS 6.5 下载地址及如何升级内核(kernel)版本到 3.10.28
  • 编译新内核后怎么进入原来内核
  • Linux下c/c++开发之程序崩溃(Segment fault)时内核转储文件(core dump)生成设置方法
  • 请问linux中如何判断内核是否已经启动。(在内核中写程序)
  • docker使用的技术之Container内核原理介绍
  • 内核模块跟内核版本不匹配????????
  • 请教:如何安装新内核(rpm包)而不同原来得内核冲突?? 在线等待!!
  • linux为什么要升级内核?升级内核有何作用?
  • 内核升级后,如何在新的内核中加载显卡驱动?
  • iptables已打入string match补丁,编译内核无法找到该项,求助高手! iis7站长之家
  • 不重新编译内核能修改内核函数吗?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3