All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mattijs Korpershoek <mkorpershoek@kernel.org>
To: "Guillaume La Roque (TI.com)" <glaroque@baylibre.com>,
	Tom Rini <trini@konsulko.com>,
	Mattijs Korpershoek <mkorpershoek@kernel.org>
Cc: Julien Masson <jmasson@baylibre.com>,
	Guillaume La Roque <glaroque@baylibre.com>,
	u-boot@lists.denx.de, Simon Glass <sjg@chromium.org>,
	Nicolas Belin <nbelin@baylibre.com>,
	Neil Armstrong <neil.armstrong@linaro.org>,
	Andrew Goodbody <andrew.goodbody@linaro.org>,
	Aaron Kling <webgeek1234@gmail.com>,
	George Chan <gchan9527@gmail.com>, Sam Day <me@samcday.com>,
	Jerome Forissier <jerome.forissier@linaro.org>,
	Maxime Fournier <mfournier@baylibre.com>
Subject: Re: [PATCH v2 5/5] test: abootimg: Add test for bootconfig handling
Date: Fri, 31 Oct 2025 17:27:03 +0100	[thread overview]
Message-ID: <877bwb5960.fsf@kernel.org> (raw)
In-Reply-To: <20251017-bootconfig-v2-5-8c7c2f2e5474@baylibre.com>

Hi Guillaume,

Thank you for the patch.

On Fri, Oct 17, 2025 at 15:19, "Guillaume La Roque (TI.com)" <glaroque@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@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
> +@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
> +@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'
> +
> +@pytest.mark.boardspec('sandbox')
> +@pytest.mark.buildconfigspec('android_boot_image')
> +@pytest.mark.buildconfigspec('cmd_abootimg')
> +@pytest.mark.requiredtool('xxd')
> +@pytest.mark.requiredtool('gunzip')

We use the md command below so I think you should also add something in
the line of

    @pytest.mark.buildconfigspec('cmd_md')

Note: I have not tested this.

> +def test_abootimg_bootconfig(abootimgv4_disk_image_vboot,
> +                              abootimgv4_disk_image_boot,
> +                              ubman):

Nit: this seems weirdly indented. Should be:

+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

Can we explain why it's either BOOTCONFIG or BOOTCON? why would the
magic be truncated ?

>
> -- 
> 2.34.1

  parent reply	other threads:[~2025-10-31 16:27 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-17 13:19 [PATCH v2 0/5] android: add bootconfig support Guillaume La Roque (TI.com)
2025-10-17 13:19 ` [PATCH v2 1/5] boot: android: import addBootConfigParameters() from AOSP Guillaume La Roque (TI.com)
2025-10-31 15:39   ` Mattijs Korpershoek
2025-10-17 13:19 ` [PATCH v2 2/5] boot: android: Add sandbox memory mapping support Guillaume La Roque (TI.com)
2025-10-31 15:49   ` Mattijs Korpershoek
2025-10-17 13:19 ` [PATCH v2 3/5] boot: android: Add bootconfig support Guillaume La Roque (TI.com)
2025-10-31 15:58   ` Mattijs Korpershoek
2025-11-03 18:52     ` Guillaume La Roque
2025-11-07 14:52       ` Mattijs Korpershoek
2025-10-17 13:19 ` [PATCH v2 4/5] cmd: abootimg: Add 'get ramdisk' command Guillaume La Roque (TI.com)
2025-10-31 16:13   ` Mattijs Korpershoek
2025-10-17 13:19 ` [PATCH v2 5/5] test: abootimg: Add test for bootconfig handling Guillaume La Roque (TI.com)
2025-10-19 13:06   ` Simon Glass
2025-10-19 16:01     ` Tom Rini
2025-10-20  5:18       ` Simon Glass
2025-10-24 15:09         ` Guillaume La Roque
2025-10-24 15:20           ` Tom Rini
2025-10-31 16:27   ` Mattijs Korpershoek [this message]
2025-11-05 18:14     ` Guillaume La Roque
2025-11-07 14:52       ` Mattijs Korpershoek
2025-10-18  6:07 ` [PATCH v2 0/5] android: add bootconfig support george chan
2025-10-20 13:58   ` Guillaume La Roque
2025-10-20 15:45     ` george chan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=877bwb5960.fsf@kernel.org \
    --to=mkorpershoek@kernel.org \
    --cc=andrew.goodbody@linaro.org \
    --cc=gchan9527@gmail.com \
    --cc=glaroque@baylibre.com \
    --cc=jerome.forissier@linaro.org \
    --cc=jmasson@baylibre.com \
    --cc=me@samcday.com \
    --cc=mfournier@baylibre.com \
    --cc=nbelin@baylibre.com \
    --cc=neil.armstrong@linaro.org \
    --cc=sjg@chromium.org \
    --cc=trini@konsulko.com \
    --cc=u-boot@lists.denx.de \
    --cc=webgeek1234@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.