jffs2文件系统(二)

news2024/11/28 3:38:02

本篇文章讲解一下如何制作jffs2文件系统,以及如何在linux下把jffs2作为根文件系统使用。

文件系统制作

制作工具:mtd_utils,可以自己安装

mkfs.jffs2 -o root-uclibc-jffs2 -r root-uclibc -e 0x10000 -s 0x1000 -n -l -X zlib
--pad=0x10000
参数简介:
-o, --output=FILE 指定生成文件的文件名.(default: stdout)
-r, -d, --root=DIR 指定需要制作的文件夹目录名.(默认: 当前文件夹)
-e, --eraseblock=SIZE 设定擦除块的大小为(默认: 64KB)
-s, --pagesize=SIZE 节点页大小(默认: 4KB)
-n, --no-cleanmarkers 指明不添加清楚标记(nand flash 有自己的校检块, 存
放相关的信息。 ) 如果挂载后会出现类似: CLEANMARKER node found at
0x0042c000 has totlen 0xc != normal 0x0 的警告, 则加上-n 就会消失。
-l, --little-endian 指定使用小端格式
-X, --enable-compressor=COMPRESSOR_NAME 指压缩格式
-p, --pad[=SIZE] 通常用 16 进制表示输出文件系统大小, 不足部分用 0xff
注意:

1. 上面的-e选项和-s一定要根据自己的实际大小设置,否则可能出现启动失败的情况

2. -X指定的压缩方式可以自己选择,不清楚使用mkfs.jffs2的帮助信息查看

uboot启动参数设置

我们这里使用的uboot版本是2013,新版本的设置类似。

zhixia# setenv bootargs console=ttyS1,115200n8 mem=68M@0x0 rmem=40M@0x4400000 nmem=20M@0x6C00000 init=/linuxrc rootfstype=jffs2 root=/dev/mtdblock3 rw mtdparts=jz_sfc:256k(boot),64k(bootenv),2560k(kernel),25M(app),-(config) lpj=11968512    
zhixia# saveenv
Erasing at 0x50000 -- 100% complete.
Write at 0x50000 -- 100% complete.
done

上面我们主要设置了rootfstype=jffs2 ,即告诉linux启动的时候以jffs2的方式挂载根文件系统。

启动日志

........
[    2.019842] jffs2: notice: (1) jffs2_build_xattr_subsystem: complete building xattr subsystem, 0 of xdatum (0 unchecked, 0 orphan) and 0 of xref (0 dead, 0 orphan) found.
[    2.037152] VFS: Mounted root (jffs2 filesystem) on device 31:3.
[    2.043702] devtmpfs: mounted
[    2.047024] Freeing unused kernel memory: 224K
[    2.296708] FAT-fs (mmcblk0): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
mdev is ok......
[RCS]: /etc/init/S11
[    2.376306] random: nonblocking pool is initialized
[    2.383939] jffs2: notice: (570) jffs2_build_xattr_subsystem: complete building xattr subsystem, 0 of xdatum (0 unchecked, 0 orphan) and 0 of xref (0 dead, 0 orphan) found.
net.core.wmem_max = 26214400
net.core.wmem_default = 26214400
application start up
[    2.440720] @@@@@ inner codec power up@@@@@@

zhixia login:

问题记录

在使用jffs2的时候你可能会遇到一些问题,下面列出常见的问题:

1.启动出现wrong erase size

[    1.080526] jffs2: Node at 0x00007944 with length 0x00000a7c would run over the end of the erase block
[    1.090478] jffs2: Perhaps the file system was created with the wrong erase size?
[    1.090489] mmcblk0: mmc0:0001 SD32G 29.1 GiB 
[    1.103183] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00007948: 0x0a7c instead

出现这种问题一般是flash的擦除大小和制作jffs2的erase大小不一样导致,查看flash的手册看erase大小,或者看cat /proc/mtd ==》我们查到可以按sector、block、整片擦除

所以有两种解决办法:一种是改flash适配的erase_size或者改制作jffs2时的erase_size大小,为了简单可以直接修改制作jffs2文件系统时的参数。

2.启动出现jffs2: Empty flash

[  197.324942] jffs2: Empty flash at 0x013fff28 ends at 0x013fffd8
[  197.331095] jffs2: Empty flash at 0x013fffdc ends at 0x013ffff4
[  197.337488] jffs2: notice: (1) jffs2_build_xattr_subsystem: complete building xattr subsystem, 0 of xdatum (0 unchecked, 0 orphan) and 0 of xref (0 dead, 0 orphan) found.

问题原因:

This message is generated if a block of data is partially written. It is generally not a sign of any problem.  

就是分区大而制作出来的文件系统小,导致分区后面没有jffs2文件系统的节点

解决办法:制作相同分区大小的文件系统就可以了

3. Magic bitmask not found

[    1.831034] jffs2: Empty flash at 0x010d7524 ends at 0x010d7594
[    1.837221] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x010d7594: 0xff7f instead
[    1.847216] jffs2: Empty flash at 0x010d7598 ends at 0x010d779c
[    1.853350] jffs2: jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x010d779c: 0xfbff instead
[    1.863321] jffs2: Empty flash at 0x010d77a0 ends at 0x010d77bc

mkfs.jffs2 -s 的参数问题 对照FLASH的大小再重新生成镜像文件过即可

4.Requested init /linuxrc failed

[    1.107416] jffs2: notice: (1) jffs2_build_xattr_subsystem: complete building xattr subsystem, 0 of xdatum (0 unchecked, 0 orphan) and 0 of xref (0 dead, 0 orphan) found.
[    1.123603] mmcblk0: mmc0:aaaa SN32G 29.7 GiB 
[    1.128943] VFS: Mounted root (jffs2 filesystem) on device 31:3.
[    1.135455]  mmcblk0: p1
[    1.138285] devtmpfs: error mounting -2
[    1.143043] Freeing unused kernel memory: 264K
[    1.147853] Kernel panic - not syncing: Requested init /linuxrc failed (error -2).
[    1.155847] Rebooting in 10 seconds..

解决办法:busybox编译时采用静态编译,这种情况遇到的较少,可以看下自己的具体原因。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1216358.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于卷积神经网络的猫种类的识别

1.介绍 图像分类是计算机视觉中的一个关键任务,而猫种类识别作为一个有趣且实用的应用场景,通过卷积神经网络(CNN)的模型能够识别猫的不同品种。在这篇博客中,将详细介绍如何利用深度学习技术构建模型,从而…

gd32 USB HOST 接口

接口 CPU引脚 复用 DM PB14 USBHS_DM AF12 DP PB15 USBHS_DP AF12

互联网上门预约洗衣洗鞋店小程序;

拽牛科技干洗店洗鞋店软件,方便快捷,让你轻松洗衣。只需在线预约洗衣洗鞋服务,附近的门店立即上门取送,省心省力。轻松了解品牌线下门店,通过列表形式展示周围门店信息,自动选择最近门店为你服务。简单填写…

【Linux专题】SFTP 用户配置 ChrootDirectory

【赠送】IT技术视频教程,白拿不谢!思科、华为、红帽、数据库、云计算等等https://xmws-it.blog.csdn.net/article/details/117297837?spm1001.2014.3001.5502 红帽认证 认证课程介绍:红帽RHCE9.0学什么内容,新版有什么变化-CSDN…

【带头学C++】----- 七、链表 ---- 7.1 链表的概述

目录 七、链表 7.1 链表的是什么? 7.2数组和链表的优点和缺点 7.3 链表概述 ​编辑 7.4 设计静态链表 7.4.1 定义一个结点(结构体) 7.4.2 使用头结点构建一个单向链表 七、链表 7.1 链表的是什么? C链表是一种数据结构&a…

如何构建风险矩阵?3大注意事项

风险矩阵法(RMA)是确定威胁优先级别的最有效工具之一,可以帮助项目团队识别和评估项目中的风险,帮助项目团队对风险进行排序,清晰地展示风险的可能性和严重性,为项目团队制定风险管理策略提供依据。 如果没…

SecureCRT\\FX:打造安全可靠的终端模拟器和FTP客户端

在现代的工作环境中,远程连接和文件传输是不可或缺的任务。而SecureCRT\\FX作为一款安全可靠的终端模拟器和FTP客户端,将帮助您高效管理远程连接和文件传输。 SecureCRT\\FX提供了强大的终端模拟功能,支持SSH、Telnet、RDP等多种协议&#x…

92.Linux的僵死进程以及处理方法

目录 1.什么是僵死进程? 2.代码演示僵死进程 3.解决办法 1.什么是僵死进程? 僵死进程是指一个子进程在父进程之前结束,但父进程没有正确地等待(使用 wait 或 waitpid 等系统调用)来获取子进程的退出状态。当一个进…

流程图怎么画,用什么软件做?一文弄懂流程图:从流程图的定义、流程图各种图形的含义到流程图制作,一步到位!

流程图,也被称为过程流程图或流程图,是一种表达工作或过程中步骤之间逻辑关系的可视化工具。它主要由不同形状和符号的框以及指向这些框的箭头组成。每个形状或符号都有特定的含义,它们代表了工作流程中的一种特定类型的步骤或动作。 使用流…

视频集中存储/云存储平台EasyCVR级联下级平台的详细步骤

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

JVM bash:jmap:未找到命令 解决

如果我们在使用JVM的jmap命令时遇到了"bash: jmap: 未找到命令"的错误,这可能是因为jmap命令没有在系统的可执行路径中。 要解决这个问题,可以尝试以下几种方法: 1. 检查Java安装:确保您已正确安装了Java Development …

【Android】导入三方jar包/系统的framework.jar

1.Android.mk导包 1).jar包位置 与res和src同一级的libs中(没有就新建) 2).Android.mk文件 LOCAL_STATIC_ANDROID_LIBRARIES:android静态库,经常用于一些support的导包 LOCAL_JAVA_LIBRARIES:依赖的java库,一般为系统的jar…

[修改Linux下ssh端口号]解决无法修改sshd_config无法修改

前言:写本文的前因是本人的阿里云服务器经常被黑客暴力破解ssh的22端口号。再网络上搜索解决都是说使用root权限进行修改,但本人在root下也无法成功进行修改sshd_config文件。所以在大量搜索下终于找到了解决方案,现在分享出来给有需要的人使…

一个集成了AI和BI报表功能的新一代数据库管理系统神器--Chat2DB

世人皆知Navicate,无人识我Chat2DB 📖 简介 Chat2DB 是一款开源免费的多数据库客户端工具,支持多平台和主流数据库。 集成了AI的能力,能进行自然语言转SQL、SQL解释、SQL优化、SQL转换 ✨ 好处 1、AIGC和数据库客户端的联动&am…

广州华锐互动:办税服务厅税务登记VR仿真体验让税务办理更加灵活高效

在数字化世界的今天,我们正在见证各种业务过程的转型,而税务办理也不例外。最近,一种全新的交互方式正在改变我们处理税务的方式:虚拟现实(VR)。 首先,用户需要戴上虚拟现实头显,然后…

怎么调监控清晰度,监控画面不清晰怎么修复?

监控画面不清晰怎么修复,通过调整视频的分辨率可以达到使视频更清晰的目的,另外就是如果是室外的环境下,视频的监控镜头会积累灰尘,擦一下镜头有可能会使得拍摄的视频更清晰一些。另外就是可以通过一些软件将视频分辨率提高&#…

互联网医院系统:数字化时代中医疗服务的未来

随着数字化时代的发展,互联网医院系统在医疗服务中的作用日益凸显。本文将讨论互联网医院系统的一些关键技术方面,探讨这些技术如何推动医疗服务进入数字化时代。 1. 数据智能与个性化服务 互联网医院系统依赖于大数据分析和人工智能技术,…

网络运维Day19

文章目录 环境准备数据备份为什么要备份什么是备份备份到哪里什么时候备份如何备份 完整备份物理备份逻辑备份测试恢复所有库 构建MySQL服务xtrabackup完全备份与恢复完全备份完全恢复增量备份增量恢复 总结 环境准备 IP地址采用自动分配,以自己的为准 可以将之前的…