Chinaunix首页 | 论坛 | 博客
  • 博客访问: 32133
  • 博文数量: 12
  • 博客积分: 445
  • 博客等级: 下士
  • 技术积分: 150
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-06 16:49
文章分类

全部博文(12)

文章存档

2012年(12)

我的朋友

分类: 嵌入式

2012-10-21 22:53:38

7、u-boot增加MTD(NAND)分区

    
    MTD分区时u-boot中的一个重要概念,因为u-boot的主要作用是引导操作系统及烧写程序,我们的程序(u-boot.bin,zImage,rootfs等)就是存储在NandFlash之中的。对NandFlash分区其实就是把NandFlash划分为几个地址区域,每个分区都有分区名,分区的大小,分区的起始地址。这样我们就可以规定把我们的程序存储在指定分区内,烧写NandFlash的时候就可以直接指定分区名,而不用计算要烧写的地址了。

    u-boot中已经集成了MTD分区的相关操作,我们只需要加入MTD分区的配置和分区表的定义。

    修改sdmk2440.h,加入MTDPARTS和JFFS2命令,修改的代码如下:
  1. #define CONFIG_CMD_CACHE
  2. #define CONFIG_CMD_DATE
  3. #define CONFIG_CMD_ELF
  4. #define CONFIG_CMD_NAND 
  5. #define CONFIG_CMD_MTDPARTS 
  6. #define CONFIG_CMD_JFFS2 


  7. #define CONFIG_JFFS2_NAND 1
  8. #define CONFIG_JFFS2_CMDLINE 1
  9. #define CONFIG_JFFS2_DEV    "nand0"

  10. #define CONFIG_MTD_DEVICE
  11. #define CONFIG_MTD_PARTITIONS
  12. #define MTDIDS_DEFAULT "nand0=nandflash0"
  13. #define MTDPARTS_DEFAULT        "mtdparts=nandflash0:1m@0(bios)," \
  14.                                     "128k(params)," \
  15.                                     "4m(kernel)," \
  16.                                     "-(root)"

    分区的说明如下图所示:

    如果定义了CONFIG_MTD_PARTITIONS,就会编译common目录下的cmd_mtdparts.c文件,这需要用到drivers/mtd/mtdcore.c中的函数,所以需要定义CONFIG_MTD_DEVICECONFIG_MTD_PARTITIONS这两项,才能编译mtdcore.c和mtdpart.c。

   重新编译u-boot,下载到NandFlash中运行,输入命令help,即可看到mtdparts命令,效果如下:

    使用命令mtdparts查看一下,并没有打出刚才设置的分区信息,使用printenv命令也看不到分区信息,效果如下:


    使用命令mtdparts help查看下,可以看到下面这一项:

    所以先运行命令mtdparts default,再使用命令mtdparts就可以看到分区的信息了,效果如下:


    因此,需要在程序中执行一次mtdparts default才能使分区生效,可以修改main.c中的main_loop函数,在该函数中运行mtdparts default命令,修改的代码如下:
  1. #ifdef CONFIG_AUTO_COMPLETE
  2.     install_auto_complete();
  3. #endif

  4. #ifdef CONFIG_CMD_MTDPARTS
  5.     if (!getenv("mtdparts"))
  6.     {
  7.         run_command("mtdparts default", 0);
  8.     }
  9. #endif

    重新编译u-boot,下载到NandFlash中运行,就可以看到分区的信息及使用分区了。使用printenv命令查看一下环境变量,可以看到分区信息,效果如下:
阅读(1061) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~