s3c2440支持nand flash硬件ecc(u-boot+linux)

2024-04-21 13:48

本文主要是介绍s3c2440支持nand flash硬件ecc(u-boot+linux),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

平台:
    硬件: s3c2440 + 64MB(SDRAM) + 256MB(nand flash-> K9F2G08U0C)
    软件: u-boot-2011.12 + linux-3.1.6

要支持硬件ecc就必须保证u-boot和linux内核的ecc校验模式、算法一样。由于内核已经做好了2440硬件ecc的支持,所以以内核为标准修改u-boot。

1、linux内核部分
打开2440硬件ecc支持.
内核关键源文件:/drivers/mtd/nand/s3c2410.c,注意红色部分
关键函数:
static void s3c2410_nand_update_chip(struct s3c2410_nand_info *info,
                     struct s3c2410_nand_mtd *nmtd)
{
    struct nand_chip *chip = &nmtd->chip;

    dev_dbg(info->device, "chip %p => page shift %d\n",
        chip, chip->page_shift);

    if (chip->ecc.mode != NAND_ECC_HW)
        return;

        /* change the behaviour depending on wether we are using
         * the large or small page nand device */

    if (chip->page_shift > 10) {
        chip->ecc.size        = 256;
        chip->ecc.bytes        = 3;

    } else {
        chip->ecc.size        = 512;
        chip->ecc.bytes        = 3;
        chip->ecc.layout    = &nand_hw_eccoob;
    }
}

2、u-boot部分
据此修改u-boot源码
在u-boot全局配置头文件,我的是include/configs/dhole2440.h添加如下宏
#define CONFIG_S3C2440_NAND_HWECC    /*打开nand flash硬件ecc支持*/
#ifdef CONFIG_S3C2440_NAND_HWECC
    #define CONFIG_SYS_NAND_ECCSIZE     256    /*每次ecc数据块大小,对应内核的 chip->ecc.size*/
    #define CONFIG_SYS_NAND_ECCBYTES    3    /*校验结果为3个字节,对应内核的 chip->ecc.bytes*/
#endif

修改drivers/mtd/nand/s3c2440_nand.c源文件的硬件ecc部分代码,因为u-boot默认没提供对s3c2440的支持。
void s3c2440_nand_enable_hwecc(struct mtd_info *mtd, int mode)
{
    struct s3c2440_nand *nand = s3c2440_get_base_nand();
    writel(readl(&nand->nfcont) | S3C2440_NFCONT_INITECC, &nand->nfcont);
}

static int s3c2440_nand_calculate_ecc(struct mtd_info *mtd, const u_char *dat,
                      u_char *ecc_code)
{
    struct s3c2440_nand *nand = s3c2440_get_base_nand();
    unsigned long ecc = readl(&nand->nfmecc0);

    ecc_code[0] = ecc;
    ecc_code[1] = ecc >> 8;
    ecc_code[2] = ecc >> 16;

    return 0;
}

static int s3c2440_nand_correct_data(struct mtd_info *mtd, u_char *dat,
                     u_char *read_ecc, u_char *calc_ecc)
{
    if (read_ecc[0] == calc_ecc[0] &&
        read_ecc[1] == calc_ecc[1] &&
        read_ecc[2] == calc_ecc[2])
        return 0;

    return -1;
}
可以发现只提供了3字节ecc支持,这是为了兼容linux内核的ecc.
重新编译u-boot和linux内核就ok了。
<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
阅读(1228) | 评论(0) | 转发(1) |
0

上一篇:调试工具

下一篇:使用rmmod会出现 No such file or directory

相关热门文章
  • linux 常见服务端口
  • 【ROOTFS搭建】busybox的httpd...
  • 什么是shell
  • linux socket的bug??
  • linux的线程是否受到了保护?...
  • 修改默认端口为222,centos自...
  • 用PHP做一个ftp登录页面...
  • Toad for Oracle工具,为什么在...
  • 本地win7安装vmw9系统winserv...
  • powermt config是所什么用的...
给主人留下些什么吧!~~
评论热议

这篇关于s3c2440支持nand flash硬件ecc(u-boot+linux)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/923238

相关文章

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

Linux如何查看文件权限的命令

《Linux如何查看文件权限的命令》Linux中使用ls-R命令递归查看指定目录及子目录下所有文件和文件夹的权限信息,以列表形式展示权限位、所有者、组等详细内容... 目录linux China编程查看文件权限命令输出结果示例这里是查看tomcat文件夹总结Linux 查看文件权限命令ls -l 文件或文件夹

idea的终端(Terminal)cmd的命令换成linux的命令详解

《idea的终端(Terminal)cmd的命令换成linux的命令详解》本文介绍IDEA配置Git的步骤:安装Git、修改终端设置并重启IDEA,强调顺序,作为个人经验分享,希望提供参考并支持脚本之... 目录一编程、设置前二、前置条件三、android设置四、设置后总结一、php设置前二、前置条件

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

Spring Boot Actuator应用监控与管理的详细步骤

《SpringBootActuator应用监控与管理的详细步骤》SpringBootActuator是SpringBoot的监控工具,提供健康检查、性能指标、日志管理等核心功能,支持自定义和扩展端... 目录一、 Spring Boot Actuator 概述二、 集成 Spring Boot Actuat

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理