问题标签 [ubifs]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 如何使用版本 5 创建 ubifs?
我想使用 linux 4.10 及更高版本支持的加密 UBIFS。我使用 linux 4.18.4 进行测试。我做的一切都很好,当我使用 fscryptctl 设置加密策略时,我得到了这个错误:
UBIFS 错误 (ubi0:0 pid 1400): ubifs_enable_encryption: 加密需要 on-flash 格式版本 5。
我找到了在内核中打印错误消息的地方,我尝试打印 UBIFS 版本的当前版本,我得到的版本是 4。
修改代码后,我收到以下错误消息:
UBIFS 错误(ubi0:0 pid 1400):ubifs_enable_encryption:加密需要 on-flash 格式版本 5,当前是版本 4。
所以,这意味着内核需要版本 5 进行加密,但我使用版本 4。而且我需要一个工具来制作带有版本的 UBIFS。
目前,我使用从http://www.linux-mtd.infradead.org/下载的 mtd-utils-2.0.2来构建 ubifs 映像。它使 UBIFS 具有版本 4。
我已经通过谷歌搜索了许多有关 UBIFS 版本的信息,但一无所获。
有谁知道如何使用版本 5 创建 UBIFS?
linux - 如何为 SSD 闪存驱动器安装 UBIFS 文件系统?
我有 SSD 闪存驱动器。所以我想让一台新机器使用UBIFS文件系统。
我怎样才能做到这一点?使用 Ubuntu 桌面 17.0 没有此文件系统的选项。
还有一个问题,对于新的文件系统,我的机器能比 ext2、FAT... 文件系统运行得更快吗?因为它们不是为优化闪存驱动器而设计的。
谢谢~
c - 如何在 C 中为启用了动态数据压缩的 UBIFS 文件系统检索正确的文件系统指标?
语境
我正在使用启用了动态数据压缩的 UBIFS 文件系统。我需要在 C 代码中获取正确的文件系统指标(总、已用、可用空间)。
尝试了什么
我使用statvfs
call 成功检索了指标,但注意到返回的值好像数据从未压缩过。在sync(8)
从命令行调用并再次调用 C 代码后,返回了正确的值,因此在 C 代码中我包含了对sync(2)
right before的调用statvfs
。再次调用修改后的 C 代码仍会返回带有值的指标,就好像数据未压缩一样。然后我之前尝试进行系统调用system("sync")
,statvfs
但仍然返回了不正确的度量值。只有在等待 10 秒或通过显式sync(8)
调用后,返回的文件系统指标才是正确的。
问题
sync(2)
1)为什么之前调用或system("sync")
在C代码中调用statvfs
和sync(8)
从命令行调用之间存在这种差异?
2) 如何在 C 代码中将挂起/缓存的数据提交到磁盘,以便后续statvfs
调用返回正确的文件系统指标?
linux-kernel - 如何在 SELinux 的 UBIFS 中启用扩展属性?
我正在尝试chcon
在 UBIFS 根文件系统上运行 SELinux 命令,但我得到了chcon: failed to change context of '/' to 'system_u:object_r:root_t': Operation not supported
. 我了解 SELinux 需要文件系统支持扩展属性。对于 Linux kernel <3.4,CONFIG_UBIFS_FS=y
默认为 UBIFS 启用扩展属性。
我从这里读到xattr
应该自动启用而无需额外的挂载选项。
扩展属性 如果启用了相应的配置选项,UBIFS 支持扩展属性(不需要额外的挂载选项)。它支持用户、可信和安全名称空间。但是,没有实现访问控制列表 (ACL) 支持。
注意,当前 mkfs.ubifs 忽略扩展属性并且不将它们写入目标文件系统映像。
我正在使用 Yocto 构建图像,并添加xattr
到 DISTRO_FEATURES 中。我在这里想念什么?
arm - 使用 QEMU 安装 ubi 映像时出现问题
我正在尝试使用qemu模拟nand flash,并使用它在虚拟机上安装现有的ubifs映像。
我添加了一个nand设备和一个mtd类型的驱动器,得到以下命令:
我无法访问data.ubi可能是因为以下警告:
“警告:没有设备的孤立驱动器”
如何正确将ubi映像添加到nand设备?
linux-kernel - bootlin 内核无法从 UBIFS 启动
遵循bootlin 嵌入式 linux 课程并面临一个问题(类似于UBI layout volume not found但我的问题比原来的问题更远)
我正在创建 rootfs 和数据卷映像:
然后通过配置 ubinize 所有这些东西:
然后通过 tftp 加载图像:
试了好几次内核还是在启动时中断,你能指点什么是错的吗?
升级版:
所以当前状态 rootfs 问题:
如果我从 sdcard 启动 linux,mtd 设备也没有安装,只有内核出现在某个级别,但仍然存在问题:
<<<< 我也尝试过 5 作为内核参数
我想知道仍然是内核参数作为 UBI_IOCATT: Invalid argumentSuggest 还是 UBIFS 本身的格式错误?
linux - 如何从 NAND 转储中检索损坏的块?
我有一个损坏的 ubifs 分区:
我已经用 nanddump utils 转储了相关的 mtd,我怎样才能找到哪个 PEB 与损坏的 LEB 相关?
linux-kernel - ubiattach 失败,坏块太多
我试图从 NAND 芯片中读取固件,并提取其程序和数据进行分析。
从网上我了解到,您必须创建一个 UBI 设备,并将您的图像文件写入它,然后您才能将它安装到您的系统。
描述
首先,我从 FLASH 芯片中读取了一个 bin 文件。binwalk
我明白了。
从它的输出文件中,我找到了这个ubi 图像文件。
关于NAND芯片的一些信息:
然后我尝试安装它,如下所示:
“test_file”的大小是0x10044000,所以我只删除了最后的0x4000字节,然后ubiformat
再次尝试。
我做了一些研究发现,在这个 UBI 图像中,有很多块,每个块都包含数据和 OOB。
最后一个命令失败的原因是因为它0x55424923
在错误的位置搜索0x20000
,因为 OOB,0x55424923
实际上是在0x21000
,所以我认为也许从“this_file_dd”中删除所有 OOB 部分可能会起作用。bash 命令和测试如下。
删除所有 OOB 后,比较 2 个文件,发现 OOB 已被删除。
再说一次,关于糟糕的 UBI 魔法ubiformat
的另一个错误。
使用 ghex 修复了 EB-1074 中错误的 EC 标头,ubiformat
同样,同一块的 CRC 不正确。
修复 CRC 并ubiformat
再次启用 ubi 和ubiattach
mtd0,但出现另一个错误。
我是否dmesg
找到了这条消息。
但我不知道如何解决这个问题,所以我只是从文件中删除块 1074。
然后ubiformat
再次附加,但还有另一个错误。
查了一下dmesg
发现这个,这个是我不知道怎么办的地方,不知道怎么弄了这么多坏块。
我阅读了官方文件,它说只有在 2 senerios 一个块才会被标记为坏。一种是当对eraseblock的写操作失败时,UBI会将数据从bad EB移动到good EB,并做一些测试来确认bad EB是不是真的坏了;或者当擦除操作出现 EIO 错误时,EB 将立即被标记为坏块。我不确定是什么原因导致了这么多坏块。
我的问题
- 在进行中,我的命令做错了吗?如果没有,如何修复这个 UBI 映像以便我可以读取它的程序和数据?
- 还有其他方法可以从这个 UBI 图像文件中获取程序和数据吗?
工具和版本
- 卡利 2020.3
- mtd-utils 2.1.1
encryption - 关于在 ubifs 上使用 fscrypt 与 ext4 的差异的问题
我正在开发一个可以在多个平台上运行的嵌入式 Linux 项目。一个使用 e.MMC 进行存储,另一个使用 NAND 闪存。我想加密所有文件系统(主要是为了防止有人拆下闪存芯片并将它们放入阅读器中)。我想尝试并尽可能在这两种硬件类型上保持一种通用方法。两者之间的一大区别是磨损均衡是在 e、MMC 的硬件中,而对于 NAND,我将使用 UBI。
对于根文件系统,我正在考虑使用使用 dm-crypt 保护的 squashfs。对于 NAND 设备,我已经尝试过了,我可以在 ubiblock 之上分层 dm-crypt,然后使用设备映射器加载 squashfs。这很好地映射到 e.MMC 世界,唯一的区别是设备映射器位于 gpt 分区而不是 ubiblock 设备上。
我的挑战是其他读/写文件系统。我想在只读根和数据分区之上安装一个覆盖文件系统。我希望这两个也被加密。我一直在研究 fscrypt 如何帮助我。(我相信 dm-crypt 不适用于 ubifs)。
对于 e.MMC 上的文件系统,我将使用 ext4 和 NAND ubifs。文档说这两个都支持 fscrypt。我很难找到有关如何将其与 ubifs 一起使用的详细文档(ext4 有更多),但我认为在每个文档的实现方式之间存在一些差异,我希望那些了解更多以确认这一点。
在 NAND 方面,我只能通过使用 fscryptctl 工具(https://github.com/google/fscryptctl )而不是功能更全面的 fscrypt 工具( https://github.com/google )来使其工作/fscrypt )。这是按照我在补丁中找到的将 fscrypt 支持添加到 mkfs.ubifs 的说明:
https://patchwork.ozlabs.org/project/linux-mtd/cover/20181018143718.26298-1-richard@nod.at/
这似乎使用提供的密钥加密分区上的所有文件。当我在 ext4 上查看 fscrypt 时,您似乎无法做到这一点。根目录本身不能加密,只有子目录。在这里阅读: https ://www.kernel.org/doc/html/v4.17/filesystems/fscrypt.html它说:
“请注意,ext4 文件系统不允许对根目录进行加密,即使它是空的。想要用一个密钥加密整个文件系统的用户应该考虑改用 dm-crypt。”
所以这是不同的。似乎使用 ubifs 我不能像在 ext4 中那样对子目录应用加密。这里的 README.md https://github.com/google/fscryptctl给出了一个使用 ext4 的例子。这会加密一个名为 test 的子目录。我看不到如何使用 ubifs 做同样的事情。有人可以帮助我吗?
我一直在使用 NANDSIM 内核模块进行测试。这篇文章的最后是一个用于构建加密覆盖 ubifs 文件系统的脚本。如您所见,mkfs.ubifs 直接获取密钥,并且似乎将其应用于分区上的所有文件。您不能将策略应用到任何子目录,因为它们已经加密。
我想使用用户空间 fscrypt 工具提供的其他一些功能,例如保护器(所以我不需要直接使用主密钥)。但是,我看不到任何方法可以让用户空间 fscrypt 工具在 ubifs 上设置加密。用户空间 fscrypt 命令在分区的根目录中创建一个 .fscrypt 目录来存储有关策略和保护程序的信息。这似乎更适合根本身未加密的 ext4 实现。
当我尝试使用“fscrypt setup”设置未加密的 ubifs 时,我遇到了麻烦,因为制作标准 ubifs 似乎创建了 v4 ubifs 格式版本,而不是所需的 v5。这意味着“fscrypt encrypt”命令失败。(在 dmesg 输出中可以看到这样的错误
有没有办法让 mkfs.ubifs 创建一个未加密的 v5 格式文件系统?还是 v5 意味着加密?
这是我使用 fscryptctl 工具创建加密 ubifs 的脚本:
注意我一直在 5.4 内核上使用 mtd-utils v2.1.2。