关于嵌入式Linux系统flash分区设计及文件系统格式选择的一些浅见

简介: 嵌入式系统应用程序升级是比较频繁的,对于flash的合理划分与文件系统选型就显得尤为关键。

嵌入式系统应用程序升级是比较频繁的,这就需要将flash进行合理的划分,一般情况,flash 的基本分区都有这几部分:
1.uboot分区
2.kernel分区
3.rootfs分区
这三部分是最基本的,一般都有。

如果只是这样分区,然后应用程序和文件系统放在一起,这样的话会导致应用程序升级的时候比较麻烦,因为应用程序与文件系统放在了一起,每次升级的时候都要将文件系统重新擦除、写入,这样升级浪费时间,而且风险很大,如果正在擦除flash或者正在写入映像文件时突然断电了,就会导致设备无法启动了(文件系统损坏)!这样还必须从uboot重新下载文件系统,给升级带来了很大的麻烦。

在嵌入式系统设计的时候一般都会将文件系统与经常更新的应用程序分离开来,放在不同的flash分区里,这样升级的时候只需要对应用程序分区进行擦除重新即可,这样即使升级过程中断电,也不会导致文件系统的损坏,系统依然可以启动。可以将升级程序与文件系统放在一起,这样设备重新启动以后还可以对设备进行升级。

还有一种做法是在Uboot中实现升级,这样也无法避免断电带来的问题,其实最主要的是不能将应用程序与文件系统放在一起。还有人在flash中做一个“安全模式”分区,系统如果损坏,导致设备无法正常启动,这时可以从安全模式启动,安全模式只提供最基本的功能,比如:升级,网络等,这些基本功能可以帮助你重新做系统。这个也类似于windows的win PE。总之,以升级整个文件系统来实现更新应用程序是最不可取的方法。

下面介绍一下嵌入式系统的几种常用的文件系统格式
其实嵌入式根文件系统的格式大家都知道,常用的有jffs2,cramfs,ramdisk,以及yaffs等,
他们各自的特点就不详细介绍了,百度、谷歌讲的很详细了。
这里说一下我当初学习时一些问题和疑惑的地方。

1.flash分区格式
刚开始总是以为flash的分区要对应一种格式,对这很是疑惑,不懂,别人问我你的根文件系统什么格式?

都不知道怎么回答,后来发现这个flash分区是没有具体的格式的,你下载什么格式的文件系统,它就是什么格式的,并不是像windows下C盘、D盘那样有FAT32格式、NTFS格式,windows下的这些格式也是格式化后才具有的格式,这个格式化的过程也相当于给这个盘里装了一个基本的文件系统。

2.文件系统格式
这里的文件系统格式就是指的上面提到的jffs2、cramfs等,这些文件系统格式需要内核支持,一般通过配置内核来实现支持,在内核中选中相关的选项。

简单介绍一下,使用的搭配方式:

当文件系统稳定后,准备发布产品,正式下入系统与应用程序时,一般将文件系统做成ramdisk形式,这样做的目的是防止嵌入式设备在运行过程中由于外界不良的条件造成的文件系统损坏而导致系统无法启动。ramdisk是系统启动后将文件系统映像从flash读取并解压到内存中运行,所以,设备运行中对文件系统所做的改变,在设备重启后都会恢复。cramfs是只读文件系统,这里为什么没有选择cramfs来作为设备的根文件系统格式呢?cramfs文件系统与ramdisk相比确实也有其优点:那就是他不是全部解压到内存的,而是用到多少,就解压大多数,这样对于嵌入式设备来说,是很节省内存的,不过这样也会造成设备运行时没有ramdisk快;缺点就是cramfs下是无法创建任何文件的,程序正常运行中,难免会重建一些临时文件(比如:Unix域套接字,就会在指定的目录下创建一个文件),所以我感觉还是用ramdisk比较好一些。

cramfs格式并不是全盘否定,将应用程序做成cramfs格式的就是一个不错的选择,应用程序运行的过程中一般我们也是不希望被改动的,这样做成cramfs,是只读的,就不会对其造成损坏。

另外我们的系统里还会做一个参数分区,就是这个分区里用于保存一些基本的参数(配置文件),这个分区要求是可读写的,这时我们就可以考虑jffs2文件系统了,jffs2是可读写的文件系统,专门为嵌入式系统设计的。

一个比较完善的嵌入式系统,至少要做到文件系统、应用程序、参数这些分区,而且格式如上所述。这样很方便以后的升级、维护。

目录
相关文章
|
12月前
|
Linux
Linux命令的基本格式解析
总的来说,Linux命令的基本格式就像一个食谱,它可以指导你如何使用你的计算机。通过学习和实践,你可以成为一个真正的“计算机厨师”,创造出各种“美味”的命令。
303 15
|
自然语言处理 监控 Linux
Linux 内核源码分析---proc 文件系统
`proc`文件系统是Linux内核中一个灵活而强大的工具,提供了一个与内核数据结构交互的接口。通过本文的分析,我们深入探讨了 `proc`文件系统的实现原理,包括其初始化、文件的创建与操作、动态内容生成等方面。通过对这些内容的理解,开发者可以更好地利用 `proc`文件系统来监控和调试内核,同时也为系统管理提供了便利的工具。
661 16
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
766 15
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
688 13
|
Ubuntu Unix Linux
Linux网络文件系统NFS:配置与管理指南
NFS 是 Linux 系统中常用的网络文件系统协议,通过配置和管理 NFS,可以实现跨网络的文件共享。本文详细介绍了 NFS 的安装、配置、管理和常见问题的解决方法,希望对您的工作有所帮助。通过正确配置和优化 NFS,可以显著提高文件共享的效率和安全性。
3648 7
|
存储 运维 监控
Linux--深入理与解linux文件系统与日志文件分析
深入理解 Linux 文件系统和日志文件分析,对于系统管理员和运维工程师来说至关重要。文件系统管理涉及到文件的组织、存储和检索,而日志文件则记录了系统和应用的运行状态,是排查故障和维护系统的重要依据。通过掌握文件系统和日志文件的管理和分析技能,可以有效提升系统的稳定性和安全性。
390 7
|
存储 监控 安全
《Linux 简易速速上手小册》第6章: 磁盘管理与文件系统(2024 最新版)
《Linux 简易速速上手小册》第6章: 磁盘管理与文件系统(2024 最新版)
193 1
|
Linux
第七章、Linux磁盘与文件系统管理
第七章、Linux磁盘与文件系统管理
248 0
|
存储 监控 Linux
Linux 常用命令汇总(六):磁盘与文件系统命令
Linux 常用命令汇总(六):磁盘与文件系统命令