Changes

958 bytes added ,  07:33, 1 February 2014
updata to eng.ver http://www.3dbrew.org/w/index.php?title=Flash_Filesystem&diff=8383
Line 1: Line 1:  
3DS使用了容量为1GB的一片NAND闪存芯片。
 
3DS使用了容量为1GB的一片NAND闪存芯片。
 +
从NCSD的头部来看,NAND实际使用的大小为0x3AF00000.
    
=== 格式 ===
 
=== 格式 ===
Line 5: Line 6:     
===加密===
 
===加密===
NAND文件系统使用AES-CTR加密。NAND中TWL region使用TWL NAND的[[AES|keyslot]],而CTR region使用CTR NAND的[[AES|keyslots]]。CTR NAND分区的 keyslot 是由NCSD分区的磁盘文件系统类型所决定的。TWL/CTR NAND region在NCSD头部指定。NAND的前 0x0B100000 byte使用TWL  keyslot加密,在0x00012E00之前则只有MBR分区表使用TWL  keyslot(那个region包括下表所示的TWL分区)。
+
NAND文件系统使用[[AES|AES-CTR]]加密。NAND中TWL region使用TWL NAND的[[AES|keyslot]],而CTR region使用CTR NAND的[[AES|keyslots]]。CTR NAND分区的 keyslot 是由NCSD分区的磁盘文件系统类型所决定的。每个分区表的NCSD分区加密标志位(TWL keyslot 或 CTR keyslots)这样表示: 0x01=TWL, 0x02=CTR。TWL/CTR NAND region在NCSD头部指定。NAND的前 0x0B100000 byte使用TWL  keyslot加密,在0x00012E00之前则只有MBR分区表使用TWL  keyslot(那个region包括下表所示的TWL分区)。
 +
 +
Note that re-encrypting a NAND image alone from another 3DS for use on a different 3DS is not enough to use that NAND image on a different 3DS: certain files in the "nand" partition would need modified/replaced as well.
    
===NAND结构===
 
===NAND结构===
Line 14: Line 17:  
!  长度
 
!  长度
 
!  NCSD分区文件系统类型
 
!  NCSD分区文件系统类型
 +
!  NCSD分区索引(index)
 
!  注释
 
!  注释
 
|-
 
|-
 
|   
 
|   
 
|  0x0
 
|  0x0
|  0x200
+
|  0x200
 +
|
 
|   
 
|   
 
|  NCSD头, 包括了后续CTR-NAND的偏移/大小信息. 这个块也包含了 TWL-NAND MBR分区表.
 
|  NCSD头, 包括了后续CTR-NAND的偏移/大小信息. 这个块也包含了 TWL-NAND MBR分区表.
 +
|-
 +
|
 +
|  0x00000000
 +
|  0x0B100000
 +
|  0x1
 +
|  0x00
 +
|  TWL NAND region
 
|-
 
|-
 
|  twln
 
|  twln
 
|  0x00012E00
 
|  0x00012E00
 
|  0x08FB5200
 
|  0x08FB5200
 +
|
 
|   
 
|   
 
|  TWL-NAND FAT16. (DSi)
 
|  TWL-NAND FAT16. (DSi)
Line 31: Line 44:  
|  0x09011A00
 
|  0x09011A00
 
|  0x020B6600
 
|  0x020B6600
 +
|
 
|   
 
|   
 
|  TWL-NAND PHOTO FAT12. (DSi)
 
|  TWL-NAND PHOTO FAT12. (DSi)
Line 36: Line 50:  
|   
 
|   
 
|  0x0B100000
 
|  0x0B100000
 +
|  0x00
 
|  0x00030000
 
|  0x00030000
 
|  0x04
 
|  0x04
默认为全零填充此分区. AGB_FIRM was never launched. 包含 AGB_FIRM GBA游戏.
+
0x01
 +
|  默认为全空填充此分区(只有 0x00/0xFF byte,并且从不写入). AGB_FIRM was never launched. 包含 AGB_FIRM GBA游戏.
 
|-
 
|-
 
|  firm0
 
|  firm0
Line 44: Line 60:  
|  0x00400000
 
|  0x00400000
 
|  0x03
 
|  0x03
 +
|  0x02
 
|  [[FIRM|Firmware]] 分区.
 
|  [[FIRM|Firmware]] 分区.
 
|-
 
|-
Line 49: Line 66:  
|  0x0B530000
 
|  0x0B530000
 
|  0x00400000
 
|  0x00400000
 +
|  0x03
 
|  0x03
 
|  0x03
 
|  [[FIRM|Firmware]] 分区.(备份分区, 同上)
 
|  [[FIRM|Firmware]] 分区.(备份分区, 同上)
Line 56: Line 74:  
|  0x2F5D0000
 
|  0x2F5D0000
 
|  0x01
 
|  0x01
 +
|  0x04
 
|  CTR-NAND partition. (3DS)
 
|  CTR-NAND partition. (3DS)
 
|-
 
|-
Line 62: Line 81:  
|  0x2F3E3600
 
|  0x2F3E3600
 
|   
 
|   
 +
|
 
|  CTR-NAND FAT16文件系统.
 
|  CTR-NAND FAT16文件系统.
 
|}
 
|}
Line 67: Line 87:  
3DS中NAND TWL FAT分区的卷标为"TWL",CTR FAT分区为"CTR"。TWL分区的偏移和大小存储在MBR分区表中,而CTR分区表信息存在NAND NCSD头部。CTR-NAND分区的0扇面包含一个TWL-NAND分区的MBR分区表,而MBR的签名在+0x1fe位置。
 
3DS中NAND TWL FAT分区的卷标为"TWL",CTR FAT分区为"CTR"。TWL分区的偏移和大小存储在MBR分区表中,而CTR分区表信息存在NAND NCSD头部。CTR-NAND分区的0扇面包含一个TWL-NAND分区的MBR分区表,而MBR的签名在+0x1fe位置。
   −
NAND 分区的扇面被写之前,只包含明文的0x00或0xFF bytes.
+
NAND扇面未被写入前,只包含明文的0x00或0xFF byte.
    
除TWLP,以上NAND物理分区均不能使用ARM11直接读取。CTR/TWL NAND文件系统只能当exheader访问控制描述符启用时候访问。对于零售版机器中的[[NCCH#CXI|CXI]]进程,CTR/TWL的NAND描述符一般都是未启用的状态。ARM11只能将"nand:/rw/"挂载为"nandrw"的[[FS:OpenArchive|档案]],而"nand:/ro/"则挂载为如下的nandro档案。
 
除TWLP,以上NAND物理分区均不能使用ARM11直接读取。CTR/TWL NAND文件系统只能当exheader访问控制描述符启用时候访问。对于零售版机器中的[[NCCH#CXI|CXI]]进程,CTR/TWL的NAND描述符一般都是未启用的状态。ARM11只能将"nand:/rw/"挂载为"nandrw"的[[FS:OpenArchive|档案]],而"nand:/ro/"则挂载为如下的nandro档案。
 +
 +
==== 0x4000 ====
 +
On some 3DS systems(such as 3DS XL), there's a plaintext FAT16 boot record located at NAND offset 0x4000. This block does not exist for launch-day 3DS systems. This is the only plaintext block for this "partition".
    
=CTR分区=
 
=CTR分区=
Line 88: Line 111:  
  ├── [[nandrw/shared|shared]]
 
  ├── [[nandrw/shared|shared]]
 
  └── [[nandrw/sys|sys]]
 
  └── [[nandrw/sys|sys]]
     ├── [[nandrw/sys/lgy.log|lgy.log]]
+
     ├── [[nandrw/sys/lgy.log|lgy.log]] (This is written to by [[FIRM|TWL_FIRM]] when errors occur, this is equivalent to native.log)
 
     ├── [[nandrw/sys/LocalFriendCodeSeed_B|LocalFriendCodeSeed_B]]
 
     ├── [[nandrw/sys/LocalFriendCodeSeed_B|LocalFriendCodeSeed_B]]
     ├── [[nandrw/sys/native.log|native.log]]
+
     ├── [[nandrw/sys/native.log|native.log]] (This is written to by [[ErrDisp]])
 
     ├── [[nandrw/sys/rand_seed|rand_seed]]
 
     ├── [[nandrw/sys/rand_seed|rand_seed]]
 
     ├── [[nandrw/sys/SecureInfo_A|SecureInfo_A]]
 
     ├── [[nandrw/sys/SecureInfo_A|SecureInfo_A]]
 
     └── [[nandrw/sys/updater.log|updater.log]]
 
     └── [[nandrw/sys/updater.log|updater.log]]
 +
    
  nand
 
  nand
155

edits