工具/软件:Linux
我使用新的 SDK:am335x-evm-linux-sdk-arago-src-04.00.00.04.tar
starting from nand 的函数现在还可以、但在内核启动期间 、OMAP2-nand OMAP2-nand.0存在错误:找到不可纠正的位翻转、我已经检查了内核代码、它发现了一个 ERROR_UNcorrectable:
在文件驱动程序\MTD\n 和\OMAP2.c 中:
对于(i = 0;i < eccsteps;i++){
if (ERR_VEC[I].ERROR_UNcorrectable){
DEV_ERR(&INFO->PDEV-DEV,
"发现不可纠正的位翻转\n");
ERR =-EBADMSG;
}
在文件 drivers/MTD/nand/omap_elm.c 中、 当在 elm_error_correction 函数中读取 ELM_LOCATE_STATUS 错误时、ERR_VEC[i].ERROR_UNcorrectable 将设置为 true:
静态空 elm_error_correction (struct elm_info *信息、
struct elm_errorvec * err_vec)
{
int i、j、errors = 0;
INT 偏移;
u32 reg_val;
对于(i = 0;i < info->ecc_steps;i++){
/*报告的检查错误*/
if (err_vec[i].error_reported){
偏移= ELM_LOCATE_STATUS + ERROR_LOCATE_SIZE * i;
REG_val = elm_read_reg (info、offset);
/*检查可纠正的错误或不是*/
if (reg_val & ecc_corrected_mask) {
偏移= ELM_ERROR_LOCATE_0 +
error_location_size * i;
/*可纠正错误的读取计数*/
ERR_VEC[I].ERROR_COUNT = REG_Val &
ecc_NB_errors_mask;
/*更新错误矢量中的错误位置*/
对于(j = 0;j < err_vec[i].error_count;j++){
REG_val = elm_read_reg (info、offset);
ERR_VEC[i]。error_loc[j]= reg_val &
ecc_error_location_mask;
/*更新错误位置寄存器*/
偏移+=4;
}
错误+= ERR_VEC[i]。error_count;
}否则{
ERR_VEC[I].ERROR_UNcorrectable = true;
}
/*清除已处理错误矢量的中断*/
Elm_write_reg (info、ELM_IRQSTATUS、bit (i));
/*禁用页面模式*/
Elm_configure_page_mode (info、i、false);
}
}
}
为什么我 的 ELM_LOCATE_STATUS 寄存器出错? 如何解决此问题?