在嵌入式Linux系统开发领域,为闪存设备构建合适的文件系统镜像是一项至关重要的任务,JFFS2(Journalling Flash File System version 2)作为一种专为NOR/NAND闪存设计的日志结构文件系统,因其出色的坏块管理、压缩能力和掉电保护特性,在路由器、物联网设备等众多嵌入式产品中得到了广泛应用,而makejffs2
正是创建JFFS2文件系统镜像的核心工具,对于习惯使用CentOS作为开发环境的工程师而言,掌握如何在该系统上安装和使用makejffs2
是必备技能,本文将详细介绍在CentOS上安装makejffs2
工具的两种主要方法,并提供基本的使用指南。
安装前的准备工作
在开始安装之前,请确保您的系统满足以下基本条件:
- 一个正在运行的CentOS系统(版本7或8及以上)。
- 拥有
sudo
或root
权限,以便执行软件安装命令。 - 系统已连接到互联网,用于下载软件包。
通过 EPEL 仓库安装 (推荐)
这是最简单、最推荐的安装方式。makejffs2
工具通常包含在mtd-utils
(Memory Technology Device Utilities)软件包中,而这个包在CentOS的官方基础仓库中并不提供,但可以通过启用EPEL(Extra Packages for Enterprise Linux)仓库来轻松获取。
第一步:启用 EPEL 仓库
EPEL 是由 Fedora 社区维护的,为 RHEL(及其衍生版如 CentOS)提供高质量软件包的仓库,启用它非常简单。
对于 CentOS 7:
sudo yum install epel-release
对于 CentOS 8 / Stream:
sudo dnf install epel-release
执行此命令后,系统会自动下载并安装EPEL仓库的配置文件。
第二步:安装 mtd-utils
EPEL仓库启用后,您就可以使用yum
或dnf
来安装mtd-utils
了,这个软件包集成了包括makejffs2
在内的一系列MTD工具。
对于 CentOS 7:
sudo yum install mtd-utils
对于 CentOS 8 / Stream:
sudo dnf install mtd-utils
安装过程中,包管理器会自动处理所有依赖关系并完成安装。
第三步:验证安装
安装完成后,可以通过以下命令验证makejffs2
是否已成功安装并可用:
which makejffs2
如果安装成功,该命令会输出makejffs2
可执行文件的路径,通常是/usr/sbin/makejffs2
。
您还可以查看其版本信息:
makejffs2 --version
这将显示mtd-utils
的版本号,确认工具已就绪。
从源码编译安装 (高级)
在某些特殊情况下,例如EPEL仓库中的版本过旧,或者您需要特定版本的makejffs2
,可以选择从源码编译安装,这种方法更为灵活,但步骤也相对复杂。
第一步:安装编译依赖
从源码编译需要安装必要的开发工具和库文件,首先安装“Development Tools”包组:
sudo yum groupinstall "Development Tools"
或者对于 CentOS 8+:
sudo dnf groupinstall "Development Tools"
安装mtd-utils
编译所需的特定依赖库,下表列出了主要的依赖项及其作用:
依赖包 | 描述 |
---|---|
zlib-devel | 提供Zlib压缩库的开发文件,JFFS2使用它进行数据压缩。 |
lzo-devel | 提供LZO压缩库的开发文件,是另一种可选的压缩算法。 |
uuid-devel | 提供UUID生成库的开发文件,用于生成唯一标识符。 |
openssl-devel | 提供OpenSSL加密库的开发文件,如果需要支持加密功能。 |
使用以下命令安装这些依赖:
sudo yum install zlib-devel lzo-devel uuid-devel openssl-devel
第二步:下载源码
mtd-utils
的官方源码托管在 infradead.org
,您可以访问其网站或使用wget
命令直接下载最新的稳定版源码压缩包,下载 mtd-utils-2.1.4
版本:
wget ftp://ftp.infradead.org/pub/mtd-utils/mtd-utils-2.1.4.tar.bz2
第三步:解压、配置、编译与安装
解压源码包:
tar -xjf mtd-utils-2.1.4.tar.bz2 cd mtd-utils-2.1.4
配置编译选项:
运行configure
脚本,检查系统环境并生成Makefile,通常使用默认配置即可:./configure
编译源码:
使用make
命令进行编译,这个过程会根据您的CPU核心数自动进行并行编译。make
安装到系统:
编译成功后,使用sudo make install
将编译好的文件安装到系统中(通常是/usr/local
目录下)。sudo make install
安装完成后,同样可以使用which makejffs2
和makejffs2 --version
来验证。
基本用法示例
安装好makejffs2
后,创建一个JFFS2镜像非常简单,假设您有一个名为rootfs
的目录,它包含了您要制作成镜像的根文件系统内容。
一个基本的命令如下:
makejffs2 -r rootfs/ -o rootfs.jffs2 -e 0x20000 -p 0x400000
命令参数解释:
-r rootfs/
: 指定根文件系统所在的目录。-o rootfs.jffs2
: 指定输出镜像文件的名称。-e 0x20000
: 设置闪存的擦除块大小,这个值必须与目标硬件的物理擦除块大小一致,单位是字节。0x20000
即128KB。-p 0x400000
: 预留空间,在镜像末尾填充0xFF,直到镜像大小达到指定值,这可以确保镜像大小是擦除块大小的整数倍,便于烧写。0x400000
即4MB。
相关问答 (FAQs)
解答: 这个问题通常有两个可能的原因,请确认安装过程没有报错。makejffs2
通常被安装在/usr/sbin/
目录下,而普通用户的PATH环境变量可能不包含此路径,您可以尝试使用完整路径来执行命令:/usr/sbin/makejffs2 --version
,如果这样可以执行,说明是PATH问题,您可以临时将/usr/sbin
添加到PATH:export PATH=$PATH:/usr/sbin
,或者为了永久生效,需要编辑~/.bashrc
或/etc/profile
文件,也可以直接使用sudo
执行,因为root用户的PATH通常包含此目录:sudo makejffs2 --version
。
JFFS2和另一种常见的嵌入式文件系统SquashFS有什么区别?我应该如何选择?
解答: JFFS2和SquashFS是两种设计目标不同的文件系统,主要区别在于:
- 读写特性:JFFS2是一个读写文件系统,它设计用于在闪存上进行频繁的数据读写和修改,并自带磨损均衡和垃圾回收机制,而SquashFS是一个只读文件系统,它以极高的压缩率著称,一旦创建就不能修改。
- 应用场景:如果您的设备需要一个可以动态存储日志、配置文件或用户数据的分区,那么JFFS2是合适的选择,如果您的系统大部分是固件,追求极致的压缩比以节省闪存空间,并且运行时不需要修改这些文件(例如根文件系统),那么SquashFS是更好的选择,在很多产品中,会采用组合方案:用SquashFS作为只读的根文件系统,再划分一个JFFS2分区用于读写数据。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复