• u-boot-2014.10移植(5)支持nand


    在smdk2440.h里面加上NAND的配置选项 

    #define CONFIG_CMD_NAND

    编译出错

    drivers/mtd/nand/s3c2410_nand.c: In function 's3c2410_hwcontrol':
    drivers/mtd/nand/s3c2410_nand.c:44: warning: implicit declaration of function 's3c2410_get_base_nand'
    drivers/mtd/nand/s3c2410_nand.c:44: warning: initialization makes pointer from integer without a cast
    drivers/mtd/nand/s3c2410_nand.c:59: error: dereferencing pointer to incomplete type
    drivers/mtd/nand/s3c2410_nand.c:59: error: dereferencing pointer to incomplete type
    drivers/mtd/nand/s3c2410_nand.c:62: error: dereferencing pointer to incomplete type

    cp drivers/mtd/nand/s3c2410_nand.c drivers/mtd/nand/s3c2440_nand.c
    在drivers/mtd/nand/Makefile添加

    COBJS-$(CONFIG_NAND_S3C2410) += s3c2410_nand.o      
    COBJS-$(CONFIG_NAND_S3C2440) += s3c2440_nand.o

    同时需要修改配置文件smdk2440.h

             /*
             * NAND configuration
             */
            #ifdef CONFIG_CMD_NAND
            #define CONFIG_NAND_S3C2410        == >#define CONFIG_NAND_S3C2440 
            #define CONFIG_SYS_S3C2410_NAND_HWECC   ==>#define CONFIG_SYS_S3C2440_NAND_HWECC            

    在drivers/mtd/nand/s3c2440_nand.c

    nt board_nand_init(struct nand_chip *nand)
      #if 0
            cfg = S3C2440_NFCONF_EN;
            cfg |= S3C2440_NFCONF_TACLS(tacls - 1);
            cfg |= S3C2440_NFCONF_TWRPH0(twrph0 - 1);
            cfg |= S3C2440_NFCONF_TWRPH1(twrph1 - 1);
      #endif
            cfg = ((tacls-1)<<12)|((twrph0-1)<<8)|((twrph1-1)<<4);
            writel(cfg, &nand_reg->nfconf);
            
            writel((1<<4)|(1<<1)|(1<<0),&nand_reg->nfcont);
            。。。
    
                    nand->select_chip = s3c2440_nand_select;

    添加

    static void s3c2440_nand_select(struct mtd_info *mtd, int chipnr)
    {
            struct s3c2440_nand *nand = s3c2440_get_base_nand();
    
            switch (chipnr) {
            case -1:
                    nand->nfcont |= (1<<1);
                    break;
            case 0:
                    nand->nfcont &= ~(1<<1);
                    break;
    
            default:
                    BUG();
            }
    }

    重写

    static void s3c2440_hwcontrol(struct mtd_info *mtd, int dat, unsigned int ctrl)
    {
            struct s3c2440_nand *nand = s3c2440_get_base_nand();
    
            if (ctrl & NAND_CLE)
            {
                    writeb(dat, &nand->nfcmd);
            }
            else if(ctrl & NAND_ALE)
            {
                    writeb(dat, &nand->nfaddr);
            }
    }

    重写编译烧录

    U-Boot 2014.10 (Nov 01 2018 - 14:26:34)
            
            CPUID: 32440001
            FCLK:      400 MHz
            HCLK:      100 MHz
            PCLK:       50 MHz
            DRAM:  64 MiB
            WARNING: Caches not enabled
            Flash: 2 MiB
            NAND:  256 MiB
            *** Warning - bad CRC, using default environment
            
            In:    serial
            Out:   serial
            Err:   serial
            Net:   dm9000
            Warning: dm9000 MAC addresses don't match:
            Address in SROM is         ff:ff:ff:ff:ff:ff
            Address in environment is  00:0c:29:45:c4:c3

    增加启动参数

    在smdk2440.h里面添加宏

    #define CONFIG_BOOTCOMMAND    "nand read.jffs2 0x30007FC0 0x60000 0x200000; bootm 0x30007FC0"

    如果以前烧写过内核到0x60000的位置,那么现在可以顺利从nor flash启动内核

  • 相关阅读:
    大前端完整学习路线(详解)
    浅谈攻击Web应用常见的技术手段
    浅谈XSS跨站脚本攻击
    利用SQL注入漏洞登录后台
    1、MyBatis框架底层初涉
    1、用静态工厂方法代替构造器
    日志管理-log4j与slf4j的使用
    Java的值类型和引用类型
    自动任务调度
    2、Hibernate持久化编写
  • 原文地址:https://www.cnblogs.com/hulig7/p/9902129.html
Copyright © 2020-2023  润新知