转自 elroy大神的分享 http://www.ebaina.com/bbs/forum.php?mod=viewthread&tid=10641&extra=&page=1
在内核中增加打印信息,经过反复调试实验,发现这个内核线程占用大量cpu的时候是内核中对mmc模块使用4000~1000的不同频率对插入的模块分别用sd、mmc、sdio类型匹配枚举的过程。
Hi3516A有两个SDIO模块0和1,这两个模块都是通过检测SDIO_CAERD_DETECT管脚判断SD卡是否插入,在插入后启动对SD卡的上述匹配过程。
可气的是,当SDIO0_CAERD_DETECT和SDIO1_CAERD_DETECT这两个管脚服用成SDIO_CAERD_DETECT而悬空或者未接的时候,这个管脚默认是个低电平,而插入SD时该管脚的状态正是低电平。
所以如果你的硬件电路上这两个管脚悬空或者没有上拉,上电时内核会认为插入了SD卡(即使实际没有插入卡)而启动上述匹配过程,
而当SD卡实际不存在的情况下这个过程需要等待各种超时或者等待超过最大重试次数,占用大量cpu的同时并且还会持续几分钟的时间。
所以要么软件上对不使用的SDIO_CAERD_DETECT复用成其他功能,要么硬件上对该管脚做好弱上拉,就可以完全解决这个问题了。
这个问题困扰我许久啊~~~~这个问题我也遇到了,MMC驱动里面屏蔽 himci1 sd/mmc controller support
— himciv100 driver support
[] Send Auto Stop to terminate data transfer between host and SD card
[] himci0 sd/mmc controller support —>
himci1 sd/mmc controller support —>
开机kworker占高的问题解决了!感谢楼主分享!
爷,收下我的膝盖!