1 Flash闪存类型

任何flash器件的写入操作只能在空或者已擦除的单元进行,在进行写入操作之前需要执行擦除

2 Linux内核中选项配置

2.1 文件系统公共选项:fs/Kconfig

ACL控制:访问控制列表
文件锁:CONFIG_FILE_LOCKING

模块:
通知机制
配额管理:ext2、ext3、reiserfs
自动挂载:CONFIG_AUTOFS4_FS
用户态完整的文件系统:CONFIG_FUSE_FS
缓存:Cache
分区类型:Partition Types

2.2 具体文件系统特性选项

CONFIG_YAFFS2_XXX
  YAFFS_YAFFS1:是否支持YAFFS1
  YAFFS_DOES_ECC:ECC校验
  YAFFS_YAFFS2:
  YAFFS_AUTO_YAFFS2
  YAFFS_ALWAYS_CHECK_CHUNK_ERASED
  YAFFS_EMPTY_LOST_AND_FOUND
  YAFFS_DISABLE_BLOCK_REFRESHING
  YAFFS_DISABLE_BACKGROUND
  YAFFS_XATTR

Network FS
  CONFIG_NFS_XXX (client)
    NFS_COMMON
    NFS_ACL_SUPPORT
    Version:V3 V4
    ROOT_NFS:如果需要使用NFS作为根文件系统,内核必须要设置支持NFS根文件系统
    NFS_FSCACHE
    NFS_USE_LEGACY_DNS / NFS_USE_KERNEL_DNS

3 内核修剪:文件系统相关

make ARCH=arm menuconfig

内置构建:增加内核镜像文件大小(常用)
模块构建:提供动态加载移除的灵活性

4 yaffs2文件镜像制作

下载yaffs2源码
git clone git://www.aleph1.co.uk/yaffs2


仅需要在utils目录下编译就能得到yaffs2工具

4.1 部分报错

In file included from mkyaffsimage.c:30:0:
yaffs_guts.h:502:2: error: unknown type name ‘YTIME_T’YTIME_T yst_uid;^~~~~~~
yaffs_guts.h:503:2: error: unknown type name ‘YTIME_T’YTIME_T yst_gid;^~~~~~~
.......
,在../yaffs_guts.h中加上如下定义:
#ifndef YTIME_T
#define YTIME_T  time_t
#endif

yaffs_endian.h:28:15: error: unknown type name ‘u64’static inline u64 swap_u64(u64 val)^~~
yaffs_endian.h:28:28: error: unknown type name ‘u64’static inline u64 swap_u64(u64 val)^~~
yaffs_endian.h: In function ‘swap_ytime_t’:
yaffs_endian.h:43:32: error: ‘u64’ undeclared (first use in this function); did you mean ‘a64l’?if (sizeof(YTIME_T) == sizeof(u64))^~~a64l
yaffs_endian.h:43:32: note: each undeclared identifier is reported only once for each function it appears in
yaffs_endian.h:44:10: error: implicit declaration of function ‘swap_u64’; did you mean ‘swap_u32’? [-Werror=implicit-function-declaration]return swap_u64(val);^~~~~~~~swap_u32
yaffs_endian.h:44:10: error: nested extern declaration of ‘swap_u64’ [-Werror=nested-externs]
在../yaffs_endian.h文件添加如下定义:typedef unsigned long long u64;

make之后获得的工具

4.2 制作镜像

 ./mkyaffs2image ../mini_Linux_system image/rootfs.img

会生成一个根文件系统的yaffs2影响文件。但是Flash上烧录系统需要涉及Flash的分区。

5 Flash分区和镜像烧录

5.1 Flash设备分区

1、嵌入式通用Flash布局
BootLoader + kernel ++ rootfs + appfs

2、内核启动参数bootargs:mtparts
这个参数可以控制内核对Flash分区的设置
  mtdparts: mtdparts=mtd-id:< size1 >@< offset1 >(< name1 >),< size2 >@< offset2 >(< name2 >)
  Flash设备的标志号 分区描述:大小 @ 偏移 分区的描述
  示例:
  mtdparts=s5pv210-nand:1M(boot),5M(kernel),80M(rootfs),426M(usrfs)

想要参数起作用,内核中mtd驱动必须要支持,即内核配置是需要选上Command line partition table parsing

嵌入式Flash设备的文件系统:jffs/jfss2和yasffs/yasffs2相关推荐

  1. 嵌入式基于Flash上的文件系统

    在嵌入式领域,FLASH是一种常用的存储介质,由于其特殊的硬件结构,所以普通的文件系统如ext2,ext3等都不适合在其上使用,于是就出现了专门针对FLASH的文件系统,比较常用的有jffs2,yaf ...

  2. flash和linux文件系统,面向大容量Flash的高效Linux文件系统改进和实现

    摘要: 文件系统是Linux操作系统的重要组成部分.而本文对于面向大容量Flash文件系统高效性的研究则主要侧重于对于嵌入式Linux操作系统文件系统的研究.由于嵌入式设备介质的特殊性,电源系统的不稳 ...

  3. 嵌入式存储设备学习笔记

    更多内容可关注微信公众号 ##各种非易失性存储设备 ###ROM/PROM/EPROM/EEPROM 在NOR/NAND flash出现之前,主要的非易失性存储设备是EPROM和EEPROM. ROM ...

  4. 嵌入式Linux设备驱动程序:编写内核设备驱动程序

    嵌入式Linux设备驱动程序:编写内核设备驱动程序 Embedded Linux device drivers: Writing a kernel device driver 编写内核设备驱动程序 最 ...

  5. linux java升级版本_为嵌入式Linux设备实现更新/升级系统

    我有一个在嵌入式Linux设备上运行的应用程序,并且偶尔会对软件进行更改,有时也会对根文件系统甚至已安装的内核进行更改 . 在当前的更新系统中,只删除旧应用程序目录的内容,并在其上复制新文件 . 当对 ...

  6. 对nand flash设备进行升级

    前言 这段时间在给板子开发一个升级的功能,板子的Flash使用的是nand flash,使用mtd去管理分区.在正式开始讲升级部分之前,我们先了解一下nand flash和mtd的基本知识,最后我还会 ...

  7. 【IoT开发工具箱 | 02】嵌入式Linux设备网速测试方法

    这是机器未来的第48篇文章 原文首发地址:https://robotsfutures.blog.csdn.net/article/details/126847220 <IoT开发工具箱系列> ...

  8. 嵌入式linux设备驱动开发,嵌入式Linux设备驱动开发简介.pdf

    清远见--嵌入式培训专家 http :// "黑色经典"系列之<嵌入式Linux 应用程序开发详解> 11 章 嵌入式Linux 设备驱动开发 本章目标 本书从 6 章 ...

  9. 嵌入式系统中的文件系统以及MTD

    节介绍File System和MTD技术 一 FS 熟知的FS有ext2,3,4.但是这些都是针对磁盘设备的.而ES中一般的存储设备为Flash,由于Flash的特殊性: Flash存储按照Block ...

  10. 嵌入式Linux设备驱动程序:在运行时读取驱动程序状态

    嵌入式Linux设备驱动程序:在运行时读取驱动程序状态 Embedded Linux device drivers: Reading driver state at runtime 在运行时了解驱动程 ...

最新文章

  1. android exchange服务,带有“ Service com.android.exchange.ExchangeService
  2. php is_dir 判断是否存在这目录
  3. git新建空白文件没有生效
  4. 通过配置hosts.allow和hosts.deny文件允许或禁止ssh或telnet操作
  5. eigen 编译_四足机器人优化方法:Webots下Eigen与qpOASES非线性优化库环境搭建
  6. 单向链表存储方式下插入、删除、搜索
  7. 音视频编解码常用知识点
  8. 解决python写入文件数据不全的问题
  9. win10图片浏览改回原来win7的模式
  10. 射影几何----二次曲线三角形调和定理的应用,圆锥曲线内接焦点三角形定理的证明【原创】
  11. 论文笔记(CPN):Cascaded Pyramid Network for Multi-Person Pose Estimation
  12. 爬取豆瓣电影分类排行榜
  13. [ZZ]通过修改键盘映射替代损坏按键
  14. SQL注入:sqli-labs lesson-8 lesson -9 基于布尔值和基于时间的盲注!
  15. 三、nginx服务的nginx.conf的参数配置解析
  16. 台式计算机报废如何进行处置,设备报废处置请示.doc
  17. Redis教程(上课笔记)
  18. “超越融合 异筑信创”,AntDB数据库携手超云等生态伙伴共建信创大生态
  19. Code VBA完整代码块,创建Visual Basic源代码
  20. 制作一个3D旋转相册

热门文章

  1. 衣带渐宽终不悔,为“指针”消得人憔悴(一)
  2. 【redis源码学习】rax,我愿称之为“升级版字典树”
  3. 第三方支付之支付宝支付
  4. vue对vue-giant-tree进行节点操作
  5. 论文到底怎么降重才有效
  6. python中的二维列表(实例)_python实现两个一维列表合并成一个二维列表
  7. 行业知识图谱调查报告(一):知识图谱概述
  8. asp.net汉字转拼音 可返回拼音首字母
  9. 谷歌抢注18个“.中国”域名:扫清障碍
  10. 计算机为什么选择二进制?