解决xts执行ActsToolChainTest失败
解决xts执行ActsToolChainTest失败 1.关键字 ActsToolChainTest;getauxval;open;xts; 2.问题描述 xts在执行方舟工具链 ActsToolChainTest 套件时,third_party/musl/libc-test/src/functionalext/supplement/fcntl/open 及third_party/musl/li
解决xts执行ActsToolChainTest失败
1.关键字
ActsToolChainTest;getauxval;open;xts;
2.问题描述
xts在执行方舟工具链 ActsToolChainTest 套件时,
third_party/musl/libc-test/src/functionalext/supplement/fcntl/open 及
third_party/musl/libc-test/src/functionalext/supplement/misc/getauxval 套件执行失败。其中 Open 套件执行时,int fd = open(path, O_RDONLY + O_CREAT); 返回 fd 为3 非期待值4。getauxval 套件 getauxval_0300 执行失败,getauxval 返回 0 。
3.问题原因
3.1 正常机制
open()返回4;
getauxval()返回非0;
3.2 异常机制
open()返回3;
getauxval()返回0;
4.解决方案
4.1 open()失败分析
针对open()返回3,可以在rk3568中使用shell命令查看fd描述符的使用情况:
ls -l /proc/$$/fd //查看当前进程使用的文件描述符
echo $$ //查看当前进程
ps -ef | grep $$
查找当前进程的父进程,可以看到rk3568文件描述符3在hdcd中使用
由于在oh系统中,文件描述符是一种用于标识和操作文件或其他I/O资源的整数。文件描述符0、1、2是预留给标准输入、标准输出和标准错误输出的文件描述符。所以open()函数返回4,用例已经写成固定值4;针对于不同于rk3568的情况,涉及到后续的设备兼容情况,修改xts用例。
4.2 getauxval_0300() 失败分析
针对getauxval_0300()返回0的情况,third_party\musl\libc-test\src\functionalext\supplement\misc\getauxval.c对于源码进行查看:
void getauxval_0300(void)
{
unsigned long int result;
result = getauxval(AT_SYSINFO_EHDR);
EXPECT_TRUE("getauxval_0300", result != 0);
}
发现是在获取AT_SYSINFO_EHDR这个值:AT_SYSINFO_EHDR是一个系统调用参数,用于获取当前进程的ELF头信息。ELF(Executable and Linkable Format)是一种可执行文件格式,常用于Linux和Unix系统中。AT_SYSINFO_EHDR参数可以用于获取当前进程的ELF头信息,包括程序入口地址、程序头表、节区头表等信息。这些信息对于程序的调试和运行都非常重要。
要在Linux 64位系统中获取AT_SYSINFO_EHDR的值,需要内核打开CONFIG_IA32_EMULATION和CONFIG_COMPAT两个开关。
CONFIG_IA32_EMULATION选项允许64位内核在32位模式下运行,以便支持32位应用程序。而CONFIG_COMPAT选项则允许内核在64位模式下运行32位应用程序,并提供了一些兼容性支持。
AT_SYSINFO_EHDR是一个特殊的辅助向量,它包含了一个指向系统调用接口的ELF头部的指针。这个指针可以用来确定系统调用的入口点,从而在64位系统上运行32位应用程序时,可以正确地调用系统调用。
因此,要获取AT_SYSINFO_EHDR的值,需要确保内核已经打开了CONFIG_IA32_EMULATION和CONFIG_COMPAT两个选项。
举个例子可以使用shell命令 查看 是否开启:
zcat /proc/config.gz | grep CONFIG_IA32_EMULATION
例如:输出结果为 CONFIG_IA32_EMULATION=y
,则表示该内核开关已经打开。
还有其他相关的内核:
CONFIG_PROC_PAGE_MONITOR 和 CONFIG_ELF_CORE,CONFIG_PROC_FS;
5.定位过程
设备环境
板子型号:rk3566
源码版本:码云社区3.2Rlease
windows系统中python版本:3.8 以上
源码编译系统:linux系统或者ubuntu系统XTS测试步骤
- 码云社区下载最新OpenHarmony 3.2Release源码:
- 在OpenHarmony 3.2Release源码根目录下,cd test/xts/acts
- 编译acts:./build.sh product_name=rk3568 system_size=standard
- 将编译生成OpenHarmony_3.2Re\out\rk3568\suites\acts 目录拷贝到windows系统下;
- 修改xts\acts\config目录下的user_config.xml,
ip:127.0.0.1
port:8710
sn:xxxxxxxxxxxx //hdc list targets 查看sn号,填入; - 然后执行acts目录下run.bat脚本,脚本执行成功后,单独测试:run -l ActsToolChainTest
6.知识分享
1.不同的设备可能open函数返回的文件描述符会不一样,这一点需要自己调试一下。
2.getauxval()根据参数的不同,获取进程信息也会有所差别,这一点内核配置相关。
更多推荐
所有评论(0)