Linux Test Project 是由SGI、OSDL和Bull开发和维护的一个项目,由IBM、思科、富士通、SUSE、Red Hat、Oracle和其他公司共同开发和维护。该项目的目标是向开源社区提供测试用例,以验证Linux的可靠性、健壮性和稳定性。
而我们可以用这套程序来作为FPGA CPU验证的拷机程序。
项目主页:https://linux-test-project.github.io/
Install
由于我们需要运行于riscv架构的CPU,所以需要交叉编译。
1 | $ git clone https://github.com/linux-test-project/ltp.git |
编译完成后,将在/tmp/ltp目录产生runltp
和testcases
等文件。
Porting
由于默认编译会把绝大部分的用例都编译出来,总共有大概1GB,为了前期验证,我们不需要这么多用例,而在配置选项里没有发现可以缩减用例的选项。只能动手改Makefile了。
修改testcases/Makefile
,增加FILTER_OUT_DIRS,把希望去掉的目录添加进去。去掉下面的之后就只剩下kernel了。
1 | # ----------- |
修改testcases/kernel/Makefile
,去掉下面的之后,就只剩下syscalls了。
1 | # ----------- |
去掉之后还是有很多用例,可以继续修改testcases/kernel/syscalls/Makefile
。
Library
编译出测试集后,把他们拷贝到SD卡,让FPGA mount上之后,就可以直接运行了。
但是运行时出现命令找不到,即使直接运行也不行。
1 | $ cd testcases/bin/ |
原因是这些ELF是依赖lib的,而busybox创建的rootfs里没有这些库。
把编译器路径下的sysroot拷贝到SD卡
1 | $ which riscv64-unknown-linux-gnu-gcc |
然后再把SD卡插入FPGA,并在启动后把lib给link过去。
1 | $ rm -rf /lib |
再次运行命令,应该就可以了。
Run
运行所有用例:
1 | $ cd /tmp/ltp |
运行特定测试套件
1 | $ ./runltp -f syscalls |
直接运行单个用例
1 | $ cd testcases/bin/ |
帮助
1 | $ ./runltp --help |