问题标签 [jffs2]

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.

0 投票
1 回答
2177 浏览

linux - 可以增加 MTD 设备的逻辑擦除块大小吗?

jffs2(mtd-utils 版本 1.5.0,mkfs.jffs2修订版 1.60)的最小擦除块大小似乎是 8KiB:

但是我使用 at25df321a 运​​行 Linux 3.10,

并且擦除块大小仅为 4KiB:

有没有办法让 mtd 系统将多个擦除块视为一个?也许一些 ioctl 或模块参数?

如果我用更大的擦除块大小刷新 jffs2 映像,我会收到很多内核错误消息、丢失文件,有时还会出现恐慌。

解决方法

flasherase --jffs2尽管擦除块大小为 4KiB,但我发现这会导致文件系统正常工作。所以我破解了mkfs.jfss2.c文件,生成的图像似乎工作正常。我会给它一些测试。

0 投票
0 回答
433 浏览

linux - 在 Nandflash 中挂载 jffs2 文件系统时出错

我正在使用 at91sam9m10g45ek 板。我想从 Nandflash 启动。linux 3.12 在从 nandflash 引导期间无法挂载 jffs2。我的 u-boot 参数:

bootargs=console=ttyS0,115200 earlyprintk mtdparts=atmel_nand:256k(bootstrap)ro,512k(uboot)ro,256k(env),256k(env_redundant),256k(spare),512k(dtb),6M(kernel)ro, -(rootfs) root=/dev/mtdblock7 rw rootfstype=jffs2

错误:

VFS:无法打开根设备“mtdblock7”或未知块(31,7):错误-19 请附加正确的“root=”引导选项;

如何解决这个问题?请帮助我在这方面是新手。提前致谢。

0 投票
0 回答
155 浏览

linux - O_DIRECT 不能在 openwrt 上工作?

我正在开发一个需要访问特殊 USB 设备的程序。这个 USB 设备作为文件系统中的常规文件,所以我必须用 O_DIRECT 标志打开这个文件。如下:

该程序在 PC 环境下运行良好。但是当我用 openwrt 将它移植到嵌入式板时,“open”函数返回 EINVAL 22 /* Invalid argument */.

  • 在内核配置中选择了 O_DIRECT 支持。
  • openwrt 的文件系统是 squashfs 和 jffs2。
  • USB 设备的文件系统是胖的,并且挂载在 /media/aegis 目录下。
  • board的ARCH是mips。

似乎从内核中的以下函数返回了错误:

是否知道 O_DIRECT 在 jffs2 上不受支持,而在 fat 上受支持。在 /media/aegis 中对文件进行操作时,我猜测使用了 fat 的 a_ops,但程序并没有按我的预期运行。

0 投票
1 回答
1699 浏览

linux - 为什么在删除其他文件期间断电后 JFFS2 中的文件会损坏

我正在使用从 JFFS2 分区引导的 Linux (3.4.31+) 嵌入式系统。在删除其他文件时发生断电时,我经常遇到文件损坏的问题。它发生在平台的升级过程中。这些是升级的简化步骤:

  1. 下载包含(以及其他文件)我要升级到的文件系统的 rootfs.squashfs 映像的 tar.gz,验证映像的 md5 校验和。
  2. 从一个小型 JFFS2 分区引导 linux,该分区具有执行升级所需的最少工具集。
  3. 挂载必须升级的大分区。
  4. 挂载存储在大分区中的 rootfs.squashfs。
  5. 从大分区中删除所有文件,除了一些迁移的数据文件、rootfs.squashfs 映像等。
  6. 将挂载的 rootfs.squashfs 中的所有文件复制到大分区
  7. 从大分区启动

提到的功率损失发生在 5. 步骤中。请注意,rootfs.squashfs 以只读方式安装,并且在升级期间永远不会更改。即使这个文件被损坏并且在设备开机后你可以看到文件的 md5 校验和不同,大小保持不变,图像可以挂载但无法从这个图像中读取一些文件。

为什么这个文件被破坏了?JFFS2 不应该处理这种情况吗?有没有办法从这种情况中恢复过来?

0 投票
0 回答
1728 浏览

linux - 挂载 jffs2 时文件丢失或损坏

我在 NOR 闪存上安装 jffs2 时遇到两个问题:

我正在运行一个将 squashfs 作为 rootfs 的板,我尝试将 jffs2 安装在另一个 mtdblock 上,如下所示:
mount -t jffs2 /dev/mtdblock6 /tmp/jffs


之后我将一些文件复制到 /tmp/jffs 但是当文件大于4096字节时系统给出错误:
cp: write error: Input/output error

然后我卸载了mtdblock并重新安装了它,但是我刚刚复制的文件已经消失了。

我通过转储 /dev/mtd6 或 /dev/mtdblock6 确认已写入闪存块,但重新挂载后无法看到这些文件。

=====
我打开了 printk 日志,当我将文件放入挂载文件夹时显示以下消息:
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00120814: 0x0219 instead Node totlen on flash (0x0000000c) != totlen from node ref (0x00000044)


当我尝试重新安装 mtdblock 时出现以下消息:
JFFS2 notice: (608) jffs2_get_inode_nodes: Node header CRC failed at 0x0e0050. {0000,9600,01e88b11,01000000}


如果有任何建议,非常感谢。

0 投票
1 回答
202 浏览

linux-kernel - 对不同的 ARM SOC 使用相同的 rootfs

我正在尝试在与 i.mx6 相同的板上使用为 i.mx53 构建的用户空间。i.mx6 板卡仅在使用的 CPU 上有所不同。我建立了一个新的内核和适当的 DTB,我可以用 uboot 加载它,它可以正常启动。但是,当我尝试使用 i.mx53 板的 rootfs 时,我收到以下 jffs 错误:

jffs2: inconsistent device description

这与不包含有效信息的 flash OOB 有关。我使用命令将 rootfs 写入闪存分区nand write.trimffs。我需要以某种方式初始化OOB吗?我不记得在旧板上做过。这个错误可能来自哪里?

0 投票
1 回答
730 浏览

linux - JFFS2 文件系统,存储使用与实际文件大小不一致

我用了一个spi-nor芯片,做了一个16M的分区作为JFFS2 fs。我发现了一个奇怪的东西,我应该使用 14M 存储,但是当我使用 df 检查时,它显示只使用了 7M:

在我将另一个 2M 文件复制到此分区后:

事实证明,只使用了 1M 以上的存储空间:

有没有人也发现了这个问题?

谢谢,

0 投票
1 回答
513 浏览

linux-kernel - 不同步:没有找到初始化。对于 jffs2 文件系统

我正在使用内核 2.6.33.7 开发 mpc8309-twr 板,当我使用 ramdisk 文件系统(rootfs.ext2.gz.uboot)创建我的 rootfs 映像时,我能够挂载我的文件系统并且我的板能够成功启动.

VFS:在设备 31:1 上挂载根(jffs2 文件系统)。释放未使用的内核内存:168k init 警告:无法打开初始控制台。内核恐慌 - 未同步:未找到初始化。尝试将 init= 选项传递给内核。Call Trace: [c782df40] [c0008484] 0xc0008484 (unreliable) [c782df70] [c0025320] 0xc0025320 [c782dfc0] [c0003b78] 0xc0003b78 [c782dfd0] [c03a2238] 0xc03a2238 [c782dff0] [c0011994] 0xc0011994

但 init 存在于 /sbin/init 位置。任何人都可以帮助我。

0 投票
1 回答
1037 浏览

linux - jffs2 选项、闪存设备特性、驱动程序设置和内核内存管理器之间有什么关系?

我正在努力将运行经过修改的 2.6.12.1 与 at91rm9200 处理器和at45db642D 数据闪存的旧板上的固件升级到使用at45db641E 数据闪存。641E的特点是:

  • 32768 页
  • 页面大小为 264 字节
  • 灵活的擦除选项可擦除页面(264 字节)、块(2 KB)、扇区(256 KB)或整个芯片(64 Mbits)。

我相信内核内存管理器页面大小是标准的 4096 字节。

我想在设备上放置一个合适的 jffs2 图像。我想知道的mkfs.jffs2选项是(来自手册页):

  • --pagesize:使用页面大小 SIZE。默认值为 4 KiB。此大小是数据节点的最大大小。根据目标系统的内存管理页面大小设置(注意:这与 NAND 页面大小无关)。
  • --eraseblock:使用擦除块大小 SIZE。默认值为 64 KiB。如果您使用的擦除块大小与目标 MTD 器件的擦除块大小不同,JFFS2 可能不会以最佳方式执行。如果指定的 SIZE 低于 4096,则假定单位为 KiB。

该人说页面大小与内核内存管理页面大小有关(在我的情况下为 4096,与默认值相同),而不是设备的 264 字节页面。所以我需要指定--pagesize=4096 而不是--pagesize=264,这是正确的吗?

该人还说 --eraseblock 必须与 MTD 设备的擦除块大小相同。我对几件事感到困惑。

  1. 641E 有几种不同的擦除选项。必须为 mkfs.jffs2 --eraseblock 选项选择哪个?
  2. 如果正确的选项是 641E 的页面大小或块大小,我如何将其指定给 mkfs.jffs2,因为假定低于 4096 的值以 KB 为单位而不是字节?
  3. 这个链接(由这个相关但不充分的SO 问题引用)说 jffs2 节点必须完全适合擦除块。由于它们的大小为 4+ KB,大于设备的“擦除块”大小,链接显示“您应该将多个 erasblock 连接到一个 64 或 128 KiB 的虚拟擦除块中并使用它 - 这会更理想”,然后是“你需要让你的驱动程序报告 128KiB 的擦除块大小并模拟它,然后它就会工作。它不会开箱即用。” 如何设置这样的“虚拟擦除块”?
  4. at91 数据闪存驱动程序中,device->erasesize=pagesize. 因此,似乎有一些名称相似但不同的概念:驱动程序擦除大小、设备擦除块大小和 jffs2 擦除块大小。它们之间有什么关系和区别?jffs2 指定的擦除块大小最终如何影响驱动程序执行的操作?

感谢您的任何帮助。

0 投票
0 回答
307 浏览

linux - 将 jffs2 挂载为 rootfs 错误

我正在尝试挂载jffs2 rootfs。挂载 fs 时,会显示以下警告:

当我使用ramfs作为 rootfs时没有出现此警告,并且手动挂载了jffs2 rootfs。

jffs2尝试将节点标记为过时时会出现此警告。在任何其他意义上,fs 似乎是可操作的,我能够创建文件和删除文件。无论如何,每隔一段时间就会显示警告,除了对此感到恼火之外,我担心它最终会导致 fs 的损坏。

我发现当我将分区大小减小到 0x450000 时,这个警告被取消了,但是 /etc/dropbear 没有足够的空间,我无法找到一个有足够空间的“最佳位置”并且没有警告。

我尝试了各种填充大小,并完全删除了填充,但无济于事。

我已经构建了一些具有不同配置的 rootfs.jffs2 图像,但没有一个解决了这个问题。

我查看了 rootfs.jffs2 映像的 hexdump、一个空的jffs2分区和创建的 /dev/mtdblock3——但没有发现任何异常。