用TF卡作为bb的文件系统载体,在使用过程中,偶尔会遇到文件系统只能读取不能写入的错误,该问题轻则导致当前运行的程序出错,重则直接导致操作系统崩溃。通过执行dmesg命令,打印系统错误日志,发现以下错误信息:
mmcblk0: error -110 transferring data, sector 4126233, nr 8, card status 0xc00
error -110为mmc访问超时错误。上网google一下,发现OMAP系统有点挑TF卡,价格便宜、低端一些的卡比较容易出这个错。我用的Kingmax Class 10的卡很容易出这个问题,但换成Kinston Class 10的卡,就基本上没有出过错。当然,TI给出了官方的解决方法,可以通过修改mmc驱动,将延迟参数修改为最大值,来避免该错误。
具体解决办法:
STEP 1:修改Linux内核的mmc驱动
该驱动在Linux内核源码的drivers/mmc/host/omap_hsmmc.c文件中,以下为替换的代码部分:
drivers/mmc/host/omap_hsmmc.c | 30 +++++-------------------------
1 files changed, 5 insertions(+), 25 deletions(-)
diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
index fd0c661..afd7292 100644
--- a/drivers/mmc/host/omap_hsmmc.c
+++ b/drivers/mmc/host/omap_hsmmc.c
@@ -1481,11 +1481,8 @@ static int omap_hsmmc_start_dma_transfer(struct
omap_hsmmc_host *host,
return 0;
}
-static void set_data_timeout(struct omap_hsmmc_host *host,
-