True FFS内核编程(简单笔记)

2006-08-22 19:22

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);

}

问题:这里保留的长度为0x80000l,为什么说是0.5M,不止啊?

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

True FFS内核编程(简单笔记)相关推荐

  1. [linux内核][LINUX内核编程]学习笔记(一)

    linux内核使用bitmap相关  1,声明一个bitmap数组,可以表示100个bit,数组名字是bitmap [cpp] view plaincopy DECLARE_BITMAP(bitmap ...

  2. Windows驱动开发学习笔记(二)—— 驱动调试内核编程基础

    Windows驱动开发学习笔记(二)-- 驱动调试&内核编程基础 基础知识 驱动调试 PDB(Program Debug Database) WinDbg 加载 PDB 实验:调试 .sys ...

  3. 寒江独钓windows 内核安全编程学习笔记

    寒江独钓windows 内核安全编程学习笔记 本博客记录自己的学习过程,如有侵犯或者打扰请告知. 由于项目的需求,第一次接触到驱动程序.开始学习了寒江大神的的内核安全编程.小白一个,第一章就遇到了问题 ...

  4. 2、从汇编语言到Windows内核编程笔记(2)

    内核线程 在驱动中生成的线程一般是系统线程.系统线程所在的进程名为"System". NTSTATUS PsCreateSystemThread( OUT PHANDLE Thre ...

  5. 重载内核全程分析笔记

    标 题: [原创]重载内核全程分析笔记 作 者: Speeday 时 间: 2013-08-20,20:19:46 链 接: http://bbs.pediy.com/showthread.php?t ...

  6. Spark编程指南笔记

    Spark编程指南笔记 标签: spark 编程 笔记 | 发表时间:2015-02-02 16:00 | 作者: 分享到: 出处:http://blog.javachen.com/rss.xml 本 ...

  7. Win64 驱动内核编程-8.内核里的其他常用

    内核里的其他常用 1.遍历链表.内核里有很多数据结构,但它们并不是孤立的,内核使用双向链表把它们像糖 葫芦一样给串了起来.所以遍历双向链表能获得很多重要的内核数据.举个简单的例子,驱 动对象 Driv ...

  8. Win64 驱动内核编程-3.内核里使用内存

    内核里使用内存 内存使用,无非就是申请.复制.设置.释放.在 C 语言里,它们对应的函数是:malloc.memcpy.memset.free:在内核编程里,他们分别对应 ExAllocatePool ...

  9. Linux与C++11多线程编程(学习笔记)

    多线程编程与资源同步 在Windows下,主线程退出后,子线程也会被关闭; 在Linux下,主线程退出后,系统不会关闭子线程,这样就产生了僵尸进程 3.2.1创建线程 Linux 线程的创建 #inc ...

最新文章

  1. 关于第十六届全国大学生智能汽车竞赛总决赛的规则建议
  2. 数据分析方法有哪些?
  3. 计算机组成原理第6章-总线
  4. python算法与数据结构-希尔排序算法(35)
  5. Docker学习笔记
  6. 洛谷 P2762 太空飞行计划问题
  7. python 旅游_Python带你来一次说走就走的环球旅行
  8. Ext3文件读写流程概述
  9. 如何在 Mac 上查找和管理 Safari 下载?
  10. iOS开发初学者需要经常去的论坛或网站
  11. xshell 6安装教程
  12. 计算机软件免税,软件产品的增值税优惠有哪些?
  13. 最小二乘法曲线拟合(代码环境:matlab)
  14. 常用的接口测试工具有哪些?
  15. CN2专线和普通国际对比优势在哪里 有什么优势
  16. 基于杂化材料银-氨基硅烷氧化石墨烯的化学战剂的电化学传感
  17. 配置域名解析以及Nginx反向代理
  18. 极客日报:贾跃亭回应是否有回国打算:那必须的;顺丰将拿出 2 亿元给快递员加薪;OpenAI 宣布解散机器人团队
  19. 教你怎么把视频转换成gif动图
  20. 抖音直播间挂人气协议工具

热门文章

  1. 如何在CAD中完成直线箭头的绘制?
  2. layer-v2.4弹层组件使用示例
  3. python匿名函数里用if_python匿名函数 高阶函数 内置函数 文件操作
  4. java md5签名算法_MD5请求签名规则
  5. UNITY3D 动作游戏开发教程《怪物猎人》
  6. Unity3D中第三人称视角的镜头跟随和目标锁定
  7. 电子采购订单与手动采购订单有什么区别?
  8. android商城首页demo,FanZhengxi
  9. 【解决方案】三星T5移动硬盘连接mac pro提示“已断开连接”
  10. 经典错误:symbol(s) not found for architecture x86_64 || Undefined symbols for architecture x86_64: