设为首页
收藏本站
开启辅助访问
切换到窄版
登录
立即注册
中问网首页
我的收藏
站长博客
搜索
搜索
本版
帖子
用户
第一问答网
»
论坛
›
中问网
›
问答
›
在内核中怎样获得一个结构的物理地址(急) ...
1
2
/ 2 页
下一页
返回列表
发新帖
在内核中怎样获得一个结构的物理地址(急)
[复制链接]
11
|
10
|
2021-1-27 06:34:30
|
显示全部楼层
|
阅读模式
我在内核中有一个结构:
structtest
{
inta[10000];
intb[10000];
};
structtest*mytest[4];
然后为每个mytest分配内核空间,以mytest[0]为例:
order=get_order(sizeof(structtest));
mytest[0]=(structtest*)__get_free_pages(GFP_KERNEL,order);
后面mytest[1]至mytest[3]是一样的。
现在的问题是:
我怎样得到mytest[0]以及其它mytest的物理地址?我用__pa((unsignedint)&mytest[0]),结果出现很多段错误。
请高手指点,非常急的问题,谢谢了……
分 -->
回复
使用道具
举报
千问
|
2021-1-27 06:34:30
|
显示全部楼层
还有一个问题也请教一下,如果我在用户空间也申请了同样的structtest结构,然后把用户空间的mytest[]的地址传递到内核空间。请问在内核空间可以直接把内核中的test拷贝到这个地址吗?如果不能怎么做呢?以第一个问题为主,这个是自己刚刚想到的。谢谢了……
回复
使用道具
举报
千问
|
2021-1-27 06:34:30
|
显示全部楼层
http://www.lupaworld.com/bbs/redirect.php?tid=40233&goto=lastpost
回复
使用道具
举报
千问
|
2021-1-27 06:34:30
|
显示全部楼层
__pa((unsignedint)&mytest[0]),
这样取物理地址是不对的,物理地址是由硬件规定的,是固定的。
虚拟地址是有物理地址映射而来,你不能直接由普通的虚拟地址得到物理地址。
要将数据传到用户空间,可以直接做一个ioctl调用,使用copy_to_user把数据传过去,
也可以把内核空间的地址映射到用户空间。
回复
使用道具
举报
千问
|
2021-1-27 06:34:30
|
显示全部楼层
这,内核程序都是对线性地址操作。。。不针对物理地址
记得以前在内核开发邮件列表也有人问这个很多人的回答是:有什么样的需求会要求得到它的物理地址呢?结果往往是根本不需要。
回复
使用道具
举报
千问
|
2021-1-27 06:34:30
|
显示全部楼层
呵呵,八错八错
回复
使用道具
举报
千问
|
2021-1-27 06:34:30
|
显示全部楼层
引用4楼threeleafzerg007的回复:
这,内核程序都是对线性地址操作。。。不针对物理地址
记得以前在内核开发邮件列表也有人问这个很多人的回答是:有什么样的需求会要求得到它的物理地址呢?结果往往是根本不需要。
一般除了硬件相关的部分,应该都不会用到物理地址
回复
使用道具
举报
千问
|
2021-1-27 06:34:30
|
显示全部楼层
引用6楼datacode的回复:
引用4楼threeleafzerg007的回复:
这,内核程序都是对线性地址操作。。。不针对物理地址
记得以前在内核开发邮件列表也有人问这个 很多人的回答是:有什么样的需求会要求得到它的物理地址呢?结果往往是根本不需要。
一般除了硬件相关的部分,应该都不会用到物理地址
使用物理地址也是使用映射了内核空间的线性地址。。。比如ioremap之类的
回复
使用道具
举报
千问
|
2021-1-27 06:34:30
|
显示全部楼层
物理地址,这个是动态变化的啊。
因为,内存管理会换页,当然,kernel是常驻内存的。
回复
使用道具
举报
千问
|
2021-1-27 06:34:30
|
显示全部楼层
对于高位内存__pa是不正确的,对于低位内存(小于896M),__pa返回的正好是物理地址。
回复
使用道具
举报
1
2
/ 2 页
下一页
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
千问
主题
0
回帖
4882万
积分
论坛元老
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
论坛元老, 积分 48824836, 距离下一级还需 -38824837 积分
积分
48824836
加好友
发消息
回复楼主
返回列表
问答
热门排行