社区
Linux_Kernel
帖子详情
uClinux系统内核2.6,使用GFP_KERNEL | GFP_DMA分配内存失败!
月吻长河
2006-05-01 11:49:24
unsigned char *p;
p = kmalloc(512,GFP_KERNEL | GFP_DMA);
分配内存失败,
但是,只用GFP_KERNEL就可以分配成功
请问这是什么问题?
...全文
952
6
打赏
收藏
uClinux系统内核2.6,使用GFP_KERNEL | GFP_DMA分配内存失败!
unsigned char *p; p = kmalloc(512,GFP_KERNEL | GFP_DMA); 分配内存失败, 但是,只用GFP_KERNEL就可以分配成功 请问这是什么问题?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tb01412
2006-05-08
打赏
举报
回复
分析LZ的需求:
1.要使用物理地址
2.要将DMA区的CAHCE关闭
3.对这个区的数据相关操作不能优化
对于第一点,UCLINUX可以达到
对于第二点,GNU/LINUX可以用GFP_DMA来实现
对于第三点,无论是哪种,都需要调用内核函数来实现
所以关键是第二点内容,也就是CACHE的控制,至于为何用GFP_DMA参数失败,我猜想是不是可以在内核配置中有相关选项来控制的呢???实在是没办法,在内核模块中显示地操作协处理器,以控制开关某段物理内存地址的CACHE,也就是在调用kmalloc之后写几条汇编语句来关闭相关地址段的CACHE,在调用kfree之前显示关闭其相关地址的CACHE
一般说来,在没有MMU的CPU中,是没有CACHE功能的,LZ可能是在有MMU的CPU中使用UCLINUX,而且还想使用其中的CACHE功能,由于UCLINUX最初设计的想法是建立在没有MMU的CPU上的,所以根本就没有考虑到LZ有这样奇怪的需求,对于这样的需求,内核最初没有想到,现在LZ却要使用,就只有使用自己提供的解决办法来做了,以上观点,纯属个人猜想,仅供参考,被误导了之后不要来怪我哈
tb01412
2006-05-08
打赏
举报
回复
既然都支持DMA,为何会分配失败呢?只用GFP_DMA试一下?
无法帮LZ想出好的办法了
月吻长河
2006-05-06
打赏
举报
回复
to tb01412(tb):
uClinux是支持DMA的
这个问题和优化没有关系
tb01412
2006-05-05
打赏
举报
回复
如果UCLINUX不支持DMA的话,我就不晓得还有什么办法可以满足你的要求了
不过我好像在LINUX设备驱动程序中看到过在驱动中显示地调用一些函数可以禁止优化,CACHE之类的,具体我也记不得在哪一页了
月吻长河
2006-05-02
打赏
举报
回复
楼上兄弟理解得很对!
我的有1MB的SDRMA是没有进行Cache映射的。
我是想给DMA分配内存的时候从这1MB中分配,但是不知道GFP_DMA行不行,我试了使用GFP_DMA总是分配失败。
请问还有其他办法吗?
否则没有其他办法解决Cache一致性问题我就只能不用Data Cache了,但是这样系统性能会下降!
tb01412
2006-05-01
打赏
举报
回复
不好意思,不能解决LZ的意思,不过还是顺便说几句:
uClinux好像不支持虚拟地址的概念吧?直接用GFP_KERNEL参数,其结果与GFP_DMA相差不大,只不过GFP_DMA区获得的地址是低于16M的,不过在嵌入式芯片领域,DMA区并没有限定在16M地址之内,唯一要注意的应该是关于cache的处理,DMA是不能带cache的
SPI的驱动
dma
关于SPI驱动 [ARM] 发布时间:2007-11-27 17:34:50 关于IIC驱动,本论坛已经有深入的讨论...因为IIC在嵌入式
系统
开发中实在是太重要了,在我们的教材第三、四章也有介绍。 另外,这里也有讨论: http://ww
Linux
Kernel
- Debug Guide (Linux
内核
调试指南 )
linux
内核
调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:
内核
世界的陷阱 源码阅读的陷阱 代码调试的陷阱 ...
linux
内核
调试指南
系统
搭建过程中,对于
系统
平台搭建工程师在完成Bootloader 的调试之后就进入
Kernel
裁减移植的阶段,其中最重要的一步是
Kernel
启动的调试,在调试
Kernel
过程中通常遇到最常见的问题是启动异常: Uncompressing ...
再读
uclinux
-2008r1(bf561)
内核
存储区域管理(4):zonelist初始化
快乐虾http://blog.csdn.net/lights_joy/lights@hb165.com 本文适用于ADI bf561 DSP优视BF561EVB开发板
uclinux
-2008r1-rc8 (移植到vdsp5)Visual DSP++ 5.0 欢迎转载,但请保留作者信息 1.1.1 zoneli
转 Linux内存管理原理
在用户态,
内核
态逻辑地址专指下文说的线性偏移前的地址Linux
内核
虚拟3.伙伴算法和slab分配器 16个页面RAM因为最大连续内存大小为16个页面 页面最多16个页面,所以16/2order(0)bimap有8个bit位两个页框page1与...
Linux_Kernel
4,436
社区成员
17,459
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章