免费注册 查看新帖 |

Chinaunix

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

什么情况会导致request_mem_region失败?【OK】 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-02-12 11:02 |只看该作者 |倒序浏览
我在module_init这个函数里,第一个函数就是调用request_mem_region,可是它返回NULL.
我不知道什么情况才会这样。

  1. if (! request_mem_region(0x378, 8, "short"))
  2. {
  3.         printk("<1>.....\n");
  4.         return -ENODEV;
  5. }
复制代码

[ 本帖最后由 anhk 于 2007-2-13 09:06 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-02-12 11:06 |只看该作者
看看0x378是不是被占用了

论坛徽章:
0
3 [报告]
发表于 2007-02-12 11:18 |只看该作者
原帖由 FreeGnu 于 2007-2-12 11:06 发表于 2楼  
看看0x378是不是被占用了


没有,cat /proc/ioport没有被占用

我一直使用request_region都没有问题的,但是request_mem_region就出问题了。

论坛徽章:
0
4 [报告]
发表于 2007-02-12 11:31 |只看该作者
看看  /proc/iomem 吧

论坛徽章:
0
5 [报告]
发表于 2007-02-12 11:42 |只看该作者
原帖由 FreeGnu 于 2007-2-12 11:31 发表于 4楼  
看看  /proc/iomem 吧

这里全是内存地址,跟I/0地址不一样吧?

论坛徽章:
0
6 [报告]
发表于 2007-02-12 13:21 |只看该作者
原帖由 anhk 于 2007-2-12 11:18 发表于 3楼  


没有,cat /proc/ioport没有被占用

我一直使用request_region都没有问题的,但是request_mem_region就出问题了。


你的CPU的体系结构是支持io-map的,request_mem_region是用于Memory-mapped的

(我也是新手,要是有不对的地方请指出,thanks)

论坛徽章:
0
7 [报告]
发表于 2007-02-12 13:49 |只看该作者
我明白了,这个函数我理解错了。它只是申请一块内存用来映射用。
谢谢

论坛徽章:
0
8 [报告]
发表于 2007-02-12 13:52 |只看该作者
还有一个问题,request_mem_region使用的内存应该是3/1G中那1G的吧,也是就用4G内存中那内核区的1G?
我在看的是LDD3的与硬件通信那章,有点弄不清楚mem-mapped和io有什么关系

  1. short_base = (unsigned long)ioremap(short_base, 8);
复制代码

并口应该使用0x378, 0x278的IO地址,和mem地址的关系有些不明白

[ 本帖最后由 anhk 于 2007-2-12 14:23 编辑 ]

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:17
9 [报告]
发表于 2007-02-12 17:12 |只看该作者
>我在看的是LDD3的与硬件通信那章,有点弄不清楚mem-mapped和io有什么关系

io寄存器和io内存有两种访问方式, 一种是用特定指令, 如in、out; 另一种是memory mapped方式,例如调用ioremap来为io寄存器或io内存区建立映射, 这样在kernel中就可以用普通的mov、xchg等指令来访问,就象访问普通的内存一样。

我也是新手,敬请指正^_^

论坛徽章:
0
10 [报告]
发表于 2007-02-12 17:25 |只看该作者
原帖由 帅绝人寰 于 2007-2-12 17:12 发表于 9楼  
>我在看的是LDD3的与硬件通信那章,有点弄不清楚mem-mapped和io有什么关系

io寄存器和io内存有两种访问方式, 一种是用特定指令, 如in、out; 另一种是memory mapped方式,例如调用ioremap来为io寄存器 ...


我现在的疑惑是:
request_mem_region获取一段IO内存,比如0xff000000
然后用ioremap映射,我象知道怎么才能将IO端口0x378映射的我刚才获取的内存0xff000000处

  1. if (! request_mem_region(0xff000000, 8, "short"))
  2. {
  3. return ......;
  4. }
  5. addr = ioremap(0x378, 8);

  6. >>>?????  <<<<
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP