关于嵌入式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是可读写的文件系统,专门为嵌入式系统设计的。

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

目录
相关文章
|
7月前
|
自然语言处理 监控 Linux
Linux 内核源码分析---proc 文件系统
`proc`文件系统是Linux内核中一个灵活而强大的工具,提供了一个与内核数据结构交互的接口。通过本文的分析,我们深入探讨了 `proc`文件系统的实现原理,包括其初始化、文件的创建与操作、动态内容生成等方面。通过对这些内容的理解,开发者可以更好地利用 `proc`文件系统来监控和调试内核,同时也为系统管理提供了便利的工具。
292 16
|
9月前
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
488 15
|
10月前
|
Ubuntu Unix Linux
Linux网络文件系统NFS:配置与管理指南
NFS 是 Linux 系统中常用的网络文件系统协议,通过配置和管理 NFS,可以实现跨网络的文件共享。本文详细介绍了 NFS 的安装、配置、管理和常见问题的解决方法,希望对您的工作有所帮助。通过正确配置和优化 NFS,可以显著提高文件共享的效率和安全性。
2149 7
|
10月前
|
存储 运维 监控
Linux--深入理与解linux文件系统与日志文件分析
深入理解 Linux 文件系统和日志文件分析,对于系统管理员和运维工程师来说至关重要。文件系统管理涉及到文件的组织、存储和检索,而日志文件则记录了系统和应用的运行状态,是排查故障和维护系统的重要依据。通过掌握文件系统和日志文件的管理和分析技能,可以有效提升系统的稳定性和安全性。
253 7
|
29天前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
282 1
二、Linux文本处理与文件操作核心命令
|
29天前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
546 56
|
14天前
|
存储 安全 Linux
Linux卡在emergency mode怎么办?xfs_repair 命令轻松解决
Linux虚拟机遇紧急模式?别慌!多因磁盘挂载失败。本文教你通过日志定位问题,用`xfs_repair`等工具修复文件系统,三步快速恢复。掌握查日志、修磁盘、验重启,轻松应对紧急模式,保障系统稳定运行。
135 2
|
24天前
|
缓存 监控 Linux
Linux内存问题排查命令详解
Linux服务器卡顿?可能是内存问题。掌握free、vmstat、sar三大命令,快速排查内存使用情况。free查看实时内存,vmstat诊断系统整体性能瓶颈,sar实现长期监控,三者结合,高效定位并解决内存问题。
72 0
Linux内存问题排查命令详解
|
1月前
|
Unix Linux 程序员
Linux文本搜索工具grep命令使用指南
以上就是对Linux环境下强大工具 `grep` 的基础到进阶功能介绍。它不仅能够执行简单文字查询任务还能够处理复杂文字处理任务,并且支持强大而灵活地正则表达规范来增加查询精度与效率。无论您是程序员、数据分析师还是系统管理员,在日常工作中熟练运用该命令都将极大提升您处理和分析数据效率。
134 16