nandflash烧录文件制作(ubi文件系统)
问题分析:
为了将IPRAN平台的APP烧录到nandflash,需要解决如下问题:
- linux内核启动后,挂载nandflash设备时,采用的ubi的文件系统。所以,烧录到nandflash的必须是一个ubi格式的文件系统。
- 挂载后的nandflash,有home和data两个卷,所有,烧录的ubi格式的文件系统必须已经包含home和data两个卷(以下方式不适用与创建两个或者多个分区的情况)。
- Nandflash不像norflash可以字节编程,nandflash是块设备且在生产和使用过程中会产生坏块,nandflash通过ECC校验解决该问题,校验信息存在OOB数据区。这就需要在制作烧录文件时,追加这部分信息。
为了解决上述3个问题,按如下步骤逐步解决以上问题:
1、创建工作目录,目录结构如下:
/home
/bin
/data
/dat
/ver
将IPRAN平台APP解压到 /hom/bin 目录下。
2、将IPRAN平台APP制作成可烧录到nandflash的ubi格式的文件系统镜像。/home 目录制作成 home.img,大小为80M,/data 目录制作成 data.img,大小为160M。命令如下:
mkfs.ubifs -r ./bin/home -m 2048 -e 126976 -c 640 -o home.img
mkfs.ubifs -r ./bin/data -m 2048 -e 126976 -c 1280 -o data.img
选项说明:
-r:创建文件系统镜像的原目录;
-m:最小I/O单元,即NAND FLASH一个page的大小;
-e:逻辑擦除块大小,即leb-size;
-c:最大逻辑擦除块的;
-o:输出文件名称;
3、制作成ubi格式的文件系统可烧录程序
ubinize -o ubifs -m 2048 -p 128KiB -s 2048 -O 2048 ubi.cfg
选项说明:
-o:输出文件名称;
-m:最小I/O单元,即nandflash一个page的大小;
-p:物理擦除块的大小(强制参数);
-s:最小的硬件输入输出页面大小,即:--sub-page-size;
-O: VID头相对物理擦除块起始地址的偏移量(默认是下一个EC之后的最小I / O单元或子页面头);
Ubinize的配置文件ubi.cfg内容如下:
[home]
mode=ubi--------------------------------固定值
image=home.img----------------------镜像源文件
vol_id=0----------------------------------卷ID
vol_size=83886080--------------------卷的大小
vol_type=dynamic
vol_alignment=1
vol_name=home------------------------卷名[data]
mode=ubi
image=data.img
vol_id=1
vol_size=167772160
vol_type=dynamic
vol_alignment=1
vol_name=data
vol_flags=autoresize
3、添加OOB数据(位于nandflash的spare区)。
通过软件的方式计算从EEC校验值,然后添加到ubi镜像文件中。
(nandflash的驱动程序采用的是软件ECC方式,本人未测试过硬件ECC的情况)
串行nandflash芯片MX35LF2GE4AB的ECC校验代码是linux内核源码中的 drivers/mtd/nand/nand_ecc.c 中的,代码详见 nand_calculate_ecc() 函数。算法说明详见内核源码 documentation/mtd/nand_ecc.txt 文件。在此不赘述。
对于MX35LF2GE4AB芯片,通过实验得知,OOB数据位于spare区的最后24字节中。如下如图所示(XX表示OOB数据):
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
FF |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
XX |
注意:
如果是spare区为128字节,则剩余部分需要用0xFF补全,即:每页需要添加128字节的OOB数据。例如:镁光的串行flash MT29F2G01ABAGDWB,每页有2176字节(2048+128),当添加OOB数据的时候,需要填充128字节到烧录文件中。
相关代码及编译脚本见如下链接(Linux version 4.9.65):nandflash烧录文件制作
nandflash烧录文件制作(ubi文件系统)相关推荐
- 解压ubi文件_制作ubi文件系统
制作 ubi 文件系统 目录 开发环境 ................................................................................ ...
- 解压ubi文件_请问为什么AM3352 NAND FLASH UBI文件系统挂载失败?
本帖最后由 一只耳朵怪 于 2018-6-21 11:08 编辑 各位好: 在NAND FLASH中写入ubi文件系统,内核启动时出现挂载失败. SDK:ti-processor-sdk-linux- ...
- 嵌入式 详解制作根文件系统以及文件系统中init以及其他文件详解
一.FHS(Filesystem Hierarchy Standard)标准介绍 当我们在linux下输入ls / 的时候,见到的目录结构以及这些目录下的内容都大同小异,这是因为所有的linux发行 ...
- linux内核创建ubi,UBI文件系统制作和挂载
关于参数可以参考attach的命令输出: root@ubuntu:~# ubiattach /dev/ubi_ctrl -m 4 -d 0 UBI device number 0, total 40 ...
- linux烧录文件的格式,制作emmc 烧录文件
量产需要统一使用烧录器烧录, 需要制作统一的 emmc 烧录文件,主要升级步骤如下: 工具: ISP tool; winhex ; checksum , mboottnize ; U盘(大于主板 EM ...
- 最小镜像文件制作【树莓派镜像】,简单有效,已经制作多次。使用Linux系统,只有Win系统的不适合。及再次烧录后启动可能出现的问题解决办法。
目录 一.前言 二.平台选择 1.Win系统:优缺点 2.Linux系统:优缺点 三.制作(只要两步[加上安装gparted,算三步]) 1.安装gparted 2.使用gparted (1)运行gp ...
- UBI 文件系统移植 sys 设备信息【转】
转自:http://blog.chinaunix.net/uid-25304914-id-3058647.html cat /sys/class/misc/ubi_ctrl/dev --------- ...
- Hi3516A开发-- UBI 文件系统使用指南
这篇文章在 Hi3516A V100R001C01SPC050\02.Only for Reference\02.software\documents_cn\UBI 文件系统使用指南.pdf 拿出来只 ...
- UBI文件系统(转)
UBI-Unsorted Block Imagine http://www.linux-mtd.infradead.org/doc/ubi.html 1.注意 很多人搞不清楚UBI到底是什么,这就是写 ...
最新文章
- Soldier and Badges
- 简明 Python 编程规范
- Flash数据的采集方法-搜房房价走势采集
- 五种计算机编程语言注定要衰落,牛逼的你怎么看呢???
- Eclipse 自动注释的设置
- AspectJ——AOP框架快速入门
- 小程序秒杀活动服务器,微信小程序官方上线张大仙周年活动,人数太多把服务器弄崩溃了...
- jeecg 与 jeecg-p3有什么区别?
- Spark入门(Python)
- 电脑备忘录软件测试自学,软件测试经验和教训分享.pdf
- 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第4节 等待唤醒机制_1_线程状态概述...
- FPGA图像处理 —— fpga实现cameralink接口图像传输
- 【python爬虫】反反爬之破解js加密--入门篇:谷歌学术镜像搜索(scmor.com)
- 时间线MindMap里程碑的使用方法
- iOS调用系统相机将英文改成中文
- 如何修改pdf文件内容并保存
- 个人简历应聘优势怎么写? 个人优势让你的简历模板加分
- ESP32之蓝牙配网blufi
- java中appletviewer是什么意思_自动生成供AppletViewer运行Java Applet的HTML文件
- Dragger.android的使用