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

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

目录
相关文章
|
1天前
|
Ubuntu Linux
Linux(Ubuntu)系统临时IP以及静态IP配置(关闭、启动网卡等操作)
请注意,以上步骤是在临时基础上进行配置的。如果要永久保存静态IP地址,通常还需要修改 `/etc/network/interfaces`文件,以便在系统重启后保持配置。同时,确保备份相关配置文件以防止出现问题。
9 1
|
1天前
|
Linux 数据安全/隐私保护
Linux系统忘记密码的三种解决办法
这篇博客介绍了三种在Linux忘记密码时重置登录密码的方法:1) 使用恢复模式,通过控制台界面以管理员权限更改密码;2) 利用Linux Live CD/USB启动,挂载硬盘分区并使用终端更改密码;3) 进入单用户模式,自动以管理员身份登录后重置密码。每个方法都提供了详细步骤,提醒用户在操作前备份重要数据。
|
2天前
|
JSON Unix Linux
Linux系统之jq工具的基本使用
Linux系统之jq工具的基本使用
26 1
|
2天前
|
数据采集 监控 安全
linux系统被×××后处理经历
linux系统被×××后处理经历
|
5天前
|
机器学习/深度学习 缓存 监控
linux查看CPU、内存、网络、磁盘IO命令
`Linux`系统中,使用`top`命令查看CPU状态,要查看CPU详细信息,可利用`cat /proc/cpuinfo`相关命令。`free`命令用于查看内存使用情况。网络相关命令包括`ifconfig`(查看网卡状态)、`ifdown/ifup`(禁用/启用网卡)、`netstat`(列出网络连接,如`-tuln`组合)以及`nslookup`、`ping`、`telnet`、`traceroute`等。磁盘IO方面,`iostat`(如`-k -p ALL`)显示磁盘IO统计,`iotop`(如`-o -d 1`)则用于查看磁盘IO瓶颈。
|
1天前
|
监控 Linux Windows
50个必知的Linux命令技巧,你都掌握了吗?(下)
50个必知的Linux命令技巧,你都掌握了吗?(下)
|
1天前
|
Linux Shell Windows
Linux 常用基本命令
Linux 常用基本命令
|
2天前
|
Ubuntu Linux Shell
linux免交互登陆远程主机并执行命令(密钥对和Expect)
linux免交互登陆远程主机并执行命令(密钥对和Expect)
|
2天前
|
Linux
【Linux】常用命令
【Linux】常用命令
21 0