NANDflash 的驱动的添加

来源:互联网 发布:新版淘宝地址怎么修改 编辑:程序博客网 时间:2024/06/11 19:40

Linux-2.6.22.6内核移植-- NandFlash驱动的添加

【实验目的】

本实验通过在上个实验结果的linux2.6.22.6内核上移植NAND Flash驱动,使其可以设别到NAND Flash分区,并可以管理相应的Flash设备。从而进一步完善系统结构,并通过移植的过程来了解nandflash的移植方法。

【实验环境】

1、Ubuntu10.10发行版

2、FS2410平台以及开发板中移植好的u-boot-1.3.1 

3、交叉编译器 arm-linux-gnu-gcc (ver:3.4.5)

【实验步骤】

在linux2.6.22.6内核中已经包含了s3c2410的nand flash控制器驱动,但需要做一些配置工作才能正常使用。

(1)指明分区信息,建立分区表

在arch/arm/plat-s3c24xx/common-smdk.c文件中,修改分区信息(自己可以根据情况修改分区大小):

    #vim arch/arm/plat-s3c24xx/common-smdk.c

static struct mtd_partition smdk_default_nand_part[] = {

        [0] = {

                    .name   = "uboot",

                    .size   = 0x40000,

                    .offset = 0,

              },

        [1] = {

                    .name   = "kernel",

                    .offset = 0x40000,

                    .size   = 0x200000,

              },

        [2] = {

                    .name   = "rootfs(read only)",

                    .offset = 0x240000,

                    .size   = 0x800000,

              },

        [3] = {

                    .name   = "user fs",

                    .offset = 0xa40000,

                    .size   = 0x600000,

              }

 

};
 (5)配置MTD,具体操作如下

root@farsight:/source/kernel/linux-2.6.22.6#make menuconfig

Device Drivers --->

Memory Technology Devices (MTD) --->

NAND Flash Device Drivers --->

<*> NAND Device Support

<*> NAND Flash support for S3C2410/S3C2440 SoC

这些选项代表对NANDFLASH的操作。

(6)编译内核,并将arch/arm/boot/zImge拷贝到/tftpboot目录中

     在linux源码的顶层目录执行

#make uImage

[注意: 事先要把u-boot/tools/mkimage拷贝到/usr/bin目录下,并把/usr/bin/mkimage通过sudo 改变权限为777]

    #cp arch/arm/boot/zImage /tftpboot

(7)启动系统(登陆用户名:root, 密码:123456)

温馨提示:

如果启动过程中出现类似下面的提示:

Empty flash at 0x005dbbd0 ends at 0x005dbbf8

Empty flash at 0x005dbd28 ends at 0x005dbdcc

Empty flash at 0x005dbdd0 ends at 0x005dbdf8

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x005dc000: 0x622f instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x005dc004: 0x612f instead

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x005dc008: 0x696c instead


这是因为我们的网络文件系统在挂载我们还按照上面分区表去烧录一个JFFS2的镜像而导致,这时候我们可以编辑主机/opt/filesystem目录下的etc/init.d/rcS,把/bin/mount /dev/mtdblock3 /data -t jffs2这一行前面加上#注释掉:
#/bin/mount /dev/mtdblock3 /data -t jffs2


在目标板串口终端输入:
                                               

# cat /proc/mtd

dev:    size   erasesize  name

mtd0: 00040000 00004000 "uboot"

mtd1: 00200000 00004000 "kernel"

mtd2: 00800000 00004000 "rootfs(read only)"

mtd3: 00600000 00004000 "user fs"

 

可以看到系统已经可以支持nand flash了。


原创粉丝点击