linux内核打印'BUG: scheduling while atomic'和'bad: scheduling from the idle thread'错误的时候,
通常是在中断处理函数中调用了可以休眠的函数,如semaphore,mutex,sleep之类的可休眠的函数,而linux内核要求在中断处理的时候,不允许系统调度,不允许抢占,要等到中断处理完成才能做其他事情。
因此,要充分考虑中断处理的时间,一定不能太久。
另外一个能产生此问题的是在idle进程里面,做了不该做的事情。现在Linux用于很多手持式设备,为了降低功耗,通常的作法是在idle进程里面降低CPU或RAM的频率、关闭一些设备等等。要保证这些动作的原子性才能确保不发生'bad: scheduling from the idle thread'这样的错误!
禁止内核抢占是指内核不会主动的抢占你的process,但是现在是你在自己的程序中主动call schedule(),kernel并不能阻止你这么作。
上一篇:内核目录中增加自己的目录
下一篇:mini6410 2.6.38移植 USB
设计资源 培训 开发板 精华推荐
- MAXREFDES1130:低输出电压纹波设计,采用MAX17509具有集成开关、0.9V / 2A和1.2V / 2A双路输出降压型DC-DC转换器
- 使用 Semtech 的 SH3100 的参考设计
- 带有 STM32F334R8 MCU 的 STM32F3348-DISCO、32F3348DISCOVERY 探索套件
- 使用 ROHM Semiconductor 的 BDJ2GA5WEFJ 的参考设计
- 20减速步进电机 myfocuser pro 2 驱动板
- GPIO_Control_SSR
- 墨水屏1.0
- 立创eda校园讲师培训案例2-稳压电源设计
- 具有 100 uA 空载静态电流的 LT1976HFE 14V 至 3.3V 降压转换器的典型应用电路
- 使用 Analog Devices 的 LTC1650AIN 的参考设计