[PATCH v5 7/7] tests/avocado: Add an avocado test for riscv64

LIU Zhiwei posted 7 patches 4 months, 2 weeks ago
Maintainers: Palmer Dabbelt <palmer@dabbelt.com>, Alistair Francis <alistair.francis@wdc.com>, Bin Meng <bmeng.cn@gmail.com>, Weiwei Li <liwei1518@gmail.com>, Daniel Henrique Barboza <dbarboza@ventanamicro.com>, Liu Zhiwei <zhiwei_liu@linux.alibaba.com>, Cleber Rosa <crosa@redhat.com>, "Philippe Mathieu-Daudé" <philmd@linaro.org>, Wainer dos Santos Moschetta <wainersm@redhat.com>, Beraldo Leal <bleal@redhat.com>
There is a newer version of this series
[PATCH v5 7/7] tests/avocado: Add an avocado test for riscv64
Posted by LIU Zhiwei 4 months, 2 weeks ago
From: TANG Tiancheng <tangtiancheng.ttc@alibaba-inc.com>

To regularly test booting Linux with rv32 on QEMU RV64,
we have added a test to boot_linux_console.py to retrieve
cpuinfo and verify if it shows 'rv32' when using RV64 to
boot rv32 CPUs.

Signed-off-by: TANG Tiancheng <tangtiancheng.ttc@alibaba-inc.com>
Reviewed-by: Liu Zhiwei <zhiwei_liu@linux.alibaba.com>
Acked-by: Alistair Francis <alistair.francis@wdc.com>
---
 tests/avocado/boot_linux_console.py | 38 +++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/tests/avocado/boot_linux_console.py b/tests/avocado/boot_linux_console.py
index c35fc5e9ba..6d2f3b05cb 100644
--- a/tests/avocado/boot_linux_console.py
+++ b/tests/avocado/boot_linux_console.py
@@ -12,6 +12,7 @@
 import lzma
 import gzip
 import shutil
+import time
 
 from avocado import skip
 from avocado import skipUnless
@@ -1545,3 +1546,40 @@ def test_xtensa_lx60(self):
         """
         tar_hash = '49e88d9933742f0164b60839886c9739cb7a0d34'
         self.do_test_advcal_2018('02', tar_hash, 'santas-sleigh-ride.elf')
+
+    def test_riscv64_virt_rv32i(self):
+        """
+        :avocado: tags=arch:riscv64
+        :avocado: tags=machine:virt
+        :avocado: tags=cpu:rv32
+        """
+        kernel_url = ('https://github.com/romanheros/rv32-linux/raw/master/'
+                      'Image32.xz')
+        kernel_hash = 'a7ced5c38722481e0821b7cd70719cf53e46c13b'
+        kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
+
+        kernel_path =  os.path.join(self.workdir, 'kernel.riscv32')
+        archive.lzma_uncompress(kernel_path_xz, kernel_path)
+
+        rootfs_url = ('https://github.com/romanheros/rv32-linux/raw/master/'
+                      'rootfs.ext2.xz')
+        rootfs_hash = 'dc25ab9d4b233e8e0bcf7eb220d56fd2008fe263'
+        rootfs_path_xz = self.fetch_asset(rootfs_url, asset_hash=rootfs_hash)
+
+        rootfs_path =  os.path.join(self.workdir, 'rootfs.riscv32')
+        archive.lzma_uncompress(rootfs_path_xz, rootfs_path)
+
+        self.vm.set_console()
+        kernel_command_line = 'root=/dev/vda ro console=ttyS0'
+        self.vm.add_args('-kernel', kernel_path,
+                         '-append', kernel_command_line,
+                         '-drive', 'file=' + rootfs_path +
+                                   ',format=raw,id=hd0,if=none',
+                         '-device', 'virtio-blk-device,drive=hd0')
+        self.vm.launch()
+
+        console_pattern = 'Welcome to Buildroot'
+        self.wait_for_console_pattern(console_pattern)
+        exec_command(self, 'root')
+        time.sleep(0.1)
+        exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 'rv32i')
-- 
2.25.1
Re: [PATCH v5 7/7] tests/avocado: Add an avocado test for riscv64
Posted by Daniel Henrique Barboza 4 months, 2 weeks ago

On 7/9/24 11:24 PM, LIU Zhiwei wrote:
> From: TANG Tiancheng <tangtiancheng.ttc@alibaba-inc.com>
> 
> To regularly test booting Linux with rv32 on QEMU RV64,
> we have added a test to boot_linux_console.py to retrieve
> cpuinfo and verify if it shows 'rv32' when using RV64 to
> boot rv32 CPUs.
> 
> Signed-off-by: TANG Tiancheng <tangtiancheng.ttc@alibaba-inc.com>
> Reviewed-by: Liu Zhiwei <zhiwei_liu@linux.alibaba.com>
> Acked-by: Alistair Francis <alistair.francis@wdc.com>
> ---
>   tests/avocado/boot_linux_console.py | 38 +++++++++++++++++++++++++++++
>   1 file changed, 38 insertions(+)
> 
> diff --git a/tests/avocado/boot_linux_console.py b/tests/avocado/boot_linux_console.py
> index c35fc5e9ba..6d2f3b05cb 100644
> --- a/tests/avocado/boot_linux_console.py
> +++ b/tests/avocado/boot_linux_console.py
> @@ -12,6 +12,7 @@
>   import lzma
>   import gzip
>   import shutil
> +import time
>   
>   from avocado import skip
>   from avocado import skipUnless
> @@ -1545,3 +1546,40 @@ def test_xtensa_lx60(self):
>           """
>           tar_hash = '49e88d9933742f0164b60839886c9739cb7a0d34'
>           self.do_test_advcal_2018('02', tar_hash, 'santas-sleigh-ride.elf')
> +
> +    def test_riscv64_virt_rv32i(self):
> +        """
> +        :avocado: tags=arch:riscv64
> +        :avocado: tags=machine:virt
> +        :avocado: tags=cpu:rv32
> +        """
> +        kernel_url = ('https://github.com/romanheros/rv32-linux/raw/master/'
> +                      'Image32.xz')
> +        kernel_hash = 'a7ced5c38722481e0821b7cd70719cf53e46c13b'
> +        kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
> +
> +        kernel_path =  os.path.join(self.workdir, 'kernel.riscv32')
> +        archive.lzma_uncompress(kernel_path_xz, kernel_path)
> +
> +        rootfs_url = ('https://github.com/romanheros/rv32-linux/raw/master/'
> +                      'rootfs.ext2.xz')
> +        rootfs_hash = 'dc25ab9d4b233e8e0bcf7eb220d56fd2008fe263'
> +        rootfs_path_xz = self.fetch_asset(rootfs_url, asset_hash=rootfs_hash)
> +
> +        rootfs_path =  os.path.join(self.workdir, 'rootfs.riscv32')
> +        archive.lzma_uncompress(rootfs_path_xz, rootfs_path)
> +
> +        self.vm.set_console()
> +        kernel_command_line = 'root=/dev/vda ro console=ttyS0'
> +        self.vm.add_args('-kernel', kernel_path,
> +                         '-append', kernel_command_line,
> +                         '-drive', 'file=' + rootfs_path +
> +                                   ',format=raw,id=hd0,if=none',
> +                         '-device', 'virtio-blk-device,drive=hd0')
> +        self.vm.launch()
> +
> +        console_pattern = 'Welcome to Buildroot'
> +        self.wait_for_console_pattern(console_pattern)
> +        exec_command(self, 'root')
> +        time.sleep(0.1)
> +        exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 'rv32i')


Nothing wrong with adding a boot_linux_console.py, but if we could add a tuxrun_baselines.py
testsuite instead I think it would be great.

I believe Tuxboot is now the preferable way of testing a distro up to boot in QEMU. We have
all other RISC-V CPU boards and CPUs tested in that framework. It's also faster to run.

Here's a diff adding it:

$ git diff
diff --git a/tests/avocado/tuxrun_baselines.py b/tests/avocado/tuxrun_baselines.py
index 736e4aa289..589c7f254b 100644
--- a/tests/avocado/tuxrun_baselines.py
+++ b/tests/avocado/tuxrun_baselines.py
@@ -533,6 +533,22 @@ def test_riscv64_maxcpu(self):
  
          self.common_tuxrun(csums=sums)
  
+    def test_riscv64_rv32(self):
+        """
+        :avocado: tags=arch:riscv64
+        :avocado: tags=machine:virt
+        :avocado: tags=tuxboot:riscv32
+        :avocado: tags=cpu:rv32
+        """
+        sums = { "Image" :
+                 "89599407d7334de629a40e7ad6503c73670359eb5f5ae9d686353a3d6deccbd5",
+                 "fw_jump.elf" :
+                 "f2ef28a0b77826f79d085d3e4aa686f1159b315eff9099a37046b18936676985",
+                 "rootfs.ext4.zst" :
+                 "7168d296d0283238ea73cd5a775b3dd608e55e04c7b92b76ecce31bb13108cba" }
+
+        self.common_tuxrun(csums=sums)
+
      def test_s390(self):
          """
          :avocado: tags=arch:s390x


$ make check-avocado
(...)
  (01/21) tests/avocado/boot_linux_console.py:BootLinuxConsole.test_riscv64_virt_rv32i: PASS (22.32 s)
(...)
  (14/21) tests/avocado/tuxrun_baselines.py:TuxRunBaselineTest.test_riscv64_rv32: PASS (10.34 s)



Thanks,

Daniel
Re: [PATCH v5 7/7] tests/avocado: Add an avocado test for riscv64
Posted by LIU Zhiwei 4 months, 1 week ago
On 2024/7/12 17:52, Daniel Henrique Barboza wrote:
>
>
> On 7/9/24 11:24 PM, LIU Zhiwei wrote:
>> From: TANG Tiancheng <tangtiancheng.ttc@alibaba-inc.com>
>>
>> To regularly test booting Linux with rv32 on QEMU RV64,
>> we have added a test to boot_linux_console.py to retrieve
>> cpuinfo and verify if it shows 'rv32' when using RV64 to
>> boot rv32 CPUs.
>>
>> Signed-off-by: TANG Tiancheng <tangtiancheng.ttc@alibaba-inc.com>
>> Reviewed-by: Liu Zhiwei <zhiwei_liu@linux.alibaba.com>
>> Acked-by: Alistair Francis <alistair.francis@wdc.com>
>> ---
>>   tests/avocado/boot_linux_console.py | 38 +++++++++++++++++++++++++++++
>>   1 file changed, 38 insertions(+)
>>
>> diff --git a/tests/avocado/boot_linux_console.py 
>> b/tests/avocado/boot_linux_console.py
>> index c35fc5e9ba..6d2f3b05cb 100644
>> --- a/tests/avocado/boot_linux_console.py
>> +++ b/tests/avocado/boot_linux_console.py
>> @@ -12,6 +12,7 @@
>>   import lzma
>>   import gzip
>>   import shutil
>> +import time
>>     from avocado import skip
>>   from avocado import skipUnless
>> @@ -1545,3 +1546,40 @@ def test_xtensa_lx60(self):
>>           """
>>           tar_hash = '49e88d9933742f0164b60839886c9739cb7a0d34'
>>           self.do_test_advcal_2018('02', tar_hash, 
>> 'santas-sleigh-ride.elf')
>> +
>> +    def test_riscv64_virt_rv32i(self):
>> +        """
>> +        :avocado: tags=arch:riscv64
>> +        :avocado: tags=machine:virt
>> +        :avocado: tags=cpu:rv32
>> +        """
>> +        kernel_url = 
>> ('https://github.com/romanheros/rv32-linux/raw/master/'
>> +                      'Image32.xz')
>> +        kernel_hash = 'a7ced5c38722481e0821b7cd70719cf53e46c13b'
>> +        kernel_path_xz = self.fetch_asset(kernel_url, 
>> asset_hash=kernel_hash)
>> +
>> +        kernel_path =  os.path.join(self.workdir, 'kernel.riscv32')
>> +        archive.lzma_uncompress(kernel_path_xz, kernel_path)
>> +
>> +        rootfs_url = 
>> ('https://github.com/romanheros/rv32-linux/raw/master/'
>> +                      'rootfs.ext2.xz')
>> +        rootfs_hash = 'dc25ab9d4b233e8e0bcf7eb220d56fd2008fe263'
>> +        rootfs_path_xz = self.fetch_asset(rootfs_url, 
>> asset_hash=rootfs_hash)
>> +
>> +        rootfs_path =  os.path.join(self.workdir, 'rootfs.riscv32')
>> +        archive.lzma_uncompress(rootfs_path_xz, rootfs_path)
>> +
>> +        self.vm.set_console()
>> +        kernel_command_line = 'root=/dev/vda ro console=ttyS0'
>> +        self.vm.add_args('-kernel', kernel_path,
>> +                         '-append', kernel_command_line,
>> +                         '-drive', 'file=' + rootfs_path +
>> + ',format=raw,id=hd0,if=none',
>> +                         '-device', 'virtio-blk-device,drive=hd0')
>> +        self.vm.launch()
>> +
>> +        console_pattern = 'Welcome to Buildroot'
>> +        self.wait_for_console_pattern(console_pattern)
>> +        exec_command(self, 'root')
>> +        time.sleep(0.1)
>> +        exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 
>> 'rv32i')
>
>
> Nothing wrong with adding a boot_linux_console.py, but if we could add 
> a tuxrun_baselines.py
> testsuite instead I think it would be great.
>
> I believe Tuxboot is now the preferable way of testing a distro up to 
> boot in QEMU. We have
> all other RISC-V CPU boards and CPUs tested in that framework. It's 
> also faster to run.
>
> Here's a diff adding it:
>
> $ git diff
> diff --git a/tests/avocado/tuxrun_baselines.py 
> b/tests/avocado/tuxrun_baselines.py
> index 736e4aa289..589c7f254b 100644
> --- a/tests/avocado/tuxrun_baselines.py
> +++ b/tests/avocado/tuxrun_baselines.py
> @@ -533,6 +533,22 @@ def test_riscv64_maxcpu(self):
>
>          self.common_tuxrun(csums=sums)
>
> +    def test_riscv64_rv32(self):
> +        """
> +        :avocado: tags=arch:riscv64
> +        :avocado: tags=machine:virt
> +        :avocado: tags=tuxboot:riscv32
> +        :avocado: tags=cpu:rv32
> +        """
> +        sums = { "Image" :
> + "89599407d7334de629a40e7ad6503c73670359eb5f5ae9d686353a3d6deccbd5",
> +                 "fw_jump.elf" :
> + "f2ef28a0b77826f79d085d3e4aa686f1159b315eff9099a37046b18936676985",
> +                 "rootfs.ext4.zst" :
> + "7168d296d0283238ea73cd5a775b3dd608e55e04c7b92b76ecce31bb13108cba" }
> +
> +        self.common_tuxrun(csums=sums)
> +
>      def test_s390(self):
>          """
>          :avocado: tags=arch:s390x
>
>
> $ make check-avocado
> (...)
>  (01/21) 
> tests/avocado/boot_linux_console.py:BootLinuxConsole.test_riscv64_virt_rv32i: 
> PASS (22.32 s)
> (...)
>  (14/21) 
> tests/avocado/tuxrun_baselines.py:TuxRunBaselineTest.test_riscv64_rv32: 
> PASS (10.34 s)

Hi Daniel,

Thanks for sharing this test way to us. I'd like to replace our test 
with yours. And this commit will be authored to you.

Thanks,
Zhiwei

>
>
>
> Thanks,
>
> Daniel

Re: [PATCH v5 7/7] tests/avocado: Add an avocado test for riscv64
Posted by Daniel Henrique Barboza 4 months, 1 week ago

On 7/14/24 10:29 PM, LIU Zhiwei wrote:
> 
> On 2024/7/12 17:52, Daniel Henrique Barboza wrote:
>>
>>
>> On 7/9/24 11:24 PM, LIU Zhiwei wrote:
>>> From: TANG Tiancheng <tangtiancheng.ttc@alibaba-inc.com>
>>>
>>> To regularly test booting Linux with rv32 on QEMU RV64,
>>> we have added a test to boot_linux_console.py to retrieve
>>> cpuinfo and verify if it shows 'rv32' when using RV64 to
>>> boot rv32 CPUs.
>>>
>>> Signed-off-by: TANG Tiancheng <tangtiancheng.ttc@alibaba-inc.com>
>>> Reviewed-by: Liu Zhiwei <zhiwei_liu@linux.alibaba.com>
>>> Acked-by: Alistair Francis <alistair.francis@wdc.com>
>>> ---
>>>   tests/avocado/boot_linux_console.py | 38 +++++++++++++++++++++++++++++
>>>   1 file changed, 38 insertions(+)
>>>
>>> diff --git a/tests/avocado/boot_linux_console.py b/tests/avocado/boot_linux_console.py
>>> index c35fc5e9ba..6d2f3b05cb 100644
>>> --- a/tests/avocado/boot_linux_console.py
>>> +++ b/tests/avocado/boot_linux_console.py
>>> @@ -12,6 +12,7 @@
>>>   import lzma
>>>   import gzip
>>>   import shutil
>>> +import time
>>>     from avocado import skip
>>>   from avocado import skipUnless
>>> @@ -1545,3 +1546,40 @@ def test_xtensa_lx60(self):
>>>           """
>>>           tar_hash = '49e88d9933742f0164b60839886c9739cb7a0d34'
>>>           self.do_test_advcal_2018('02', tar_hash, 'santas-sleigh-ride.elf')
>>> +
>>> +    def test_riscv64_virt_rv32i(self):
>>> +        """
>>> +        :avocado: tags=arch:riscv64
>>> +        :avocado: tags=machine:virt
>>> +        :avocado: tags=cpu:rv32
>>> +        """
>>> +        kernel_url = ('https://github.com/romanheros/rv32-linux/raw/master/'
>>> +                      'Image32.xz')
>>> +        kernel_hash = 'a7ced5c38722481e0821b7cd70719cf53e46c13b'
>>> +        kernel_path_xz = self.fetch_asset(kernel_url, asset_hash=kernel_hash)
>>> +
>>> +        kernel_path =  os.path.join(self.workdir, 'kernel.riscv32')
>>> +        archive.lzma_uncompress(kernel_path_xz, kernel_path)
>>> +
>>> +        rootfs_url = ('https://github.com/romanheros/rv32-linux/raw/master/'
>>> +                      'rootfs.ext2.xz')
>>> +        rootfs_hash = 'dc25ab9d4b233e8e0bcf7eb220d56fd2008fe263'
>>> +        rootfs_path_xz = self.fetch_asset(rootfs_url, asset_hash=rootfs_hash)
>>> +
>>> +        rootfs_path =  os.path.join(self.workdir, 'rootfs.riscv32')
>>> +        archive.lzma_uncompress(rootfs_path_xz, rootfs_path)
>>> +
>>> +        self.vm.set_console()
>>> +        kernel_command_line = 'root=/dev/vda ro console=ttyS0'
>>> +        self.vm.add_args('-kernel', kernel_path,
>>> +                         '-append', kernel_command_line,
>>> +                         '-drive', 'file=' + rootfs_path +
>>> + ',format=raw,id=hd0,if=none',
>>> +                         '-device', 'virtio-blk-device,drive=hd0')
>>> +        self.vm.launch()
>>> +
>>> +        console_pattern = 'Welcome to Buildroot'
>>> +        self.wait_for_console_pattern(console_pattern)
>>> +        exec_command(self, 'root')
>>> +        time.sleep(0.1)
>>> +        exec_command_and_wait_for_pattern(self, 'cat /proc/cpuinfo', 'rv32i')
>>
>>
>> Nothing wrong with adding a boot_linux_console.py, but if we could add a tuxrun_baselines.py
>> testsuite instead I think it would be great.
>>
>> I believe Tuxboot is now the preferable way of testing a distro up to boot in QEMU. We have
>> all other RISC-V CPU boards and CPUs tested in that framework. It's also faster to run.
>>
>> Here's a diff adding it:
>>
>> $ git diff
>> diff --git a/tests/avocado/tuxrun_baselines.py b/tests/avocado/tuxrun_baselines.py
>> index 736e4aa289..589c7f254b 100644
>> --- a/tests/avocado/tuxrun_baselines.py
>> +++ b/tests/avocado/tuxrun_baselines.py
>> @@ -533,6 +533,22 @@ def test_riscv64_maxcpu(self):
>>
>>          self.common_tuxrun(csums=sums)
>>
>> +    def test_riscv64_rv32(self):
>> +        """
>> +        :avocado: tags=arch:riscv64
>> +        :avocado: tags=machine:virt
>> +        :avocado: tags=tuxboot:riscv32
>> +        :avocado: tags=cpu:rv32
>> +        """
>> +        sums = { "Image" :
>> + "89599407d7334de629a40e7ad6503c73670359eb5f5ae9d686353a3d6deccbd5",
>> +                 "fw_jump.elf" :
>> + "f2ef28a0b77826f79d085d3e4aa686f1159b315eff9099a37046b18936676985",
>> +                 "rootfs.ext4.zst" :
>> + "7168d296d0283238ea73cd5a775b3dd608e55e04c7b92b76ecce31bb13108cba" }
>> +
>> +        self.common_tuxrun(csums=sums)
>> +
>>      def test_s390(self):
>>          """
>>          :avocado: tags=arch:s390x
>>
>>
>> $ make check-avocado
>> (...)
>>  (01/21) tests/avocado/boot_linux_console.py:BootLinuxConsole.test_riscv64_virt_rv32i: PASS (22.32 s)
>> (...)
>>  (14/21) tests/avocado/tuxrun_baselines.py:TuxRunBaselineTest.test_riscv64_rv32: PASS (10.34 s)
> 
> Hi Daniel,
> 
> Thanks for sharing this test way to us. I'd like to replace our test with yours. And this commit will be authored to you.

Feel free to use this diff. A "Suggested-by" reference in my name is enough :D


Thanks,

Daniel

> 
> Thanks,
> Zhiwei
> 
>>
>>
>>
>> Thanks,
>>
>> Daniel