中断函数中不能调用ioremap()!!!!!!!

在开发板上实验时遇到问题,当在中断函数中使用ioremap()会导致系统出现Oops错误。文章指出,中断处理函数不能包含可能会阻塞的操作,如ioremap,因为该函数可能具有阻塞特性。解决方案是将ioremap调用移至初始化函数中,以确保中断处理的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  在开发板上实验,《ARM嵌入式Linux设备驱动实例开发》第二章按键的例子,每当按下键盘时,都会导致Oops错误。
retry start                                                                    
sleep                                                                          
into isr 18                                                                    
kernel BUG at mm/vmalloc.c:171!                                                
Unable to handle kernel NULL pointer dereference at virtual address 00000000   
pgd = c0004000                                                                 
[00000000] *pgd=00000000                                                       
Internal error: Oops: 817 [#1]                                                 
Modules linked in: button                                                      
CPU: 0    Not tainted  (2.6.22.1 #3)                                           
PC is at __bug+0x20/0x2c                                                       
LR is at 0xc030dafc                                                            
pc : [<c0031b54>]    lr : [<c030dafc>]    psr: 60000093                        
sp : c0303e18  ip : c030dafc  fp : c0303e24                                    
r10: e0000000  r9 : 41129200  r8 : 00000001                                    
r7 : 00000012  r6 : 00000001  r5 : 00056000  r4 : 00001000 
   错误原因:中断处理函数isr_button中,使用了ioremap。
   在网上找的一个帖子,老外的。
You're not allowed to call any type of blocking function from within
an interrupt handler.

ioremap is a potentially blocking function, so it cannot be called
from an interrupt handler.

Normally, you would do all of the memory mapping, memory allocation
stuff outside of the interrupt handler and the interrupt handler would
just copy stuff around.

Why do you think you need it from within the interrupt handler?
Perhaps you could describe what you're trying to do, and I can suggest
a "traditional" method of dealing with that situation.
  把中断函数里的ioremap语句移到初始化函数里,就正确了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值