qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [RFC PATCH 4/4] tests/acceptance: Test U-Boot/Linux from Armbian 20.


From: Niek Linnenbank
Subject: Re: [RFC PATCH 4/4] tests/acceptance: Test U-Boot/Linux from Armbian 20.08 on Orange Pi PC
Date: Mon, 26 Oct 2020 00:35:33 +0100

Hi Bin,

On Sun, Oct 25, 2020 at 3:17 AM Bin Meng <bmeng.cn@gmail.com> wrote:
Hi Niek,

On Sun, Oct 25, 2020 at 5:01 AM Niek Linnenbank
<nieklinnenbank@gmail.com> wrote:
>
> Hi Philippe,
>
> I have ran this series with the new Armbian 20.08 test and noticed this failure:
>
> -console: /dev/mmcblk0p1: The filesystem size (according to the superrandom: fast init done
> console: block) is 264192 blocks
> console: The physical size of the device is 261120 blocks
> console: Either the superblock or the partition table is likely to be corrupt!
> console: /dev/mmcblk0p1: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
> console: (i.e., without -a or -p options)
> console: fsck exited with status code 4
> console: done.
> console: Failure: File system check of the root filesystem failed
> console: The root filesystem on /dev/mmcblk0p1 requires a manual fsck
> |console: BusyBox v1.27.2 (Ubuntu 1:1.27.2-2ubuntu3.2) built-in shell (ash)
> console: Enter 'help' for a list of built-in commands.
> INTERRUPTED: Test interrupted by SIGTERM\nRunner error occurred: Timeout reached\nOriginal status: ERROR\n{'name': '5-tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_arm_orangepi_bionic_20_08', 'logdir': '/home/fox/avocado/job-results/job-2020-10-24T22.25-39... (90.47 s)
>
> When I run the image manually I get the same error, but only if I resize the 20.08 image to 2G. If resized to 4G, the
> 20.08 image boots fine.
>
> Additionally, I noticed that the NetBSD 9.0 test has the same problem, even in current master (4c5b97bfd0dd54dc27717ae8d1cd10e14eef1430):
>
>    (5/5) tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_arm_orangepi_uboot_netbsd9: |console: U-Boot SPL 2020.01+dfsg-1 (Jan 08 2020 - 08:19:44 +0000)
> console: DRAM: 1024 MiB
> console: Failed to set core voltage! Can't set CPU frequency
> /console: Trying to boot from MMC1
> console: U-Boot 2020.01+dfsg-1 (Jan 08 2020 - 08:19:44 +0000) Allwinner Technology
> ...
> console: Starting kernel ...
> console: [   1.0000000] NetBSD/evbarm (fdt) booting ...
> ...
> console: [   1.3300167] sdmmc0: SD card status: 4-bit, C0
> console: [   1.3300167] ld0 at sdmmc0: <0xaa:0x5859:QEMU!:0x01:0xdeadbeef:0x062>
> console: [   1.3430678] ld0: 1024 MB, 1040 cyl, 32 head, 63 sec, 512 bytes/sect x 2097152 sectors
> console: [   1.4102580] ld0: 4-bit width, High-Speed/SDR25, 50.000 MHz
> console: [   2.0674392] WARNING: 4 errors while detecting hardware; check system log.
> console: [   2.0674392] boot device: ld0
> console: [   2.0775401] root on ld0a dumps on ld0b
> console: [   2.0977679] vfs_mountroot: can't open root device
> console: [   2.0977679] cannot mount root, error = 6
> INTERRUPTED: Test interrupted by SIGTERM\nRunner error occurred: Timeout reached\nOriginal status: ERROR\n{'name': '5-tests/acceptance/boot_linux_console.py:BootLinuxConsole.test_arm_orangepi_uboot_netbsd9', 'l>
>
> To resolve this error, I made a small patch that expands the SD image in both tests to the next power-of-two multiplied by 2:
>
> diff --git a/tests/acceptance/boot_linux_console.py b/tests/acceptance/boot_linux_console.py
> index b604cfe7da..40835904bb 100644
> --- a/tests/acceptance/boot_linux_console.py
> +++ b/tests/acceptance/boot_linux_console.py
> @@ -35,11 +35,11 @@ def pow2ceil(x):
>      return 1 if x == 0 else 2**(x - 1).bit_length()
>
>  """
> -Expand file size to next power of 2
> +Expand file size to next power of 2 or higher
>  """
> -def image_pow2ceil_expand(path):
> +def image_pow2ceil_expand(path, multiply_factor = 1):
>          size = os.path.getsize(path)
> -        size_aligned = pow2ceil(size)
> +        size_aligned = pow2ceil(size) * multiply_factor
>          if size != size_aligned:
>              with open(path, 'ab+') as fd:
>                  fd.truncate(size_aligned)
> @@ -850,7 +850,7 @@ class BootLinuxConsole(LinuxKernelTest):
>          image_path_xz = self.fetch_asset(image_url, asset_hash=image_hash,
>                                           algorithm='sha256')
>          image_path = archive.extract(image_path_xz, self.workdir)
> -        image_pow2ceil_expand(image_path)
> +        image_pow2ceil_expand(image_path, 2)
>
>          self.do_test_arm_orangepi_uboot_armbian(image_path)
>
> @@ -879,7 +879,7 @@ class BootLinuxConsole(LinuxKernelTest):
>          image_path_gz = self.fetch_asset(image_url, asset_hash=image_hash)
>          image_path = os.path.join(self.workdir, 'armv7.img')
>          archive.gzip_uncompress(image_path_gz, image_path)
> -        image_pow2ceil_expand(image_path)
> +        image_pow2ceil_expand(image_path, 2)
>          image_drive_args = 'if=sd,format=raw,snapshot=on,file=' + image_path
>
>          # dd if=u-boot-sunxi-with-spl.bin of=armv7.img bs=1K seek=8 conv=notrunc
>
> After applying that change, all Orange Pi tests run successfully:
>
> $ AVOCADO_ALLOW_LARGE_STORAGE=yes ARMBIAN_ARTIFACTS_CACHED=yes avocado --show=app,console run -t machine:orangepi-pc tests/acceptance/boot_linux_console.py

This command does not work for me.

Traceback (most recent call last):
  File "/usr/local/bin/avocado", line 5, in <module>
    from avocado.core.main import main
  File "/usr/local/lib/python3.8/dist-packages/avocado/core/main.py",
line 22, in <module>
    from avocado.core import data_dir
  File "/usr/local/lib/python3.8/dist-packages/avocado/core/data_dir.py",
line 39, in <module>
    from .output import LOG_JOB, LOG_UI
  File "/usr/local/lib/python3.8/dist-packages/avocado/core/output.py",
line 27, in <module>
    from .settings import settings
  File "/usr/local/lib/python3.8/dist-packages/avocado/core/settings.py",
line 625, in <module>
    settings = Settings()  # pylint: disable-msg=invalid-name
  File "/usr/local/lib/python3.8/dist-packages/avocado/core/settings.py",
line 274, in __init__
    self._prepare_base_dirs()
  File "/usr/local/lib/python3.8/dist-packages/avocado/core/settings.py",
line 315, in _prepare_base_dirs
    self._config_path_pkg = resource_filename('avocado', config_pkg_base)
  File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py",
line 1145, in resource_filename
    return get_provider(package_or_requirement).get_resource_filename(
  File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py",
line 365, in get_provider
    return _find_adapter(_provider_factories, loader)(module)
  File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py",
line 1393, in __init__
    self.module_path = os.path.dirname(getattr(module, '__file__', ''))
  File "/usr/lib/python3.8/posixpath.py", line 152, in dirname
    p = os.fspath(p)
TypeError: expected str, bytes or os.PathLike object, not NoneType

I haven't got a command to work on testing only a single target. Any
hint? Thanks!

That error is new to me, I have not seen it before. From the stacktrace, it looks like that avocado is trying to read its own configuration / settings file (from settings.py).
Later on there is a type conversion error for NoneType. Perhaps the avocado files for your user have somehow got corrupted?
You could try to remove them from your home directory and/or re-install avocado as well and start out fresh.
I assume that at least 'avocado --help'  should work without generating this error.

Also it may be useful to know that it looks like you need to run avocado from within the new 'build' directory that the new meson build system now creates.
If not running from the 'build' directory, I'm getting this printed on my machine:
  CANCEL: No QEMU binary defined or found in the build tree

So once your avocado is working without the type error you could try this:

1) cd build
2) AVOCADO_ALLOW_LARGE_STORAGE=yes ARMBIAN_ARTIFACTS_CACHED=yes avocado --show=app,console run -t machine:orangepi-pc tests/acceptance/boot_linux_console.py

Alternatively, if you can't get avocado to run anything, you could also just run the Armbian image (or any other image) directly via qemu-system-arm:

  $ build/arm-softmmu/qemu-system-arm -M orangepi-pc -nographic -nic user -sd Armbian_20.08.1_Orangepipc_bionic_current_5.8.5.img
  U-Boot SPL 2020.04-armbian (Sep 02 2020 - 10:16:13 +0200)
  DRAM: 1024 MiB
  ...
  Autoboot in 1 seconds, press <Space> to stop
  => setenv extraargs 'console=ttyS0,115200'
  => boot
  ...
  Uncompressing Linux... done, booting the kernel.
  Loading, please wait...
  starting version 237

Also see the file docs/system/arm/orangepi.rst with some additional information and documentation.

Hope this helps & regards,

Niek
 

> ...
> RESULTS    : PASS 6 | ERROR 0 | FAIL 0 | SKIP 0 | WARN 0 | INTERRUPT 0 | CANCEL 0
> JOB TIME   : 161.69 s
>
> I will send this as a separate patch to the list shortly, so you can consider adding it to the series (feel free to modify it where needed).
>

Regards,
Bin


--
Niek Linnenbank


reply via email to

[Prev in Thread] Current Thread [Next in Thread]