linux_test_project

Linux Test Project 是由SGI、OSDL和Bull开发和维护的一个项目,由IBM、思科、富士通、SUSE、Red Hat、Oracle和其他公司共同开发和维护。该项目的目标是向开源社区提供测试用例,以验证Linux的可靠性、健壮性和稳定性。

而我们可以用这套程序来作为FPGA CPU验证的拷机程序。

项目主页:https://linux-test-project.github.io/

Install

由于我们需要运行于riscv架构的CPU,所以需要交叉编译。

1
2
3
4
5
6
$ git clone https://github.com/linux-test-project/ltp.git
$ cd ltp
$ make autotools
$ ./configurate --host=riscv64-unknown-linux-gnu CC=riscv64-unknown-linux-gnu-gcc --prefix=/tmp/ltp
$ make -j32
$ make install -j32

编译完成后,将在/tmp/ltp目录产生runltptestcases等文件。

Porting

由于默认编译会把绝大部分的用例都编译出来,总共有大概1GB,为了前期验证,我们不需要这么多用例,而在配置选项里没有发现可以缩减用例的选项。只能动手改Makefile了。

修改testcases/Makefile,增加FILTER_OUT_DIRS,把希望去掉的目录添加进去。去掉下面的之后就只剩下kernel了。

1
2
3
4
5
# -----------
# add by francis
FILTER_OUT_DIRS += cve lib misc network open_posix_testsuite realtime
# -----------
include $(top_srcdir)/include/mk/generic_trunk_target.mk

修改testcases/kernel/Makefile,去掉下面的之后,就只剩下syscalls了。

1
2
3
4
5
6
7
# -----------
# add by francis
FILTER_OUT_DIRS += containers controllers crypto device-drivers firmware \
fs hotplug input io ipc logging mem numa pty sched security \
sound tracing uevents power_management
# -----------
include $(top_srcdir)/include/mk/generic_trunk_target.mk

去掉之后还是有很多用例,可以继续修改testcases/kernel/syscalls/Makefile

Library

编译出测试集后,把他们拷贝到SD卡,让FPGA mount上之后,就可以直接运行了。

但是运行时出现命令找不到,即使直接运行也不行。

1
2
3
$ cd testcases/bin/
$ ./abort01
/bin/ash - abort01 No found

原因是这些ELF是依赖lib的,而busybox创建的rootfs里没有这些库。

把编译器路径下的sysroot拷贝到SD卡

1
2
3
$ which riscv64-unknown-linux-gnu-gcc
/home/francis.zheng/rv64-gcc-gc/bin/riscv64-unknown-linux-gnu-gcc
$ cp -rf /home/francis.zheng/rv64-gcc-gc/sysroot /sd/

然后再把SD卡插入FPGA,并在启动后把lib给link过去。

1
2
$ rm -rf /lib
$ ln -s /mnt/sysroot/lib /lib

再次运行命令,应该就可以了。

Run

运行所有用例:

1
2
$ cd /tmp/ltp
$ ./runltp

运行特定测试套件

1
2
$ ./runltp -f syscalls
$ ./runltp -f syscalls -s madvise

直接运行单个用例

1
2
$ cd testcases/bin/
$ ./abort01 -i 10

帮助

1
$ ./runltp --help