在Ubuntu 18.04 上執行riscv-torture (run riscv-torture on Ubuntu 18.04)

riscv-torture介紹

基本上就是一個個產生類隨機組合語言的RISCV測試工具。主要流程為產生random test 組合語言程式,接下來透過riscv-isa-sim先執行過取得signature(general purpose register的結果),然後與待測核心(DUT)的general purpose register執行結果做比較來驗證核心的正確性。

riscv-torture在riscv發展史上算是偏早期的工具,因此他的相依性有時會遇到點問題。他master上的sbt版本還是0.3.8版,現在sbt已經出到1.3.x版了,此外他的執行方式相依於java,這算是意料之內,因為他是透過scala寫成的。

在Ubuntu 18.04執行riscv-torture

首先先安裝openjdk-8-jdk和openjdk-8-jre用以執行sbt。

$ sudo apt install openjdk-8-jre openjdk-8-jdk

若有版本多個java版本可以透過以下指令選擇到openjdk-8:

$ sudo update-alternatives --config java

若有java key的問題,可以更新ca:

sudo update-ca-certificates -f

接下來下載riscv-torture

$ git clone https://github.com/ucb-bar/riscv-torture --recursive

在執行後可能會遇到一些問題,例如:

java -Xmx1G -Xss8M -XX:MaxPermSize=128M -jar sbt-launch.jar 'generator/run '
OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=128M; support was removed in 8.0
Getting org.scala-sbt sbt 0.13.8 ...

:: problems summary ::
:::: WARNINGS
		module not found: org.scala-sbt#sbt;0.13.8

	==== local: tried

	  /home/user/.ivy2/local/org.scala-sbt/sbt/0.13.8/ivys/ivy.xml

	==== typesafe-ivy-releases: tried

	  http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/sbt/0.13.8/ivys/ivy.xml

	==== Maven Central: tried

	  http://repo1.maven.org/maven2/org/scala-sbt/sbt/0.13.8/sbt-0.13.8.pom

		::::::::::::::::::::::::::::::::::::::::::::::

		::          UNRESOLVED DEPENDENCIES         ::

		::::::::::::::::::::::::::::::::::::::::::::::

		:: org.scala-sbt#sbt;0.13.8: not found

		::::::::::::::::::::::::::::::::::::::::::::::


:::: ERRORS
	Server access Error: Connection refused (Connection refused) url=http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/sbt/0.13.8/ivys/ivy.xml

	SERVER ERROR: HTTPS Required url=http://repo1.maven.org/maven2/org/scala-sbt/sbt/0.13.8/sbt-0.13.8.pom


:: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS
unresolved dependency: org.scala-sbt#sbt;0.13.8: not found
Error during sbt execution: Error retrieving required libraries
  (see /home/user/.sbt/boot/update.log for complete log)
Error: Could not retrieve sbt 0.13.8
Makefile:23: recipe for target 'gen' failed
make: *** [gen] Error 1

這是因為他會去http://repo1.maven.org/maven2找sbt來下載,但是riscv-torture的sbt版本太舊,http://repo1.maven.org/maven2這個repo沒有(只有0.99版以上),因此無法取得。此外這個repo現在只接受https,因此會有問題(https是世界潮流阿)。這時需要在家目錄下的.sbt資料夾中新增repositories檔案如下:

[repositories]
  typesafe-ivy-releases: https://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
  maven-central: https://repo1.maven.org/maven2/
  sonatype-snapshots: https://oss.sonatype.org/content/repositories/snapshots

這樣可以讓他下載相依性時去找https://repo.typesafe.com/typesafe/ivy-releases 這repo下載較舊版本的sbt。 接下來在riscv-torture 資料夾下make產生測試資料:

$ make gen

或是產生完整的測試資料與對應正解,此target必須先安裝riscv64-unknown-elf-gcc:

$ make igentest

產生riscv32的測試資料

由於riscv-torture預設只支援riscv64,因此要使用其產生riscv32的測試資料必須修改原始碼,這部份可以參考picorv32的patch來修改,patch在此連結:https://github.com/cliffordwolf/picorv32/blob/master/scripts/torture/riscv-torture-rv32.diff,若是對內容有興趣也可以參考picorv32作者cliffordwolf與ucb-bar的團隊討論:https://github.com/ucb-bar/riscv-torture/issues/6

Arch Linux上安裝

基本上裝完java和jdk後就可以直接跑了,不會有什麼問題,如果有問題也可以按照以上方法更改repositories。

Reference

https://www.scala-sbt.org/1.x/docs/Launcher-Configuration.html#Example

comments powered by Disqus