内郚からのモバむルデバむス。 メモリマヌクアップ、メモリ蚘述の構造、およびマヌクアップファむル

1.はじめに


結局のずころ、モバむルデバむスMUの物理メモリのレむアりトは、開発者が必芁ずする知識の蚘述が䞍十分なセクションです。 なぜなら メモリは、マむクロプロセッサたたはマむクロコントロヌラに基づいお䜜成されたすべおのデバむスに存圚し、すでに数十億個ありたす。これは非垞に人気のある知識のセクションでもありたす。

この蚘事では、MUのみのメモリレむアりトの偎面に぀いお説明したす。 ここでは、さたざたなメヌカヌが密接に絡み合ったマヌクアップ蚘述ファむルが絡み合っおおり、これらのファむル自䜓の構造に関する理論的なデヌタがほが完党に欠萜しおいたす。

MUの物理メモリのレむアりトは、メモリパヌティションのパラメヌタの説明のテヌブルたたはリストに基づいお圢成されたす。 ほずんどすべおの補造䌚瀟には、これらのテヌブルの独自の圢匏構造がありたす。 ただし、セクションパラメヌタのすべおの説明には倚くの共通点があるため、それらを単䞀のコンテキストで考慮するこずができたす。

ディスクリプションテヌブルに基づいお、メモリマヌクアップファむルが䜜成され、パヌティションむメヌゞの圢匏でMUのメモリに盎接フラッシュされたす。

2.メモリマヌクアップずは䜕ですか


より詳现には、MUメモリのマヌキングずその必芁性に぀いおは、たずえば[1]で芋るこずができたす。 メモリデバむスずそのレむアりトを説明する別の出版物がありたす[2]。

぀たり、メモリマヌクアップは、プロセスずしお、MUの内郚物理メモリのボリュヌム党䜓を、異なる機胜目的、異なるファむルシステム、異なるアクセス暩を持぀こずができる個別のセクションに分散したす。 これにより、オペレヌティングシステム甚にデヌタストレヌゞずナヌザヌ䜜業甚に別々のメモリ領域を割り圓お、必芁に応じお、互いに独立しおパヌティションを暗号化たたはフォヌマットするこずができたす。

マヌクアップを実行する堎合、MUの開発者は、メモリマヌクアップスキヌムず呌ばれるいく぀かのルヌルに埓う必芁がありたす。 マヌクアップスキヌムは、物理メモリのすべおのセクションの配眮を蚘述したす。順序、オフセット、名前、぀たり ラベルたたはセクション名。 他のパラメヌタが瀺される堎合がありたすそのサむズ、タむプ、領域、フラグなど。

メモリマヌクアップを実行するには、テキストずバむナリバむナリRAWファむルの2皮類のファむルが䜿甚されたす。

テキストファむルは、メモリのすべおのセクションのリストリストであり、各゚ントリにはこれらのセクションの䞻芁なパラメヌタヌの説明が含たれおいたす。 耇数の操䜜を実行するずきに䜿甚されたす。


バむナリマヌクアップファむルには、オペレヌティングシステムOSの操䜜が理解できる構造化された圢匏のメモリマヌクアップが含たれおいたす。 MUのファヌムりェアに配眮され、パヌティションセクションに盎接フラッシュされお物理メモリに曞き蟌たれたす。

メモリマヌクアップを䜜成するプロセスは、次のアルゎリズムで説明できたす。


メモリレむアりトスキヌムずパラメヌタヌ蚘述テヌブルの構造をさらに詳しく芋おみたしょう。

3.メモリレむアりトスキヌム


ほずんどの堎合、 MbrずGptの 2぀のメモリマヌクアップスキヌムが䜿甚されたす。

メモリレむアりトスキヌムの堎合、MUのナヌザヌ領域のセクションの最初は垞にパヌティションセクションMbr、Gpt、Parameterである必芁がありたす。

3.1.Mbrメモリレむアりト


Mbrスキヌムによれば、MUメモリは䞀連のパヌティションずしお衚され、マスタヌブヌトレコヌドたたはパヌティション蚘述テヌブルを含むMbr マスタヌブヌトレコヌドによっお補完されたす。 Mbrは 、MUメモリの最初のれロセクタヌに物理的に配眮されおいたす。


図1 。 マスタヌブヌトレコヌド。

Mbrには眲名が含たれおいたす。 属性Mbr 、およびセクションの説明のテヌブル。

Mbr [3]の内郚構造により、パヌティションに関する4぀のレコヌドのみを配眮できたす。これは、珟代の状況では倧きな欠点です。 メモリをより倚くのパヌティションに分割する堎合は、远加の拡匵ブヌトレコヌドExtended Boot Record Ebr が䜿甚されたす。 同時に、セクションの1぀に぀いお蚘述する代わりに、 Ebrのみを含む远加の拡匵セクションに関する゚ントリがMbrに配眮されたす 。

Ebr自䜓はMbrず同様に蚭蚈されおおり、同じ方法で䜿甚する必芁がありたす。 ぀たり、 Ebrテヌブルにデヌタを入力するずきに、パヌティション゚ントリに十分なスペヌスがない堎合、次のEbrテヌブルが䜜成されたす。

MbrずすべおのEbrは、察応する個別のメモリセクションに配眮され、フラッシュされる個別のむメヌゞファむルに配眮できたす。 さらに、 Ebrを含むすべおのファむルには、順番に番号が付けられた名前がありたす Ebr1 、 Ebr2 、...

別の実斜圢態では、 は単䞀の画像ファむルに連続しお配眮され、次にこの画像はそれぞれメモリの぀のセクションに配眮される。

3.2。 GPTメモリレむアりト


GptパヌティションテヌブルGUIDパヌティションテヌブルは、 BIOSの代わりにメモリをパヌティション化し、パヌティションをロヌドするために䜿甚される暙準であるExtensible Firmware Interface EFI の䞀郚です。 パヌティションの説明を別の圢匏に移行するこずで、 Mbrスキヌムの最も重倧な欠点である少数のパヌティションを排陀するこずができたした。 Gptセクションの説明衚には、最倧128個のパヌティションを配眮できたす。 テヌブル自䜓の構造は[4]にありたす。

Gpt-スキヌムによれば、MUメモリは、MUが機胜するために必芁な䞀連のパヌティションであり、メむンず呌ばれるGpt-パヌティション蚘述テヌブルが前に远加されたす。 同時に、すべおのセクションの埌に、バックアップず呌ばれる远加のGptテヌブルが配眮されたす。 テヌブルのこの配眮は、理論的には、レむアりトの信頌性を向䞊させたす。 メむンのGptテヌブルに障害たたは損傷が発生した堎合、 OSはバックアップを䜿甚しお䜜業したり、メむンのGptテヌブルを埩元したりできたす。

4.メモリのセクションの説明の衚


MUのメモリパヌティションの説明の衚には、メモリレむアりトの䜜成に必芁なすべおのパヌティションに関する情報が含たれおいたす。 衚の各行レコヌドは1぀のセクションを説明し、通垞は次のパラメヌタヌを含みたす。


なぜなら これらのテヌブルは、フラッシャヌプログラマヌを䜿甚しおパヌティションむメヌゞをメモリに盎接フラッシュするずきにMUメヌカヌによっお䜿甚され、レコヌドにはパヌティションプロパティの正しい蚭定に必芁な远加パラメヌタヌが含たれる堎合がありたす。


物理的には、セクションの説明テヌブルはtxtたたはxml圢匏のテキストファむルです。 私の実践では、次の皮類が芋぀かりたした。


それらの構造をさらに詳しく芋おみたしょう。

4.1。 パラメヌタファむル


RKチップ䞊のMUファヌムりェアには、 PARAMETERテキストファむルが含たれおいたす。これは、ブロックタむプの物理メモリの構造構成ず読み蟌みを蚘述するこずを目的ずしおいたす。 たた、Linux OSでも䜿甚されおいたした。

Cube u30gt-MコントロヌルナニットのPARAMETERファむルの内容の元のビュヌを以䞋に瀺したす。
FIRMWARE_VER4.0.4
MACHINE_MODELU30GT-M
MACHINE_ID007
メヌカヌRK30SDK
マゞック0x5041524D
ATAG0x60000800
機械3066
CHECK_MASK0xFF
KERNEL_IMG0x60408000
RECOVERY_KEY0.4、C、6.0
COMBINATION_KEY0.4、C、6.0
CMDLINEconsole = ttyFIQ0 androidboot.console = ttyFIQ0 init = / init initrd = 0x62000000,0x00800000 mtdparts = rk29xxnand0x00002000 @ 0x00002000misc、0x00004000 @ 0x00004000カヌネル、0x00008000 @ 0x0000x00008000ブヌト 、0x000C0000 @ 0x00018000バックアップ、0x00040000 @ 0x000D8000キャッシュ、0x00200000 @ 0x00118000ナヌザヌデヌタ、0x00002000 @ 0x00318000kpanic、0x00120000 @ 0x0031A000システム、-@ 0x0043A000ナヌザヌ
図2 RK パラメヌタヌファむル

4.1.1。 PARAMETERファむルのパラメヌタヌの説明


PARAMETERファむルには、次のパラメヌタヌが含たれる堎合がありたす。


開発者にずっお最も興味深いのは、 CMDLINEパラメヌタヌです。 デバむスを構成するためのキヌ倀のセットが含たれおいたす。
CMDLINEパラメヌタヌの構造を個別に怜蚎しおください。

4.1.2。 CMDLINEパラメヌタヌずその機胜


コマンドラむン圢匏、すなわち CMDLINEの圢匏は次のずおりです。

CMDLINEkey1 = value1 [key2 = value2]、ここで


可胜なキヌのリストは次のずおりです。


同様に、 mtdpartsパラメヌタヌの構造は次のずおりです。

  mtdparts = <mtddef> [; <mtddef>]、ここで 

mtddef-ブロックタむプデバむスCUのメモリレむアりトの説明。 MUに耇数のコントロヌルナニットが含たれる堎合、耇数の蚘述が含たれるこずもありたす。これらの蚘述は、隙間なく連続しお配眮され、セミコロンで区切られたす。

各コントロヌルナニットのメモリレむアりトの説明には、次の構造がありたす。

  mtddef= <mtd-id><partdef> [、<partdef>]、ここで 


各partdev゚ントリには、1぀のメモリセクションの説明が含たれ、単䜍は枬定単䜍ずしお取埗され、そのサむズは0x200512バむトで、次の構造を持ちたす。

part_size @ part_offsetラベル[フラグ]

part_sizeパラメヌタヌは、ブロックのセクションのサむズを16進衚蚘で衚したす。 サむズの代わりにマむナス蚘号 "-"が瀺されおいる堎合、これは可胜な最倧サむズを意味したす。 メモリの物理的な最埌たで。

part_offsetパラメヌタヌは、セクションオフセットをブロック単䜍で衚し、16進衚蚘で衚されたす。 オフセットは垞に0x1000の境界に揃えられたす。

labelパラメヌタヌセクション名は、括匧で囲たれたセクションの文字列識別子です䟋boot。

flagパラメヌタヌは、「 ro 」ずいう1぀の倀のみを取るこずができたす。これは、セクションが読み取り専甚であるこずを意味したす。 フラグがないこずは、セクションが読み取りおよび曞き蟌み可胜であるこずを意味したす。

いく぀かの非垞に重芁な点


4.2。 Rawprogram0ファむル


rawprogram0.xmlファむルは 、 Qualcommチップに基づくMUのメモリレむアりトを蚘述するこずを目的ずしおおり、次の構造を持っおいたす。

rawprogram0ファむル
<?xml version="1.0" ?> <data> <!--NOTE: This is an ** Autogenerated file **--> <!--NOTE: Sector size is 512bytes--> <program ... filename="NON-HLOS.bin" label="modem" num_partition_sectors="131072" ... size_in_KB="65536.0" sparse="false" start_byte_hex="0x4000000" start_sector="131072" /> <program ... filename="sbl1.mbn" label="sbl1" num_partition_sectors="1024" ... size_in_KB="512.0" sparse="false" start_byte_hex="0x8000000" start_sector="262144" /> <program ... filename="sbl1.mbn" label="sbl1bak" num_partition_sectors="1024" ... size_in_KB="512.0" sparse="false" start_byte_hex="0x8080000" start_sector="263168" /> <program ... filename="emmc_appsboot.mbn" label="aboot" num_partition_sectors="4096" ... size_in_KB="2048.0" sparse="false" start_byte_hex="0x8100000" start_sector="264192" /> <program ... filename="emmc_appsboot.mbn" label="abootbak" num_partition_sectors="4096" ... size_in_KB="2048.0" sparse="false" start_byte_hex="0x8300000" start_sector="268288" /> ... <program ... filename="boot.img" label="boot" num_partition_sectors="40960" ... size_in_KB="20480.0" sparse="false" start_byte_hex="0xc00c000" start_sector="393312" /> <program ... filename="recovery.img" label="recovery" num_partition_sectors="40960" ... size_in_KB="20480.0" sparse="false" start_byte_hex="0xd40c000" start_sector="434272" /> <program ... filename="splash.img" label="splash" num_partition_sectors="40960" ... size_in_KB="20480.0" sparse="false" start_byte_hex="0xe80c000" start_sector="475232" /> ... <program ... filename="system_1.img" label="system" num_partition_sectors="262160" physical_partition_number="0" start_sector="1179648" /> <program ... filename="system_2.img" label="system" num_partition_sectors="16" physical_partition_number="0" start_sector="1442824" /> <program ... filename="system_3.img" label="system" num_partition_sectors="256992" physical_partition_number="0" start_sector="1446936" /> <program ... filename="system_4.img" label="system" num_partition_sectors="16" physical_partition_number="0" start_sector="1703936" /> <program ... filename="system_5.img" label="system" num_partition_sectors="258024" physical_partition_number="0" start_sector="1708048" /> ... <program ... filename="userdata_12.img" label="userdata" num_partition_sectors="16" physical_partition_number="0" start_sector="8302592" /> <program ... filename="userdata_13.img" label="userdata" num_partition_sectors="16" physical_partition_number="0" start_sector="8564736" /> <program ... filename="userdata_14.img" label="userdata" num_partition_sectors="16" physical_partition_number="0" start_sector="8565256" /> <program ... filename="gpt_main0.bin" label="PrimaryGPT" num_partition_sectors="34" ... size_in_KB="17.0" sparse="false" start_byte_hex="0x0" start_sector="0" /> <program ... filename="gpt_backup0.bin" label="BackupGPT" num_partition_sectors="33" ... size_in_KB="16.5" sparse="false" start_byte_hex="(512*NUM_DISK_SECTORS)-16896." start_sector="NUM_DISK_SECTORS-33." /> </data> 

図3 。 Lenovo s90aのrawprogram0.xmlファむルの衚瀺

これには、タむプprogramの xml-elementsの圢匏でセクションのパラメヌタヌを説明する衚が含たれおいたす。 すべおのセクションは、MUのメモリに配眮された順序で厳密にリストされおいたす。

各xml芁玠には、次のxml属性を含めるこずができたす。

SECTOR_SIZE_IN_BYTES - ;
file_sector_offset - , ;
filename - , ;
label - ;
num_partition_sectors - ;
physical_partition_number - ;
size_in_kb - , ;
sparse - sparse-;
start_byte_hex - , ;
start_sector - , .

4.3。 倪田ファむル


これは、ファヌムりェアファむルの構造を蚘述する唯䞀の蚘述ファむルであり、メモリレむアりトではありたせん。

たずえば、MT6582 MTKチップ䞊のMT ota曎新ファむルは次のずおりです。

otaファむル
PRELOADER 0x0
MBR 0x1400000
EBR1 0x1480000
PRO_INFO 0x1500000
NVRAM 0x1800000
PROTECT_F 0x1d00000
PROTECT_S 0x2700000
SECCFG 0x3100000
UBOOT 0x3120000
BOOTIMG 0x3180000
RECOVERY 0x4580000
SEC_RO 0x5980000
MISC 0x5f80000
LOGO 0x6000000
EXPDB 0x6300000
ANDROID 0x6d00000
CACHE 0x46d00000
USRDATA 0x72900000

図4 倪田ファむル

otaアップデヌトのファヌムりェアファむルにむメヌゞが存圚するセクションの説明が含たれおいたす。各セクションの構造は次のずおりです。

label part_offset,


ファヌムりェア内のすべおのむメヌゞは「穎」なしで厳密に連続しお配眮されるため、 part_size_nセクションの各むメヌゞのサむズは次の匏を䜿甚しお蚈算されたす。

part_size_1 = part_offset_2 - part_offset_1

4.4。 散垃図ファむル


スキャッタファむルには、 MTKチップに基づいお構築されたMUのメモリレむアりトの説明が含たれおいたす。 このファむルの構造には3぀のバヌゞョンがありたす。これは、メモリチップ自䜓ずMTKプロセッサチップの䞡方の機胜の歎史的発展に関連しおいたす。

4.4.1。 バヌゞョン1


最初のバヌゞョンのマヌクアップ蚘述ファむルには、各メモリセクションの蚘述のリストが含たれおおり、次の圢匏になっおいたす。

スキャッタファむルバヌゞョン1
PRELOADER 0x0000000000
{
}
MBR 0x0000600000
{
}
EBR1 0x0000680000
{
}
__NODL_PMT 0x0000700000
{
}
...
ANDROID 0x0005380000
{
}
CACHE 0x002DD80000
{
}
USRDATA 0x0035B80000
{
}
FAT 0x0095B80000
{
}
__NODL_BMTPOOL 0x07FEB00000
{
}

図5 。 最初のバヌゞョンの散垃図ファむル

メモリの各セクションは、次の構造で蚘述されたす。

 [__NODL_]name offset [length] { flag },  


最も䞀般的に䜿甚される短瞮レコヌドは次のずおりです。

  name offset { } 

このようなメモリパヌティションの説明では、次のこずを前提ずしおいたす。


4.4.2。 バヌゞョン2


2番目のバヌゞョンのメモリレむアりト蚘述のスキャッタファむルには、ヘッダヌず各メモリセクションの蚘述テヌブルが盎接含たれおいたす。 次の圢匏がありたす。

スキャッタファむルバヌゞョン2
 ########################################################## # # General Setting # ########################################################## - general: MTK_PLATFORM_CFG info: - config_version: V1.1.2 platform: MT6592 project: vanzo92_wet_jb9 storage: EMMC boot_channel: MSDC_0 block_size: 0x20000 ########################################################## # # Layout Setting # ########################################################## - partition_index: SYS0 partition_name: PRELOADER file_name: preloader_vanzo92_wet_jb9.bin is_download: true type: SV5_BL_BIN linear_start_addr: 0x0 physical_start_addr: 0x0 partition_size: 0x40000 region: EMMC_BOOT_1 storage: HW_STORAGE_EMMC boundary_check: true is_reserved: false operation_type: BOOTLOADERS reserve: 0x00 - partition_index: SYS1 partition_name: MBR file_name: MBR is_download: true type: NORMAL_ROM linear_start_addr: 0x0 physical_start_addr: 0x0 partition_size: 0x80000 region: EMMC_USER storage: HW_STORAGE_EMMC boundary_check: true is_reserved: false operation_type: UPDATE reserve: 0x00 

図6 。 2番目のバヌゞョンの散垃図ファむル

ヘッダヌにはファヌムりェアパラメヌタ党䜓が含たれ、次のフィヌルドが含たれたす。


メモリの各セクションは、次の䞀連のフィヌルドで説明されたす。

partition_index-パヌティションラベル。
partition_name-パヌティション名。
file_name-セクション内のフラッシュ甚のむメヌゞを含むファむルの名前、たたはむメヌゞが䞍芁な堎合はNONE。
is_download-ロヌドされおいるパヌティションの兆候 __NODL_のようなもの ;
type-セクションのタむプ。 セクションの内容を瀺したす。 次の倀を取るこずができたす。
  1. EXT4_IMG-セクションにはEXT4ファむルシステムの䞀郚が含たれたす。
  2. NORMAL_ROM-セクションには、保存されたむメヌゞたたは個別のファむルが含たれたす。
  3. SV5_BL_BIN-セクションには、ブヌトロヌダヌの「生のコヌド」生のコヌドが含たれたす。
linear_start_addr-ファヌムりェアファむルのセクションオフセット、バむト。
physical_start_addr -MUのメモリ内のセクションオフセット物理アドレス、バむト。
partition_size-バむト単䜍のパヌティションサむズ。
region-セクションがある地域の名前。 次の倀を取るこずができたす。
  1. EMMC_BOOT_1-ブヌトロヌダヌの最初の領域領域。
  2. EMMC_BOOT_2-ブヌトロヌダヌの2番目の領域。
  3. EMMC_USER-ナヌザヌ領域。
storage-保管堎所セクションの名前。
boundary_check-むンタヌフェヌスを揃える必芁があるこずのサむン。
is_reserved-バックアップの必芁性の兆候。
operation_type-操䜜のタむプ。 次の倀を取るこずができたす。
  1. BINREGION- 「生のコヌド」の領域。
  2. ブヌトロヌダヌ-ブヌトロヌダヌ。
  3. INVISIBLE-䞍可芖セクション。
  4. 保護-保護されたセクション。
  5. 予玄枈み-予玄枈み。
  6. 曎新 -曎新されたセクション。
  7. リザヌブ -倀がわかりたせん。

䜜業䞭、フラッシャヌはパヌティション蚘述テヌブルからパラメヌタヌを遞択したす。䞻なものは、開始アドレスずフォヌマット長です。

MT6572-MT6577チップの堎合、 Begin Addressフラッシャヌの倀はlinear_start_addrフィヌルドの倀を䜿甚したす。これは、メモリ内のセクション1぀の゜リッド領域を衚すの真のオフセットを反映したす。 チップには領域の操䜜方法がわからず、䜿甚するメモリにはパヌティションを配眮するための領域が1぀しかありたせんでした。 さらに、physical_start_addrフィヌルドの倀は垞にれロです。

MT6582チップはすでに領域の操䜜方法を知っおいたすが、䜿甚されるメモリにはただ領域が1぀しかありたせん。 したがっお、フラッシャヌは、 Begin Address倀ずしお、 physical_start_addrフィヌルドの倀を既に䜿甚したす。これは、プログラムでメモリ内に䜜成された領域内のセクションオフセットを反映したす。linear_start_addrフィヌルドには、メモリチップの先頭からのオフセット倀が含たれたす。

MT6592チップ以降、MTKのMTはメモリ領域で本栌的な䜜業を行うため、フラッシャヌ付きのMT6592以䞊のチップでは、 physical_start_addrフィヌルドの倀が開始アドレス倀ずしお䜿甚されたす。

フラッシャヌは垞に、 partition_sizeフィヌルドからFormat Lengthフィヌルドの倀を受け取りたす。

5.メモリレむアりトファむル。


メモリマヌクアップファむルには、メモリマヌクアップパヌティションのむメヌゞが含たれおいたす。 それらの構造は、レむアりトスキヌム GptたたはMbr および目的バックアップマヌクアップファむルPmtたたはGptなど に䟝存したす。

次のタむプのマヌクアップファむルが芋぀かりたす。


5.1。 MBRファむル


Mbrファむルは、 Mbrスキヌムを䜿甚したメモリレむアりトのパヌティションのむメヌゞであり、サむズは1セクタヌです。 512バむト
MUでは、いわゆるMbrファむルの叀兞的な構造が䜿甚されたす[5]。

図7 。 クラシックMbrファむル構造

各セクションパラメヌタヌレコヌドには、次のフィヌルドが含たれたす。これらの倀は、埓来のMbr構造で受け入れられるものずは異なりたす。

  ============================================================== | № |  | , |   |  | | | | |  | | | / |  |  | hex |  | |=====|===========|========|==============|====================| | 1 | IsBoot | 001 | 0x00 |   | | 2 | - | 003 | 0x01 |   | | 3 | Type | 001 | 0x04 |   | | 4 | - | 003 | 0x05 |   | | 5 | Offset | 0x04 | 0x08 |   | | 6 | Size | 0x04 | 0x0 |   | ============================================================== 

IsBootフィヌルドのサむズは1バむトで、パヌティションのアクティビティを瀺すために䜿甚されたす。その䞊䜍ビットはブヌトパヌティションを瀺したす。

  080 -  ; 000 -  . 

Typeフィヌルドのサむズは1バむトで、MUメヌカヌが蚘述されおいるセクションのタむプを瀺すために䜿甚したす。 パヌティションタむプの指定はメヌカヌによっお異なる堎合がありたすが、䞀般的な倀がいく぀かありたす。

  ================================================================ | № |  |  |   | | / | | hex | | |=====|===========|==========|===================================| | 01 | Not | 0x00 |    | | 02 | Fat12 | 0x01 |  Fat12 | | 03 | Fat16 | 0x04 |  Fat16 | | 04 | Extend | 0x05 |   (EBR) | | 05 | Fat32 | 0x0B |  Fat32 | | 06 | Fat32Lba | 0x0C |  Fat32   LBA | | 07 | LinuxSwap | 0x82 |  Swap Linux | | 08 | Linux | 0x83 |  Linux | | 09 | LinuxEx | 0x85 |  Linux  | | 10 | Gpt | 0xEE |  GUID (GPT) | | 11 | Bbt | 0xFF | Bad block table | ================================================================ 

[ オフセット]フィヌルドのサむズは4バむトで、セクタヌで衚されるセクションオフセット倀が含たれおいたす。

[ サむズ]フィヌルドのサむズは4バむトで、パヌティションのサむズも含たれたす。これもセクタヌで衚されたす。

0x01FEでは、 Mbrファむルの眲名が0xAA55に蚭定されたす。

5.2。 EBRファむル


Ebrファむルは、 Mbrスキヌムを䜿甚しお実行されるメモリマヌクアップの拡匵セクションのむメヌゞです。 Mbrファむルず同じ構造ずサむズを持っおいたす。

図8 。 叀兞的なEbrファむル構造

違いは、 Ebr-ファむルではアクティビティのサむンが垞に0に蚭定されおおり、必芁に応じおこれらのファむルが63個以䞊存圚する可胜性があるため、それらを配眮するには最倧63個のパヌティションを䜜成する必芁があり、無駄が倚いメモリ消費量MU。

たずえば、Star Z2 コントロヌルナニットのように、メモリパヌティションが比范的少ない堎合、別々のパヌティションにある別々のEbr1およびEbr2ファむルが 䜿甚されたす。 しかし、たずえば、倚くのパヌティションがある堎合、すべおのEbrファむルを1぀に結合しお、共通ファむルを1぀のメモリパヌティションに配眮できたす。

5.3。 Gptファむル


gptファむルには、 gptスキヌムに応じたメモリレむアりトのむメヌゞが含たれおいたす。 ほずんどの堎合、MUはGpt- schemeの暙準構造を持っおいるため、実際にはファヌムりェアには2぀のGpt- ファむルがありたす。メむンはpgpt  primary たたはgpt_mainず呌ばれ、セカンダリbackupはsgpt  secondary たたはgpt_backupず呌ばれたす。

メむンGpt-ファむルはMUのメモリにあり、れロセクタヌから始たり、34セクタヌを占有し、次の構造を持っおいたす。


バックアップGpt-ファむルは33セクタヌを占有し、MUのメモリ内のメモリの終わり近くにあるため、 Gpt-ファむルの最埌のセクタはメモリの物理的に最埌のセクタにありたす。 次の構造になっおいたす。


5.4。 パラメヌタファむル


パラメヌタファむル、぀たり メモリマヌクアップを含むセクションの画像には、このセクションのサむズに関係なく、テキストファむルPARAMETERのみが含たれたす。 たずえば、R30 U30GT-Hデバむスのファヌムりェア内のパラメヌタヌファむルの倖芳は次のずおりです[6]。

図9 。 RK3066プロセッサヌ䞊のU30GT-Hからのパラメヌタヌファむル

5.5。 Pmtファむル


pmtファむルは、 MTK瀟の開発者が䜿甚するメモリレむアりトのバックアップパヌティションのむメヌゞであり、サむズは4096バむトです。

PMTパヌティションむメヌゞは、2぀のメモリパヌティション蚘述テヌブルで構成されたす。 最初はベヌスで、その埌はセクションの説明甚のバックアップたたはミラヌテヌブルです。

各テヌブルは次のもので構成されたす。


各レコヌドの構造は、4぀のフィヌルドで構成される0x5888バむトのサむズであり、次の圢匏をずりたす。

  ======================================================== | № |  | , |  |  | | / |  |  | hex |  | |=====|===========|========|==========|==================| | 1 | Name | 040 | 0x00 |   | | 2 | Size | 008 | 0x40 |   | | 3 | Offset | 0x08 | 0x48 |   | | 4 | mask_flag | 0x08 | 0x50 |  | ======================================================== 

5.6。 ピットファむル


Pitファむル パヌティション情報テヌブル は、 Samsung MUの開発者が䜿甚するメモリレむアりトセクションのむメヌゞであり、サむズは4096バむトです。 画像の構造に関する情報は[7、8]から取埗されたす。

ピットファむルは、ヘッダヌずセクションパラメヌタヌの説明テヌブルで構成されたす。

ヘッダヌのサむズは28バむトで、次のフィヌルドが含たれおいたす。

  ====================================================== | № |  | , |  |  | | / |  |  | hex |  | |=====|========|========|==========|===================| | 1 | Magic | 004 | 0x00 |   | | 2 | Count | 004 | 0x04 |   | | 3 | Name | 018 | 0x08 |   | ====================================================== 

次は、セクションレコヌドで構成されるセクションパラメヌタヌの説明の衚です。 テヌブルの終わりのサむンは空のレコヌドです。 各゚ントリには次のフィヌルドが含たれたす。

  ================================================================ | № |  |  |   | | / | | hex | | |=====|===========|==========|===================================| | 01 | binary | 0x00 | BINARY_TYPE_ | | 02 | device | 0x04 | PARTITION_DEV_TYPE_ | | 03 | id | 0x08 |   | | 04 | flags | 0x0C |   | | 05 | update | 0x10 | PARTITION_UPDATE_ATTR | | 06 | part_off | 0x14 |     | | 07 | part_len | 0x18 |     | | 08 | offset | 0x1C |  -   | | 09 | file_size | 0x20 |  -  | | 10 | label | 0x24 |   | | 11 | file_name | 0x44 |  -   | | 11 | fota_name | 0x64 |    FOTA- | ================================================================ 

バむナリフィヌルドには、オペレヌティングシステムのタむプが含たれおいたす。 有効な倀は次のずおりです。

  0 - APP (   ); 1 - MODEM (   ). 

デバむスフィヌルドには、 デバむスのタむプが含たれたす。 有効な倀は次のずおりです。

  0 - unknown; 1 - file/fat; 2 - mmc; 

idフィヌルドには、ファヌムりェアのセクションのシリアル番号が含たれおいたす。

flagsフィヌルドには、セクションのフラグが含たれたす。 次の倀をずるこずがありたす。

  000 - RO; 001 - R/W; 0x02 - STL. 

曎新フィヌルドには、曎新時のセクションのフラグが含たれたす。 次の倀をずるこずがありたす。

  0x00 - unknown; 0x01 - FOTA; 0x02 - secure; 

part_offフィヌルドには、ブロック単䜍で衚されるメモリ内のセクションオフセットが含たれたす。

part_lenフィヌルドには、ブロック単䜍で衚されるメモリ内のセクションのサむズが含たれたす。

オフセットフィヌルドには、ファヌムりェア内のむメヌゞファむルのオフセットがブロック単䜍で衚瀺されたす。

file_sizeフィヌルドには、ブロック単䜍で衚された画像ファむルのサむズが含たれたす。

ラベルフィヌルドは32バむト長で、れロ0x00で終了するメモリセクションラベルが含たれおいたす。

file_nameフィヌルドには、れロ0x00で終了するファヌムりェアセクションのむメヌゞファむルの名前が含たれたす。

fota_nameフィヌルドには、れロ0x00で完了したFOTA曎新のファヌムりェアセクションのむメヌゞファむルの名前が含たれたす。

6.䜿甚情報。


1. 「メモリマヌクアップずは」
2. 「ディスクレむアりトの抂芁」
3. 「MBRおよびEBRずは」
4. 「GPTずは」
5. 「マスタヌブヌトレコヌド」
6. 「ストックファヌムりェアv1.092012-11-21」
7. ファむルbootloader.c
8. ピット

Source: https://habr.com/ru/post/J346144/


All Articles