本文是关于嵌入式Linux系统的闪存分区设计和文件系统格式选择的实例分析。边肖觉得很实用,所以想分享给大家学习。希望大家看完这篇文章能有所收获。话不多说,让我们和边肖一起看看。
嵌入式系统应用频繁升级,合理划分闪存很有必要。通常,闪存的基本分区包括以下几个部分:
1.uboot分区。
2 .内核分区。
3.rootfs分区
这三部分是最基本的,也是普遍存在的。
如果只是这样分区,然后把应用和文件系统放在一起,在升级应用的时候会造成麻烦,因为应用和文件系统放在一起,每次都要把文件系统擦除再写,既浪费时间,风险又很大。如果正在擦除flash或写入镜像文件,会突然断电,导致设备无法启动(文件系统损坏)!这样,文件系统必须从uboot重新下载,给升级带来了很多麻烦。
在嵌入式系统的设计中,文件系统通常与频繁更新的应用程序分开,放在不同的闪存分区中。这样在升级时只需要擦除应用分区并重新更新即可,这样即使升级时断电也不会损坏文件系统,系统仍然可以启动。您可以将升级程序与文件系统放在一起,以便在设备重新启动后对其进行升级。
另一种方式是在Uboot中升级,无法避免断电带来的问题。事实上,最重要的是应用程序不能与文件系统放在一起。
有人在flash中做了“安全模式”分区。如果系统损坏,设备无法正常启动,可以从安全模式启动。安全模式只提供最基本的功能,比如升级和网络。这些基本功能可以帮助您重建系统。
这也类似于windows的win PE。
总之,升级整个文件系统来更新应用程序是最不可取的方法。
以下是一些常见的嵌入式系统文件系统格式:
其实大家都知道嵌入式根文件系统的格式,常用的有jffs2、cramfs、ramdisk、yaffs等。
他们各自的特点就不详细介绍了,但是百度和谷歌已经谈得很详细了。
下面是我在学习的时候遇到的一些问题和疑惑。
1 .闪存分区格式。
一开始我一直以为flash的分区应该对应一种格式,但是我很困惑很不解。有人问我你的根文件系统是什么格式。
我不知道怎么回答。后来发现这个闪存分区没有具体的格式。你下载的什么格式的文件系统就是什么格式。它在windows下没有类似c盘和D盘那样的FAT32格式和NTFS格式。windows下的这些格式也是格式化格式。这个格式化过程相当于在这个磁盘上安装一个基本文件系统。
2.文件系统格式。
这里的文件系统格式指的是jffs2、cramfs等。如上所述。这些文件系统格式需要内核支持,这通常是通过配置内核并在内核中选择相关选项来实现的。
简要介绍生产和使用的搭配。
当文件系统稳定并准备发布产品时,当系统和应用程序正式下载时,通常会将文件系统做成ramdisk形式,以防止嵌入式设备在运行过程中因不利的外部条件导致文件系统损坏而无法启动。Ramdisk从闪存中读取文件系统映像,并在系统启动后将其解压缩到内存中,因此在设备运行期间对文件系统所做的更改将在设备重新启动后恢复。Cramfs是一个只读文件系统。为什么这里没有选择cramfs作为设备的根文件系统格式?与ramdisk相比,cramfs文件系统确实有其优势,即它不会将所有文件解压缩到内存中,而是根据需要对大部分文件进行解压缩,这为嵌入式设备节省了内存,但也会导致设备运行速度比ramdisk更快;缺点是cramfs下无法创建文件,在程序正常运行过程中难免会重建一些临时文件(比如在Unix domain socket的指定目录下会创建一个文件),所以我觉得还是用ramdisk比较好。
Cramfs格式不是全盘否定。将应用程序做成cramfs格式是一个不错的选择。一般来说,我们不希望在应用程序运行过程中被改变。如果应用程序被做成cramfs,它将是只读的,所以它不会被损坏。
另外,我们的系统中会有一个参数分区,就是这个分区用来存储一些基本参数(配置文件)。该分区要求可读和可写。这时我们可以考虑jffs2文件系统,这是一个专为嵌入式系统设计的可读可写的文件系统。
一个完善的嵌入式系统至少应该分区文件系统、应用程序和参数,格式如上。这对于未来的升级和维护非常方便。
以上是嵌入式Linux系统中闪存分区设计和文件系统格式选择的实例分析。边肖认为,一些知识点可能会在我们的日常工作中看到或使用。我希望你能通过这篇文章学到更多的知识。更多详情请关注行业资讯频道。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/40179.html