jffs2文件系统挂载问题

解决JFFS2文件系统错误
本文介绍了解决JFFS2文件系统中因擦写flash错误导致的问题,通过调整根文件系统的blocksize参数来确保正确的擦写操作,使设备能够正常启动。

出错信息:

Empty flash at 0x01cdfffc ends at 0x01ce0000
CLEANMARKER node found at 0x01ce0000, not first node in block (0x01cc0000)

......
Empty flash at 0x01cefffc ends at 0x01cf0000
CLEANMARKER node found at 0x01cf0000, not first node in block (0x01cc0000)

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x01cfbfb8: 0x7de7 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x01cfbfbc: 0xe9cf instead
VFS: Mounted root (jffs2 filesystem).
Mounted devfs on /dev
Freeing init memory: 108K
jffs2_reserve_space(): Low on dirty space to GC, but it's a deletion. Allowing...
VFS: Can't find ext2 filesystem on dev hdb1.

Can't activate this console

Please press Enter to activate this console. Using fallback suid method

 

分析可能原因:

1.擦写flash时出错

2.console设置错误

 

查找了相关资料,首先解决第一个问题:

制作jffs2根文件系统时有一个参数是指定flash每一块要擦除的block size ,预设是64KB。要注意的是不同的flash,block size不一样。

YLE270的NOR Flash:32MByte存储器(2片intel E28F128组成32位接口)p { margin-bottom: 0.21cm; R R 

查阅E28F128的DATASHEET可知,其为16位32MByte存储器,块大小1MBit/block。

所以YLE270每次擦写32位的块大小应为2MBit。即2×220 /23 Byte=218 Byte,转换为16进制为0x40000(二进制转换十六进制:从低位开始,连续四位划分为一位)。

解决办法:

制作根文件时指定块大小为0x40000,执行: p { margin-bottom: 0.21cm; }

./mkfs.jffs2 -r rootfs -o rootfs.jffs2 -e 0x40000

重新烧写文件系统后启动正常:

 

jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x01ce5df0: 0x1fc5 id
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x01ce5df4: 0xf89a id
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x01ce5df8: 0xc74c id
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x01ce5dfc: 0x6168 id
VFS: Mounted root (jffs2 filesystem).

Mounted devfs on /dev                                                          
Freeing init memory: 108K                                                      
Using fallback suid method                                                     
Using fallback suid method                                                     
Using fallback suid method                                                     
Using fallback suid method                                                     
                                                                               
Please press Enter to activate this console. Using fallback suid method        
Using fallback suid method                                                     
                                                                               
Please press Enter to activate this console.                                   
bash-2.05b#

### UE4 中的 Bitmask 使用与实现 #### 什么是 Bitmask? 在 Unreal Engine 4 (UE4) 中,位掩码(Bitmask)是一种用于高效管理和操作一组布尔标志的技术。通过将多个标志存储在一个整数中,可以显著减少内存占用并提高处理速度。 #### 如何声明和使用 Bitmask 属性 属性现在可以被声明为位掩码,并可以选择关联枚举来封装位标志值[^1]。这种特性不仅适用于 C++ 编程,也支持蓝图脚本系统的使用: ```cpp UENUM() enum class EMyFlags : uint8 { None UMETA(Hidden), FlagOne = 0x1, FlagTwo = 0x2, FlagThree= 0x4, }; UPROPERTY(EditAnywhere, BlueprintReadWrite) TEnumAsByte<EMyFlags> MyFlag; ``` 上述代码展示了如何定义一个带有三个可能状态的位标记集合 `EMyFlags` 并将其应用于类成员变量 `MyFlag` 上。 #### 基础位运算示例 为了更好地理解位掩码的操作方式,在下面的例子中定义了一些常量 BIT_0 到 BIT_7 来代表不同的二进制位置;初始化了一个名为 `bitmask` 的位掩码变量设为零;接着利用按位或运算符设置了特定的位置;最后借助于按位与运算符检测某一位是否已被激活[^2]: ```cpp const int32 BIT_0 = 1 << 0; // Binary: 00000001 const int32 BIT_1 = 1 << 1; // Binary: 00000010 // ... up to ... const int32 BIT_7 = 1 << 7; // Binary: 10000000 int32 bitmask = 0; // Set specific bits using bitwise OR operator bitmask |= BIT_0 | BIT_2; // Check if a particular bit is set using bitwise AND operator bool IsBitSet(int32 mask, int32 flag){ return ((mask & flag) != 0); } ``` 这段简单的例子说明了怎样创建以及查询位掩码内的单个旗标。 #### Vulkan 图像用途中的注意事项 当涉及到图形 API 如 Vulkan 时,如果图像用途包含了 `VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT` ,那么除了颜色附件、深度模板附件及输入附件之外其他任何位都不能被设置[^3]。这表明对于临时附加使用的纹理资源来说,其允许的功能范围受到了严格限制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值