zoukankan      html  css  js  c++  java
  • s5pc100开发板Nand flash移植

    相关软件下载地址:http://pan.baidu.com/s/16yo8Y

    fsc100开发板

    交叉编译工具:arm-cortex_a8-linux-gnueabi-gcc

    Ÿ   添加针对我们平台的Nand flash驱动

    拷贝s3c_nand.c到drivers/mtd/nand下

    拷贝regs-nand.h到arch/arm/mach-s5pc100/include/mach下

    Ÿ   针对平台上的nand flash设备,修改drivers/mtd/nand/nand_base.c第2812行

    for  (i = 0; i < 5; i++)

    • 添加内核配置选项

    修改drivers/mtd/nand/Kconfig,在if  mtd_nand下面添加如下内容:

    config  MTD_NAND_S3C

            tristate "NAND Flash support for S3C SoC"

            depends on (ARCH_S3C64XX || ARCH_S5P64XX || ARCH_S5PC1XX || ARCH_S5PC100) && MTD_NAND

            help

              This enables the NAND flash controller on the S3C. 

              No board specfic support is done by this driver, each board

              must advertise a platform_device for the driver to attach.

     

    config  MTD_NAND_S3C_DEBUG

            bool "S3C NAND driver debug"

            depends on MTD_NAND_S3C

            help

              Enable debugging of the S3C NAND driver

     

    config  MTD_NAND_S3C_HWECC

            bool "S3C NAND Hardware ECC"

            depends on MTD_NAND_S3C

            help

              Enable the use of the S3C's internal ECC generator when

              using NAND. Early versions of the chip have had problems with

              incorrect ECC generation, and if using these, the default of

              software ECC is preferable.

     

              If you lay down a device with the hardware ECC, then you will

              currently not be able to switch to software, as there is no

              implementation for ECC method used by the S3C

    修改drivers/mtd/nand/Makefile添加如下内容:

    obj-$(CONFIG_MTD_NAND_S3C)  +=  s3c_nand.o

    • 修改平台代码

    修改arch/arm/mach-s5pc100/mach-smdkc100.c添加如下内容:

    • 添加头文件

    #if defined (CONFIG_MTD_NAND_S3C)

    #include <linux/mtd/partitions.h>

    #include <linux/mtd/mtd.h>

    #include <plat/nand.h>

    #endif

    • 添加平台设备

    #if defined(CONFIG_MTD_NAND_S3C)

    /* Nand Flash Support */

    static struct mtd_partition s5pc100_nand_part[] = {

            [0] = {

                    .name        = "bootloader",

                    .size        = SZ_1M,

                    .offset        = 0,

            },

            [1] = {

                    .name        = "kernel",

                    .offset = MTDPART_OFS_APPEND,

                    .size        = SZ_1M*3,

            },

            [2] = {

                    .name        = "rootfs",

                    .offset               = MTDPART_OFS_APPEND,

                    .size        = SZ_4M,

            },

            [3] = {

                    .name        = "usrfs",

                    .offset        = MTDPART_OFS_APPEND,

                    .size        = MTDPART_SIZ_FULL,

            },

    };

    struct s3c_nand_mtd_info s5pc100_nand_mtd_part_info = {

            .chip_nr = 1,

            .mtd_part_nr = ARRAY_SIZE(s5pc100_nand_part),

            .partition = s5pc100_nand_part,

    };

     

    static struct resource s5pc100_nand_resource[] = {

            [0] = {

                    .start = 0xE7200000,

                    .end   = 0xE7200000 + SZ_1M,

                    .flags = IORESOURCE_MEM,

            }

    };

     

    struct platform_device s5pc100_device_nand = {

            .name                  = "s5pc100-nand",

            .id                  = -1,

            .num_resources          = ARRAY_SIZE(s5pc100_nand_resource),

            .resource          = s5pc100_nand_resource,

            .dev = {

                    .platform_data = &s5pc100_nand_mtd_part_info,

            }

    };

    #endif

     

    • 添加平台设备列表

    在smdkc100_device[]结构体数组中添加如下内容:

    #if defined(CONFIG_MTD_NAND_S3C)

            &s5pc100_device_nand,

    #endif

    • 修改arch/arm/plat-samsung/include/plat/nand.h添加如下内容:

    struct s3c_nand_mtd_info {

            uint chip_nr;

            uint mtd_part_nr;

            struct mtd_partition *partition;

    };

    • 配置内核

    $ make menuconfig

    Device Drivers  --->

            <*> Memory Technology Device (MTD) support  --->

                   [*]   MTD partitioning support

    <*>   Caching block device access to MTD devices

                   <*>   NAND Device Support  --->

                          <*>   NAND Flash support for S3C SoC

                          [*]     S3C NAND Hardware ECC

    File Systems  --->

             Partition  Types  --->

                    [*]    Advanced partition selection

                    [*]    PC  BIOS  (MSDOS  partition  tables)  support

                    [*]         BSD  disklabel  (FreeBSD  partition  tables)  support

    • 编译内核并拷贝到tftpboot下

    $ make  zImage

    $ cp  arch/arm/boot/zImage  /tftpboot

    • 测试

    启动目标板,在目标板上完成如下操作:

    # cat  /proc/mtd

    dev:        size       erasesize     name

    mtd0: 00100000 00020000  "bootloader"

    mtd1: 00300000 00020000  "kernel"

    mtd2: 00400000 00020000  "rootfs"

    mtd3: 0f800000 00020000  "usrfs"

  • 相关阅读:
    linux file命令小记
    利用actionscript访问wfs服务
    在C/C++中static有什么用途?(请至少说明两种)
    单元测试、集成测试、系统测试的侧重点是什么?
    测试计划工作的目的是什么?测试计划文档的内容应该包括什么?其中哪些是最重要的?
    简述什么是静态测试、动态测试、黑盒测试、白盒测试、α测试&#160;β测试
    一台客户端有三百个客户与三百个客户端有三百个客户对服务器施压,有什么区别?
    BUG管理工具的跟踪过程(用BugZilla为例子)
    软件测试分为几个阶段&#160;各阶段的测试策略和要求是什么?
    软件质量保证体系是什么&#160;国家标准中与质量保证管理相关的几个标准是什么?他们的编号和全称是什么?
  • 原文地址:https://www.cnblogs.com/vsyf/p/4974430.html
Copyright © 2011-2022 走看看