免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1453 | 回复: 4
打印 上一主题 下一主题

高手,求助,大家好,补丁里面有这么一段代码,不是很懂,帮忙解释 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-04-02 16:36 |只看该作者 |倒序浏览
补丁里面有这么一段代码,不是很懂,帮忙解释,这段代码功能是做什么的?能详细点更好   
谢谢,大家
case PROC_PID_MEM_PHYS_ADDR:
+        if ( copy_from_user (&addr, (void *) arg, sizeof addr) )
+        {
+            return -EFAULT;
+            break;
+        }
+        read_lock (&tasklist_lock);
+        tsk = get_task (inode->i_ino >> 16);
+        if (!tsk)
+        {
+            read_unlock (&tasklist_lock);
+            return -ESRCH;
+        }
+        pte = pte_offset (pmd_offset (pgd_offset (tsk->mm, addr), addr), addr);
+        if ( !pte_present (*pte) )
+        {
+            read_unlock (&tasklist_lock);
+            return -EINVAL;
+            break;
+        }
+        addr = __pa (pte_page (*pte)) + (addr & (PAGE_SIZE-1));
+        read_unlock (&tasklist_lock);
+        return copy_to_user ( (void *) arg, &addr, sizeof addr ) ? -EFAULT : 0;
+        break

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
2 [报告]
发表于 2011-04-02 21:52 |只看该作者
看上去像是获得物理地址的一段代码
用户空间传过来的addr
获得task
然后通过task的mm来获得便宜
然后后面就可以或得到物理地址,然后将物理地址返回给用户空间

就是这么个理解,希望没误人子弟

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
3 [报告]
发表于 2011-04-02 21:52 |只看该作者
看上去像是获得物理地址的一段代码
用户空间传过来的addr
获得task
然后通过task的mm来获得便宜
然后后面就可以或得到物理地址,然后将物理地址返回给用户空间

就是这么个理解,希望没误人子弟

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
4 [报告]
发表于 2011-04-02 22:11 |只看该作者
PROC_PID_MEM_PHYS_ADDR
根据这个名字  再根据函数  看起来就是把用户空间传进来的虚拟内存地址以物理地址返回。

tsk = get_task (inode->i_ino >> 16);
这句没看懂

论坛徽章:
0
5 [报告]
发表于 2011-04-03 23:00 |只看该作者
非常感谢 T-Bagwell 和 amarant (h)
你们的解释很受用
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP