Chinaunix首页 | 论坛 | 博客
  • 博客访问: 699419
  • 博文数量: 152
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1793
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-12 12:26
个人简介

相信自己,只有不想做的,没有做不到的。

文章分类

全部博文(152)

文章存档

2021年(1)

2015年(2)

2014年(74)

2013年(75)

分类: LINUX

2013-11-07 22:53:38

【实验目的】

       Nand flash 是嵌入式系统最常用的外部存储设备,这里介绍Nand flash驱动移植的过程。

       说明:在本系统移植课程实验中命令行提示符 “$”表示是在主机上执行,“#”表示在目标板执行

【实验环境】

?          主机:ubuntu 10.10发行版

?          目标机:FS_S5PC100平台

?          交叉编译工具: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

#include

#include

#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"

阅读(437) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~