TX2440 ARM开发板Uboot移植(五、yaffs2文件系统的支持)

2024-06-04 09:32

本文主要是介绍TX2440 ARM开发板Uboot移植(五、yaffs2文件系统的支持),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Yaffs/yaffs2文件系统的设计充分考虑到Nand Flash以页为存取单位等的特点,将文件组织成固定大小的段(Chunk)。以528B的页为例,Yaffs/yaffs2文件系统使用前512B存储数据和16B的额外空间存放数据的ECC和文件系统的组织信息等(称为OOB数据)。通过OOB数据,不但能实现错误检测和坏块处理,同时还可以避免加载时对整个存储介质的扫描,加快了文件系统的加载速度。

1、 在原来对Nand操作的命令集列表中添加Yaffs2对Nand的写命令,修改 common/cmd_nand.c 文件,在U_BOOT_CMD约461行处加入读写Yaffs2格式的命令:

U_BOOT_CMD(nand, 5, 1, do_nand,
 "nand    - NAND sub-system\n",
 "info                  - show available NAND devices\n"
 "nand device [dev]     - show or set current device\n"
 "nand read[.jffs2]     - addr off|partition size\n"
 "nand write[.jffs2]    - addr off|partition size - read/write `size' bytes starting\n"
 "    at offset `off' to/from memory address `addr'\n"

  "nand read[.yaffs2] - addr off size - read the `size' byte yaffs image starting\n"
  "    at offset `off' to memory address `addr'\n"
  "nand write[.yaffs2] - addr off size - write the `size' byte yaffs image starting\n"
  "    at offset `off' from memory address `addr'\n"

 
"nand erase [clean] [off size] - erase `size' bytes from\n"
 "    offset `off' (entire device if not specified)\n"
... ...


2、在该文件中,在对nand操作的do_nand函数中添加yaffs2对nand的操作:

int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
  ... ...
  s = strchr(cmd, '.');
  if (s != NULL && (!strcmp(s, ".jffs2") || !strcmp(s, ".e") || !strcmp(s, ".i"))) {
         。。。。。。
  } 
else if (  s != NULL && !strcmp(s, ".yaffs2")){
      if (read) {
        /* read */
        nand_read_options_t opts;
        memset(&opts, 0, sizeof(opts));
        opts.buffer = (u_char*) addr;
        opts.length = size;
        opts.offset = off;
        opts.readoob = 1;
        opts.quiet   = quiet;
        ret = nand_read_opts(nand, &opts);
      } else {
        /* write */
        nand_write_options_t opts;
        memset(&opts, 0, sizeof(opts));
        opts.buffer = (u_char*) addr;
        opts.length = size;
        opts.offset = off;
        /* opts.forceyaffs = 1; */
        opts.noecc = 1;
        opts.writeoob = 1;
        opts.blockalign = 1;
        opts.quiet      = quiet;
        opts.skipfirstblk = 1;
        ret = nand_write_opts(nand, &opts);
      }
    }else if (s != NULL && !strcmp(s, ".oob")) {
   /* read out-of-band data */


3、修改 include/nand.h 文件,在nand_write_options增加skipfirstblk成员:

struct nand_write_options {
 u_char *buffer;  /* memory block containing image to write */
 ulong length;  /* number of bytes to write */
 ulong offset;  /* start address in NAND */
 int quiet;  /* don't display progress messages */
 int autoplace;  /* if true use auto oob layout */
 int forcejffs2;  /* force jffs2 oob layout */
 int forceyaffs;  /* force yaffs oob layout */
 int noecc;  /* write without ecc */
 int writeoob;  /* image contains oob data */
 int pad;  /* pad to page size */
 int blockalign;  /* 1|2|4 set multiple of eraseblocks to align to */
 int skipfirstblk;
};


4、修改drivers/mtd/nand/nand_util.c文件的nand_write_opts函数,增加对skipfirstblk成员的支持:

size_t written;
int result;
int skipfirstblk = opts->skipfirstblk;
 ... ...
 while (blockstart != (mtdoffset & (~erasesize_blockalign+1))) {
   ... ...
 }

 /* skip the first good block when wirte yaffs image*/
 if(skipfirstblk){
  mtdoffset += erasesize_blockalign;
  skipfirstblk = 0;
  continue;
 }

 
 readlen = meminfo->oobblock;
 ... ...


5、修改drivers/mtd/nand/nand_base.c文件的nand_write_page函数,注释掉因前面设置opts.noecc=1导致烧写Nand Flash过程中出现的提示信息:

case NAND_ECC_NONE:
  //printk (KERN_WARNING "Writing data without ECC to NAND-FLASH is not recommended\n");
  this->write_buf(mtd, this->data_poi, mtd->oobblock);
  break;

这篇关于TX2440 ARM开发板Uboot移植(五、yaffs2文件系统的支持)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1029703

相关文章

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

开发板NFS挂载文件目录

文章目录 序NFS1. 安装 NFS 服务器和客户端在服务器上(NFS 服务器端)在客户端上(NFS 客户端) 2. 配置 NFS 服务器创建共享目录编辑 `/etc/exports` 文件启动 NFS 服务 3. 在客户端挂载 NFS 共享创建挂载点挂载 NFS 共享验证挂载 4. 设置开机自动挂载5. 解决权限问题 序 本节主要实现虚拟机(服务器)与开发板(客户端)通过N

Golang支持平滑升级的HTTP服务

前段时间用Golang在做一个HTTP的接口,因编译型语言的特性,修改了代码需要重新编译可执行文件,关闭正在运行的老程序,并启动新程序。对于访问量较大的面向用户的产品,关闭、重启的过程中势必会出现无法访问的情况,从而影响用户体验。 使用Golang的系统包开发HTTP服务,是无法支持平滑升级(优雅重启)的,本文将探讨如何解决该问题。 一、平滑升级(优雅重启)的一般思路 一般情况下,要实现平滑

sqlite不支持中文排序,采用java排序

方式一 不支持含有重复字段进行排序 /*** sqlite不支持中文排序,改用java排序* 根据指定的对象属性字段,排序对象集合,顺序* @param list* @param field* @return*/public static List sortListByField(List<?> list,String field){List temp = new ArrayList(

一款支持同一个屏幕界面同时播放多个视频的视频播放软件

GridPlayer 是一款基于 VLC 的免费开源跨平台多视频同步播放工具,支持在一块屏幕上同时播放多个视频。其主要功能包括: 多视频播放:用户可以在一个窗口中同时播放任意数量的视频,数量仅受硬件性能限制。支持多种格式和流媒体:GridPlayer 支持所有由 VLC 支持的视频格式以及流媒体 URL(如 m3u8 链接)。自定义网格布局:用户可以配置播放器的网格布局,以适应不同的观看需求。硬

Science Robotics 首尔国立大学研究团队推出BBEX外骨骼,实现多维力量支持!

重复性举起物体可能会对脊柱和背部肌肉造成损伤,由此引发的腰椎损伤是工业环境等工作场所中一个普遍且令人关注的问题。为了减轻这类伤害,有研究人员已经研发出在举起任务中为工人提供辅助的背部支撑装置。然而,现有的这类装置通常无法在非对称性的举重过程中提供多维度的力量支持。此外,针对整个人体脊柱的设备安全性验证也一直是一个缺失的环节。 据探索前沿科技边界,传递前沿科技成果的X-robot投稿,来自首尔国立

bash: arm-linux-gcc: No such file or directory

ubuntu出故障重装了系统,一直用着的gcc使用不了,提示bash: arm-linux-gcc: No such file or directorywhich找到的命令所在的目录 在google上翻了一阵发现此类问题的帖子不多,后来在Freescale的的LTIB环境配置文档中发现有这么一段:     # Packages required for 64-bit Ubuntu

编译linux内核出现 arm-eabi-gcc: error: : No such file or directory

external/e2fsprogs/lib/ext2fs/tdb.c:673:29: warning: comparison between : In function 'max2165_set_params': -。。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。 。。。。。。。。 host asm: libdvm <= dalvik/vm/mterp/out/Inte

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密 可以将表情,动物,水果,表情,手势,猫语,兽语,狗语,爱语,符号,数字,字母,加密和解密 可以将文字、字母、数字、代码、标点符号等内容转换成新的文字形式,通过简单的文字以不同的排列顺序来表达不同的内容 源码截图: https://www.httple.net/152649.html

使用jetty和mongodb做个简易文件系统

使用jetty和mongodb做个简易文件系统 - ciaos 时间 2014-03-09 21:21:00   博客园-所有随笔区 原文   http://www.cnblogs.com/ciaos/p/3590662.html 主题  MongoDB  Jetty  文件系统 依赖库: 1,jetty(提供http方式接口) 2,mongodb的java驱动(访问mo