Message ID | 20240710022430.1306-8-zhiwei_liu@linux.alibaba.com |
---|---|
State | New |
Headers | show |
Series | target/riscv: Expose RV32 cpu to RV64 QEMU | expand |
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
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
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
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')