[PATCH v2 5/5] test: abootimg: Add test for bootconfig handling

Tom Rini trini at konsulko.com
Fri Oct 24 17:20:39 CEST 2025


On Fri, Oct 24, 2025 at 05:09:07PM +0200, Guillaume La Roque wrote:
> Le 20/10/2025 à 07:18, Simon Glass a écrit :
> > Hi,
> > 
> > On Sun, 19 Oct 2025 at 17:01, Tom Rini <trini at konsulko.com> wrote:
> > > On Sun, Oct 19, 2025 at 02:06:05PM +0100, Simon Glass wrote:
> > > > Hi Guillaume,
> > > > 
> > > > On Fri, 17 Oct 2025 at 14:19, Guillaume La Roque (TI.com)
> > > > <glaroque at baylibre.com> wrote:
> > > > > Add test to verify that androidboot.* parameters are correctly extracted
> > > > > from bootargs and appended to the bootconfig section when using
> > > > > 'abootimg get ramdisk' with boot image v4 and vendor_boot image.
> > > > > 
> > > > > The test verifies:
> > > > > - androidboot.* parameters are removed from bootargs
> > > > > - They are appended to the bootconfig section in the ramdisk
> > > > > - Non-androidboot parameters remain in bootargs
> > > > > - The bootconfig trailer is properly updated
> > > > > 
> > > > > Signed-off-by: Guillaume La Roque (TI.com) <glaroque at baylibre.com>
> > > > > ---
> > > > >   test/py/tests/test_android/test_abootimg.py | 108 +++++++++++++++++++++++++---
> > > > >   1 file changed, 99 insertions(+), 9 deletions(-)
> > > > > 
> > > > > diff --git a/test/py/tests/test_android/test_abootimg.py b/test/py/tests/test_android/test_abootimg.py
> > > > > index 2aadb692b30..bd5fb992a7d 100644
> > > > > --- a/test/py/tests/test_android/test_abootimg.py
> > > > > +++ b/test/py/tests/test_android/test_abootimg.py
> > > > > @@ -69,15 +69,33 @@ e5bddc8a7b792d8e8788c896ce9b88d32ebe6c971e7ddd3543cae734cd01
> > > > >   c0ffc84c0000b0766d1a87d4e5afeadd3dab7a6f10000000f84163d5d7cd
> > > > >   d43a000000000000000060c53e7544995700400000"""
> > > > > 
> > > > > -# vendor boot image v4 hex dump
> > > > > -vboot_img_hex = """1f8b0808baaecd63020376626f6f742e696d6700edd8310b824018c6f1b3
> > > > > -222a08f41b3436b4280dcdd19c11d16ee9109d18d59042d047ec8b04cd0d
> > > > > -d19d5a4345534bf6ffc173ef29272f38e93b1d0ec67dd79d548462aa1cd2
> > > > > -d5d20b0000f8438678f90c18d584b8a4bbb3a557991ecb2a0000f80d6b2f
> > > > > -f4179b656be5c532f2fc066f040000000080e23936af2755f62a3d918df1
> > > > > -db2a7ab67f9ffdeb7df7cda3465ecb79c4ce7e5c577562bb9364b74449a5
> > > > > -1e467e20c53c0a57de763193c1779b3b4fcd9d4ee27c6a0e00000000c0ff
> > > > > -309ffea7010000000040f1dc004129855400400000"""
> > > > > +# vendor boot image v4 hex dump (contains initial bootconfig: androidboot.hardware=test)
> > > > > +vboot_img_hex = """1f8b08000000000002ffeddb316a02411806d009a49040606d3d84374823a9a348b095
> > > > > +915951b2c9caee8690ce237a91406a0b497603e215dcbc577cf3334cf5350303b3787a
> > > > > +9c4fa6d3e7dbf02b6b63dfc6b01b0180ffe726644d5e37975bb34108c76efa1eb65974
> > > > > +c7fed691c600e02a64e7ab3e8494afe37bd128050000007ae6707ffad202000000f45b
> > > > > +155fd3b67e59eee26751c674a711000000e89ff896aa729b5665d98c37b14a1fb1ca1f
> > > > > +da4f7f5e02000000a0377e0040ab5ba000500000"""
> > > > > +
> > > > > +# bootable boot image v4 hex dump (contains actual bootable kernel)
> > > > > +boot_bootable_img_hex = """1f8b08081663ee6802ff626f6f745f626f6f7461626c655f76342e696d67
> > > > > +00edd1c14ac3401485e159b80a083ec24dba4f117c81d8140c6dad24ee25
> > > > > +4da6e9d07452321305dfca37d4d4ec5cb954fe6f37ccb967606ef298e6db
> > > > > +2c0d3f94526feae25adda81fae140000000000f8ab66e17c67ecdc1d025d
> > > > > +1d3a89125bf79da9e5beebbc64a7b2d1f27a27cfda7959e9deea369a8263
> > > > > +a0eaecde34e2c75b375495766e3fb46114cca430a7a12dbd96e3654a7663
> > > > > +dfb9f4feeb383514beecbdb1cd1489e3380a5cabf5596ea7c4f78b62acf1
> > > > > +a66ccdbbaea380950100000000f06b79b249b362f5f2b44e16cb87ed3a5d
> > > > > +e67c0a0000000000ffcc27ba944c7e00300000"""
> > > > > +
> > > > > +# bootable vendor boot image v4 hex dump (contains actual bootable ramdisk)
> > > > > +vendor_boot_bootable_img_hex = """1f8b08081663ee6802ff76656e646f725f626f6f745f626f6f7461626c65
> > > > > +5f76342e696d6700edd8b10a02310cc6f10c0e7220f8080737b8b93ab9a8
> > > > > +282e571171959e0d787058a84557f5c96ddd7d80c3ff0f92217c5396408e
> > > > > +f56abf30e63090649c9b3c53bd050000fcab57d45b3c35de47db749a06bb
> > > > > +e1eff08c7d0100d00bf6ea826f5dbef0d38b0dee618396f3f27bf69ddedb
> > > > > +b316558a4d462255fe132c4dbdde6e0a160700000000408f7c0027597569
> > > > > +00200000"""
> > > > > 
> > > > >   # Expected response for "abootimg dtb_dump" command
> > > > >   dtb_dump_resp="""## DTB area contents (concat format):
> > > > > @@ -179,6 +197,24 @@ def abootimgv4_disk_image_boot(ubman):
> > > > >           gtdi3 = AbootimgTestDiskImage(ubman, 'bootv4.img', boot_img_hex)
> > > > >       return gtdi3
> > > > > 
> > > > > +gtdi4 = None
> > > > > + at pytest.fixture(scope='function')
> > > > > +def abootimgv4_bootable_disk_image_boot(ubman):
> > > > > +    """pytest fixture to provide bootable boot image v4."""
> > > > > +    global gtdi4
> > > > > +    if not gtdi4:
> > > > > +        gtdi4 = AbootimgTestDiskImage(ubman, 'boot_bootable_v4.img', boot_bootable_img_hex)
> > > > > +    return gtdi4
> > > > > +
> > > > > +gtdi5 = None
> > > > > + at pytest.fixture(scope='function')
> > > > > +def abootimgv4_bootable_disk_image_vboot(ubman):
> > > > > +    """pytest fixture to provide bootable vendor boot image v4."""
> > > > > +    global gtdi5
> > > > > +    if not gtdi5:
> > > > > +        gtdi5 = AbootimgTestDiskImage(ubman, 'vendor_boot_bootable_v4.img', vendor_boot_bootable_img_hex)
> > > > > +    return gtdi5
> > > > > +
> > > > >   @pytest.mark.boardspec('sandbox')
> > > > >   @pytest.mark.buildconfigspec('android_boot_image')
> > > > >   @pytest.mark.buildconfigspec('cmd_abootimg')
> > > > > @@ -266,3 +302,57 @@ def test_abootimgv4(abootimgv4_disk_image_vboot, abootimgv4_disk_image_boot, ubm
> > > > >       ubman.run_command('fdt get value v / model')
> > > > >       response = ubman.run_command('env print v')
> > > > >       assert response == 'v=x2'
> > > > > +
> > > > > + at pytest.mark.boardspec('sandbox')
> > > > > + at pytest.mark.buildconfigspec('android_boot_image')
> > > > > + at pytest.mark.buildconfigspec('cmd_abootimg')
> > > > > + at pytest.mark.requiredtool('xxd')
> > > > > + at pytest.mark.requiredtool('gunzip')
> > > > > +def test_abootimg_bootconfig(abootimgv4_disk_image_vboot,
> > > > > +                              abootimgv4_disk_image_boot,
> > > > > +                              ubman):
> > > > > +    """Test bootconfig handling with boot image v4.
> > > > > +
> > > > > +    Verifies that androidboot.* parameters from bootargs are appended to the
> > > > > +    bootconfig section in vendor_boot image in memory, and that non-androidboot
> > > > > +    parameters remain in bootargs.
> > > > > +    """
> > > > > +
> > > > > +    # Setup addresses
> > > > > +    ram_base = utils.find_ram_base(ubman)
> > > > > +    ramdisk_addr_r = ram_base + 0x4000000
> > > > > +    ubman.run_command('setenv ramdisk_addr_r 0x%x' % ramdisk_addr_r)
> > > > > +    ubman.run_command('setenv loadaddr 0x%x' % loadaddr)
> > > > > +    ubman.run_command('setenv vloadaddr 0x%x' % vloadaddr)
> > > > > +
> > > > > +    # Set bootargs with androidboot.* parameters
> > > > > +    ubman.run_command('setenv bootargs "androidboot.serialno=ABC123 androidboot.mode=recovery console=ttyS0"')
> > > > > +
> > > > > +    # Load images
> > > > > +    ubman.run_command('host load hostfs - 0x%x %s' % (vloadaddr,
> > > > > +        abootimgv4_disk_image_vboot.path))
> > > > > +    ubman.run_command('host load hostfs - 0x%x %s' % (loadaddr,
> > > > > +        abootimgv4_disk_image_boot.path))
> > > > > +    ubman.run_command('abootimg addr 0x%x 0x%x' % (loadaddr, vloadaddr))
> > > > > +
> > > > > +    # Extract ramdisk (triggers bootconfig append)
> > > > > +    ubman.run_command('abootimg get ramdisk ramdisk_addr ramdisk_size')
> > > > > +
> > > > > +    # Get ramdisk address
> > > > > +    response = ubman.run_command('env print ramdisk_addr')
> > > > > +    ramdisk_start = int(response.split('=')[1], 16)
> > > > > +
> > > > > +    # Verify androidboot.* parameters were removed from bootargs
> > > > > +    response = ubman.run_command('env print bootargs')
> > > > > +    assert 'androidboot.' not in response
> > > > > +    assert 'console=ttyS0' in response
> > > > > +
> > > > > +    # Get ramdisk size and verify BOOTCONFIG magic at the end
> > > > > +    response = ubman.run_command('env print ramdisk_size')
> > > > > +    ramdisk_size = int(response.split('=')[1], 16)
> > > > > +
> > > > > +    # Dump the end of the ramdisk where BOOTCONFIG trailer should be
> > > > > +    response = ubman.run_command('md.b 0x%x 96' % (ramdisk_start))
> > > > > +
> > > > > +    # Verify BOOTCONFIG magic is present
> > > > > +    assert 'BOOTCONFIG' in response or 'BOOTCON' in response
> > > > > 
> > > > It looks like this test could be written in C?
> > > But this is just extending existing tests, and so this is fine. Looking
> > > at
> > > https://source.denx.de/u-boot/u-boot/-/pipelines/27943/test_report?job_name=sandbox%20test.py%3A%20%5Bamd64%5D
> > > we can see these tests are currently under 400ms each, FYI.
> > Yes, OK. The python tests are ~100x slower though, so we really should
> > use C where possible. Part of this is being hidden by the overhead of
> > individually running the C tests from Python. I suppose we could
> > improve that by running the tests in batches, but I haven't looked at
> > it.
> > 
> > Reviewed-by: Simon Glass <sjg at chromium.org>
> 
> Hi simon,
> 
> I will plan to migrate all tests link to android in C after this series.

As we've been talking recently in other threads, running tests reliably
outside of the python framework itself is also difficult to have be
reliable. Please don't worry about converting these tests as a priority.
I pointed out the time they take currently as a reminder that even if
they're "100x slower" it's very much a micro-optimization.

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: not available
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20251024/53bc8676/attachment.sig>


More information about the U-Boot mailing list