feat(partition_table): Support primary subtypes partitions

This commit is contained in:
Konstantin Kondrashov
2024-10-14 20:45:24 +03:00
parent 7d179ccd3e
commit 8c4f576f99
12 changed files with 264 additions and 79 deletions

View File

@@ -1,8 +1,6 @@
#!/usr/bin/env python
# SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD
# SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Apache-2.0
from __future__ import division, print_function
import csv
import io
import os
@@ -64,6 +62,9 @@ def _strip_trailing_ffs(binary_table):
class CSVParserTests(Py23TestCase):
def tearDown(self):
gen_esp32part.primary_bootloader_offset = None
gen_esp32part.offset_part_table = 0
def test_simple_partition(self):
table = gen_esp32part.PartitionTable.from_csv(SIMPLE_CSV)
@@ -182,6 +183,42 @@ first, app, ota_0, 0x200000, 1M
t = gen_esp32part.PartitionTable.from_csv(csv)
t.verify()
def test_bootloader_and_part_table_partitions_no_sdkconfig(self):
csv = """
bootloader, bootloader, primary, N/A, N/A
"""
with self.assertRaisesRegex(gen_esp32part.InputError, 'Primary bootloader offset is not defined. Please use --primary-bootloader-offset'):
gen_esp32part.PartitionTable.from_csv(csv)
def test_bootloader_and_part_table_partitions(self):
csv = """
bootloader, bootloader, primary, N/A, N/A
partition_table, partition_table, primary, N/A, N/A
FactoryApp, app, factory, , 1M
OtaBTLDR, bootloader, ota, , N/A
OtaPrtTable, partition_table, ota, , N/A
"""
gen_esp32part.primary_bootloader_offset = 0x1000
gen_esp32part.offset_part_table = 0x9000
part_table_size = 0x1000
bootloader_size = gen_esp32part.offset_part_table - gen_esp32part.primary_bootloader_offset
t = gen_esp32part.PartitionTable.from_csv(csv)
t.verify()
# bootloader
self.assertEqual(t[0].offset, gen_esp32part.primary_bootloader_offset)
self.assertEqual(t[0].size, bootloader_size)
# partition_table
self.assertEqual(t[1].offset, gen_esp32part.offset_part_table)
self.assertEqual(t[1].size, part_table_size)
# FactoryApp
self.assertEqual(t[2].offset, 0x10000)
# OtaBTLDR
self.assertEqual(t[3].offset, 0x110000)
self.assertEqual(t[3].size, bootloader_size)
# OtaPrtTable
self.assertEqual(t[4].offset, 0x118000)
self.assertEqual(t[4].size, part_table_size)
class BinaryOutputTests(Py23TestCase):
def test_binary_entry(self):
@@ -369,7 +406,7 @@ class CommandLineTests(Py23TestCase):
from_csv = gen_esp32part.PartitionTable.from_csv(f.read())
self.assertEqual(_strip_trailing_ffs(from_csv.to_binary()), LONGER_BINARY_TABLE)
# run gen_esp32part.py to conver the CSV to binary again
# run gen_esp32part.py to convert the CSV to binary again
output = subprocess.check_output([sys.executable, '../gen_esp32part.py',
csvpath, binpath], stderr=subprocess.STDOUT)
self.assertNotIn(b'WARNING', output)