21,597
社区成员
发帖
与我相关
我的任务
分享
请问老师,在学习mmap中,把内存的申请(module_init中)、释放(module_exit中)改用【dma_alloc_coherent】和【dma_free_coheren】
卸载驱动时,会报错:__arm_dma_free.constprop.2+0xf0/0x158
代码中只有入口和出口,没有关联其他代码。
struct mem_addr{
unsigned int v_adr;
dma_addr_t p_adr;
};
struct mem_addr rxbuf;
struct mem_addr txbuf;
//入口函数
static int __init fsfpgain_init(void)
{
int ret = 0;
rxbuf.v_adr = dma_alloc_coherent(NULL,DMAC_MAX_TRF_SIZE,(dma_addr_t*)&rxbuf.p_adr,GFP_KERNEL|GFP_DMA);
txbuf.v_adr = dma_alloc_coherent(NULL,DMAC_MAX_TRF_SIZE,(dma_addr_t*)&txbuf.p_adr,GFP_KERNEL|GFP_DMA);
return ret;
}
出口函数
static void __exit fsfpgain_exit(void)
{
dma_free_coherent(NULL,DMAC_MAX_TRF_SIZE,(void*)&rxbuf.v_adr, rxbuf.p_adr);
dma_free_coherent(NULL,DMAC_MAX_TRF_SIZE,(void*)&txbuf.v_adr, txbuf.p_adr);
printk("fsfpgain_exit\r\n");
}