(求教)linux驱动内存申请及cache一致性问题
arm cortex a9
内核版本4.0
背景介绍,嫌多直接看问题。我需要实现的功能:
外设直接将15M左右的数据写入连续的物理内存(以及读取),给出中断,然后我通过驱动去读取(以及写入)这些数据并进行相关操作。而这15M左右的内存空间是通过驱动申请的,将物理地址传递给外设,然后外设进行读写。重点在于内存空间物理地址连续(类似DMA,没用DMA是因为我不会用。。。),并且最好一直被我的驱动占用(私有化,不会变来变去,不会被其他程序借用)。
之前考虑了kmalloc 和 get_free_pages等函数申请,但是空间太小,最多只能申请4M,是不是真的物理连续我就没深究了。
然后我使用的是在系统引导阶段预留出一块内存(alloc_bootmem),我的理解是将这段内存设置为对系统隐形了。方法成功并且可以使用,但是驱动读取数据的时候出现数据刷新不正常(暂时分不清是外设没有正常写入,还是已经写入但cache未更新,而驱动读的是cache里面的旧数据,我倾向于后者)的情况。
问题:1、我用alloc_bootmem预留大内存的方法有没有其他弊端
2、linux 内核驱动中关闭cache的系统调用函数是什么,我是真的找了很久没找到,拜托了