TFFS格式化到创建成功过程

True FFS内核编程

1、格式化FLASH

即使FLASH没有和块设备驱动绑定,也可对其进行格式化。

tffsDevFormat (int tffsDriveNo, int formatArg);

typedef struct

{

  tffsFormatParams formatParams;

  unsigned formatFlags;

} tffsDevFormatParams;

2、创建Boot Image区域
2.1 创建Boot Image区域

创建Boot Image区域,通过在格式化flash,使TFFS段从某个偏移的位置开始。

tffsFormatParams

typedef struct {

  long int bootImageLen; //保留给Boot Image空间大小

  unsigned percentUse;

  unsigned noOfSpareUnits;

  unsigned long vmAddressingLimit;

  int (*progressCallback)(int totalUnitsToFormat, int totalUnitsFormattedSoFar);

  char * volumeLabel;

  unsigned noOfFATcopies;

  unsigned embeddedCISlength;

  char * embeddedCIS;

} tffsFormatParams;

STATUS sysTffsFormat (void)

{

  STATUS status;

  tffsDevFormatParams params =

  {

#define HALF_FORMAT /* lower 0.5MB for bootimage, upper 1.5MB for TFFS */

#ifdef HALF_FORMAT

  {0x80000l, 99, 1, 0x10000l, NULL, {0,0,0,0}, NULL, 2, 0, NULL},

  #else

  {0x000000l, 99, 1, 0x10000l, NULL, {0,0,0,0}, NULL, 2, 0, NULL},

  #endif /* HALF_FORMAT */

  FTL_FORMAT_IF_NEEDED

};

  /* we assume that the drive number 0 is RFA */

  status = tffsDevFormat (0, (int)&params);

  return (status);

}

2.2 写Boot Image到FLASH

采用函数tffsBootImagePut()实现,该函数依赖tffsRawio(),所以不能在TFFS卷装载以后使用。

TffsBootImagePut()能直接操作FLASH的任何区域。

函数定义:

STATUS tffsBootImagePut

(

  int driveNo, /* TFFS drive number */

  int offset, /* offset in the flash chip/card */

  char * filename /* binary format of the bootimage */

)

3 mounting the driver

函数usrTffsConfig()把dosFile文件系统加载到TFFS Flash驱动上。

STATUS usrTffsConfig

(

  int drive, /* drive number of TFFS */

  int removable, /* 0 for nonremovable flash media */

  char * fileName /* mount point */

)

STATUS usrTffsConfig ( int drive, int removable, char * fileName )

{

int dosFsCacheSizeDefault = 128 * 1024 ;

CBIO_DEV_ID pCbio;

BLK_DEV * pBlkDev;

char devName [BOOT_FILE_LEN];

if ((UINT)drive >= noOfDrives) {

printErr ("drive is out of range (0-%d)./n", noOfDrives - 1);

return (ERROR);

}

/* create a block device spanning entire disk (non-distructive!) */

if ((pBlkDev = tffsDevCreate (drive, removable)) == NULL) {

printErr ("tffsDevCreate failed./n");

return (ERROR);

}

/* split off boot device from boot file */

devSplit (fileName, devName);

/* initialize the block device as a dosFs device named */

/* Create e.g. 128 Kbytes disk cache */

if ( (pCbio = dcacheDevCreate( (CBIO_DEV_ID) pBlkDev, NULL,

dosFsCacheSizeDefault, devName)) == NULL )

return (ERROR);

if (dosFsDevCreate (devName, pCbio, 0, NONE) != OK)

return (ERROR);

return (OK);

}

4 TFFS SHELL命令

格式化flash,但保留Boot Image区域。

-> sysTffsFormat

加载RFA medium做为驱动0

-> usrTffsConfig 0,0,"/RFA/"

转自:http://m.blog.csdn.net/blog/da895/6033647

时间: 2024-10-10 09:45:20

TFFS格式化到创建成功过程的相关文章

创建成功的Python项目

创建成功的Python项目 前端开发工具技巧介绍—Sublime篇 SEO在网页制作中的应用 观察者模式 使用D3制作图表 英文原文:Create successful Python projects,编译:Elaine.Ye 创建一个成功的开源Python项目所涉及的并不仅仅是编写有用的代码,与其相关的还有社区的参与.越来越多的合作机会.技艺以及支持等.探索最佳的做法有助于你创建出自己的成功项目. 开源Python项目的生态系统丰富多样,这使得您能够站在巨人的肩膀上来开发下一个开源项目.此外,

实验环境里新创建成功的web application却在浏览器中返回404错误

刚刚翻笔记翻到一些刚学SharePoint时候解决的一些很2的初级问题,本来是有些挣扎该不该把它们记录到这个blog里的?因为担心这些很初级的文章会拉低这个blog的逼格,但是我的哥们善意的提醒了我一下,说我的逼格本来就不高,于是我就放心的开写了. 其实不开玩笑的讲,做一个SharePoint Administrator很多时候不会碰到很多developer们碰到的那么高大上的问题,难的问题虽然也会经常有,但更多的都是一些琐碎的杂七杂八的问题,可人生不就是从杂七杂八中一点一点积累的过程吗?不记录

Fabric1.4源码解析:客户端创建通道过程

在使用Fabric创建通道的时候,通常我们执行一条命令完成,这篇文章就解析一下执行这条命令后Fabric源码中执行的流程. peer channel create -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/channel.tx --tls true --cafile $ORDERER_CA 整个流程的切入点在fabric/peer/main.go文件中的main()方法 (本文中使用的是Fabric1.4版本,

OpenCms创建站点过程图解——献给OpenCms的刚開始学习的人们

非常多人都听说了OpenCms,知道了它的强大,索性的下载安装了,最终见到了久违OpenCms,看到了它简洁的界面,欣喜过后却不免一脸茫然,这个东西怎么用,我怎么用它来建站,从哪開始,无从下手,找资料,少之双少,几经周折后,迫于时间等诸多因素,非常多人无奈地选择了放弃…… 希望这篇文章能够对OpenCms的追随者们有所帮助,但这也仅仅是OpenCms的皮毛,把它的强大功能为已所用还须要我们付出很多其它的努力…… 一.切换到“/sites/”下,创建网站目录“testWeb” 输入目录的标题,这个

dbus 创建Client过程中几个有用的函数

/**  * g_type_init:  *  * This function used to initialise the type system.  Since GLib 2.36,  * the type system is initialised automatically and this function does  * nothing.  *  * Deprecated: 2.36: the type system is now initialised automatically

《Programming WPF》翻译 第8章 5.创建动画过程

原文:<Programming WPF>翻译 第8章 5.创建动画过程 所有在这章使用xaml举例说明的技术,都可以在代码中使用,正如你希望的.可是,代码可以使用动画在某种程度上不可能在xaml中实现的. 在代码中创建动画需要稍微多一点的努力--比使用标记.然而,代码提供了更多的弹性.你可以在运行期计算属性,而不是在xaml中硬编码,从而支持你的动画适应环境.例如,这可能是有用的--在当前窗体的大小基于动画的参数. 使用代码一个额外的好处是我们不需要使用storyboard,替代的,我们可以创

Java对象创建的过程及对象的内存布局与访问定位

这里以HotSpot为例,且所说的对象指普通的Java对象,不包括数组和Class对象等. 1.对象创建的过程 类加载.解析.初始化:虚拟机遇到new时先检查此指令的参数是否能在常量池中找到类的符号引用,并检查符号引用代表的类是否被加载.解析.初始化,若没有则先进行类加载. 对象内存分配:类加载检查通过后,虚拟机为新生对象分配内存,对象所需内存大小在类加载完成后便可完全确定.分配内存的任务等同于从堆中分出一块确定大小的内存. 根据内存是否规整(即用的放一边,空闲的放另一边,是否如此与所使用的垃圾

pthread_create线程创建的过程剖析(转)

概述 在Linux环境下,pthread库提供的pthread_create()API函数,用于创建一个线程.线程创建失败时,它可能会返回ENOMEM或EAGAIN.这篇文章主要讨论线程创建过程中碰到的一些问题和解决方法. 创建线程 首先,本文用的实例代码example.c: /* example.c*/ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <pthread.h&g

pthread_create线程创建的过程剖析

http://blog.csdn.net/wangyin159/article/details/47082125 在Linux环境下,pthread库提供的pthread_create()API函数,用于创建一个线程.线程创建失败时,它可能会返回ENOMEM或EAGAIN.这篇文章主要讨论线程创建过程中碰到的一些问题和解决方法. 创建线程 首先,本文用的实例代码example.c: /* example.c*/#include <stdio.h>#include <stdlib.h>