你好,我遇到一个问题
我在linux中reserve了2G的内存,起始地址是0x180000000,然后我的驱动会对这个起始物理地址进行
dma_map_page()映射。另外有个硬件通过dma给这个物理地址写数据。
大概调用:
page = pfn_to_page(PFN_DOWN(dm->address)) ; //dm->address就是0x180000000
dma_addr = dma_map_page(xx,page, 0, length, DMA_BIDIRECTIONAL);
接下来我想在驱动中访问这段物理内存,我试过下面4种方式:
- ioremap(0x180000000, length); //报错:ioremap error for 0x180000000-0x180010000,requested 0x2, got 0x0
- memremap(0x180000000, length, 0); //内核直接crash,不得不硬重启系统
- virt_to_phys(0x180000000)
- ioremap(0x190000000, length); //内核crash,不得不硬重启,看不到dmesg,但应该就是这里引起的
请问下,您有什么建议吗?