(求教)linux驱动内存申请及cache一致性问题

synow_ma 2017-03-15 05:52:54
arm cortex a9
内核版本4.0
背景介绍,嫌多直接看问题。我需要实现的功能:
外设直接将15M左右的数据写入连续的物理内存(以及读取),给出中断,然后我通过驱动去读取(以及写入)这些数据并进行相关操作。而这15M左右的内存空间是通过驱动申请的,将物理地址传递给外设,然后外设进行读写。重点在于内存空间物理地址连续(类似DMA,没用DMA是因为我不会用。。。),并且最好一直被我的驱动占用(私有化,不会变来变去,不会被其他程序借用)。
之前考虑了kmalloc 和 get_free_pages等函数申请,但是空间太小,最多只能申请4M,是不是真的物理连续我就没深究了。
然后我使用的是在系统引导阶段预留出一块内存(alloc_bootmem),我的理解是将这段内存设置为对系统隐形了。方法成功并且可以使用,但是驱动读取数据的时候出现数据刷新不正常(暂时分不清是外设没有正常写入,还是已经写入但cache未更新,而驱动读的是cache里面的旧数据,我倾向于后者)的情况。
问题:1、我用alloc_bootmem预留大内存的方法有没有其他弊端
2、linux 内核驱动中关闭cache的系统调用函数是什么
,我是真的找了很久没找到,拜托了
...全文
1181 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
haideshiyan35 2017-04-25
  • 打赏
  • 举报
回复
遇到同样问题,并且是arm64架构,求大神解答
synow_ma 2017-03-17
  • 打赏
  • 举报
回复
自顶。。。。。

1,318

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧