mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-25 06:46:00 +00:00
bootstd: Add test for Android boot image v2
Rename actual android bootmethod test to specify it's for boot image version 4. Add a unit test for testing the Android bootmethod with boot image version 2. This requires another mmc image (mmc8) to contain the following partitions: - misc: contains the Bootloader Control Block (BCB) - boot_a: contains a fake generic kernel image we can test this with: $ ./test/py/test.py --bd sandbox --build -k test_ut # build the mmc8.img $ ./test/py/test.py --bd sandbox --build -k bootflow_android Reviewed-by: Mattijs Korpershoek <mkorpershoek@baylibre.com> Signed-off-by: Guillaume La Roque <glaroque@baylibre.com> Link: https://lore.kernel.org/r/20241126-adnroidv2-v4-5-11636106dc69@baylibre.com Signed-off-by: Mattijs Korpershoek <mkorpershoek@baylibre.com>
This commit is contained in:
parent
83a6ae6716
commit
126254ab97
3 changed files with 84 additions and 4 deletions
|
@ -44,6 +44,7 @@
|
||||||
mmc5 = "/mmc5";
|
mmc5 = "/mmc5";
|
||||||
mmc6 = "/mmc6";
|
mmc6 = "/mmc6";
|
||||||
mmc7 = "/mmc7";
|
mmc7 = "/mmc7";
|
||||||
|
mmc8 = "/mmc8";
|
||||||
pci0 = &pci0;
|
pci0 = &pci0;
|
||||||
pci1 = &pci1;
|
pci1 = &pci1;
|
||||||
pci2 = &pci2;
|
pci2 = &pci2;
|
||||||
|
@ -1138,13 +1139,20 @@
|
||||||
filename = "mmc6.img";
|
filename = "mmc6.img";
|
||||||
};
|
};
|
||||||
|
|
||||||
/* This is used for Android tests */
|
/* This is used for Android boot image v4 tests */
|
||||||
mmc7 {
|
mmc7 {
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
compatible = "sandbox,mmc";
|
compatible = "sandbox,mmc";
|
||||||
filename = "mmc7.img";
|
filename = "mmc7.img";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* This is used for Android boot image v2 tests. */
|
||||||
|
mmc8 {
|
||||||
|
status = "disabled";
|
||||||
|
compatible = "sandbox,mmc";
|
||||||
|
filename = "mmc8.img";
|
||||||
|
};
|
||||||
|
|
||||||
pch {
|
pch {
|
||||||
compatible = "sandbox,pch";
|
compatible = "sandbox,pch";
|
||||||
};
|
};
|
||||||
|
|
|
@ -1199,8 +1199,8 @@ static int bootflow_cros(struct unit_test_state *uts)
|
||||||
}
|
}
|
||||||
BOOTSTD_TEST(bootflow_cros, UTF_CONSOLE | UTF_DM | UTF_SCAN_FDT);
|
BOOTSTD_TEST(bootflow_cros, UTF_CONSOLE | UTF_DM | UTF_SCAN_FDT);
|
||||||
|
|
||||||
/* Test Android bootmeth */
|
/* Test Android bootmeth with boot image version 4 */
|
||||||
static int bootflow_android(struct unit_test_state *uts)
|
static int bootflow_android_image_v4(struct unit_test_state *uts)
|
||||||
{
|
{
|
||||||
if (!IS_ENABLED(CONFIG_BOOTMETH_ANDROID))
|
if (!IS_ENABLED(CONFIG_BOOTMETH_ANDROID))
|
||||||
return -EAGAIN;
|
return -EAGAIN;
|
||||||
|
@ -1220,7 +1220,30 @@ static int bootflow_android(struct unit_test_state *uts)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
BOOTSTD_TEST(bootflow_android, UTF_CONSOLE | UTF_DM | UTF_SCAN_FDT);
|
BOOTSTD_TEST(bootflow_android_image_v4, UTF_CONSOLE | UTF_DM | UTF_SCAN_FDT);
|
||||||
|
|
||||||
|
/* Test Android bootmeth with boot image version 2 */
|
||||||
|
static int bootflow_android_image_v2(struct unit_test_state *uts)
|
||||||
|
{
|
||||||
|
if (!IS_ENABLED(CONFIG_BOOTMETH_ANDROID))
|
||||||
|
return -EAGAIN;
|
||||||
|
|
||||||
|
ut_assertok(scan_mmc_android_bootdev(uts, "mmc8"));
|
||||||
|
ut_assertok(run_command("bootflow list", 0));
|
||||||
|
|
||||||
|
ut_assert_nextlinen("Showing all");
|
||||||
|
ut_assert_nextlinen("Seq");
|
||||||
|
ut_assert_nextlinen("---");
|
||||||
|
ut_assert_nextlinen(" 0 extlinux");
|
||||||
|
ut_assert_nextlinen(" 1 android ready mmc 0 mmc8.bootdev.whole ");
|
||||||
|
ut_assert_nextlinen("---");
|
||||||
|
ut_assert_skip_to_line("(2 bootflows, 2 valid)");
|
||||||
|
|
||||||
|
ut_assert_console_end();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
BOOTSTD_TEST(bootflow_android_image_v2, UTF_CONSOLE | UTF_DM | UTF_SCAN_FDT);
|
||||||
|
|
||||||
/* Test EFI bootmeth */
|
/* Test EFI bootmeth */
|
||||||
static int bootflow_efi(struct unit_test_state *uts)
|
static int bootflow_efi(struct unit_test_state *uts)
|
||||||
|
|
|
@ -501,6 +501,55 @@ def setup_android_image(cons):
|
||||||
|
|
||||||
print(f'wrote to {fname}')
|
print(f'wrote to {fname}')
|
||||||
|
|
||||||
|
mmc_dev = 8
|
||||||
|
fname = os.path.join(cons.config.source_dir, f'mmc{mmc_dev}.img')
|
||||||
|
u_boot_utils.run_and_log(cons, f'qemu-img create {fname} 20M')
|
||||||
|
u_boot_utils.run_and_log(cons, f'cgpt create {fname}')
|
||||||
|
|
||||||
|
ptr = 40
|
||||||
|
|
||||||
|
# Number of sectors in 1MB
|
||||||
|
sect_size = 512
|
||||||
|
sect_1mb = (1 << 20) // sect_size
|
||||||
|
|
||||||
|
required_parts = [
|
||||||
|
{'num': 1, 'label':'misc', 'size': '1M'},
|
||||||
|
{'num': 2, 'label':'boot_a', 'size': '4M'},
|
||||||
|
{'num': 3, 'label':'boot_b', 'size': '4M'},
|
||||||
|
]
|
||||||
|
|
||||||
|
for part in required_parts:
|
||||||
|
size_str = part['size']
|
||||||
|
if 'M' in size_str:
|
||||||
|
size = int(size_str[:-1]) * sect_1mb
|
||||||
|
else:
|
||||||
|
size = int(size_str)
|
||||||
|
u_boot_utils.run_and_log(
|
||||||
|
cons,
|
||||||
|
f"cgpt add -i {part['num']} -b {ptr} -s {size} -l {part['label']} -t basicdata {fname}")
|
||||||
|
ptr += size
|
||||||
|
|
||||||
|
u_boot_utils.run_and_log(cons, f'cgpt boot -p {fname}')
|
||||||
|
out = u_boot_utils.run_and_log(cons, f'cgpt show -q {fname}')
|
||||||
|
|
||||||
|
# Create a dict (indexed by partition number) containing the above info
|
||||||
|
for line in out.splitlines():
|
||||||
|
start, size, num, name = line.split(maxsplit=3)
|
||||||
|
parts[int(num)] = Partition(int(start), int(size), name)
|
||||||
|
|
||||||
|
with open(fname, 'rb') as inf:
|
||||||
|
disk_data = inf.read()
|
||||||
|
|
||||||
|
test_abootimg.AbootimgTestDiskImage(cons, 'boot.img', test_abootimg.img_hex)
|
||||||
|
boot_img = os.path.join(cons.config.result_dir, 'boot.img')
|
||||||
|
with open(boot_img, 'rb') as inf:
|
||||||
|
set_part_data(2, inf.read())
|
||||||
|
|
||||||
|
with open(fname, 'wb') as outf:
|
||||||
|
outf.write(disk_data)
|
||||||
|
|
||||||
|
print(f'wrote to {fname}')
|
||||||
|
|
||||||
return fname
|
return fname
|
||||||
|
|
||||||
def setup_cedit_file(cons):
|
def setup_cedit_file(cons):
|
||||||
|
|
Loading…
Add table
Reference in a new issue