Ubuntu20.04运行kselftest_deps.sh报alsa依赖检查失败解决方案咨询
问题根因
这个报错和系统有没有装ALSA开发包、源码目录里有没有alsa.pc没有关系,本质是kselftest_deps.sh脚本的依赖解析逻辑存在缺陷:它做Makefile依赖扫描的时候,只会按空白符拆分内容逐行匹配,完全不识别GNU Make的$(shell ...)函数语法,直接把$(shell pkg-config --libs alsa)这一整行函数调用拆成了$(shell、pkg-config、--libs、alsa)四个独立的字符串,挨个判定为缺失依赖抛出FAIL提示。
就算你装对了libasound2-dev包,alsa.pc已经在系统pkg-config路径下,只要脚本没改,这个报错都会出现。
正确处理方案
- 先确认ALSA依赖确实安装正常:执行
dpkg -L libasound2-dev | grep alsa.pc,正常输出会包含类似/usr/lib/x86_64-linux-gnu/pkgconfig/alsa.pc的路径,如果没有输出就执行sudo apt update && sudo apt install --reinstall libasound2-dev重装依赖即可。 - 这个依赖检查的报错属于误报,完全不影响实际自测用例的编译运行:只要pkg-config能正常检索到alsa的配置文件,进入
tools/testing/selftests/alsa目录执行make,就能正常编译所有ALSA相关的自测用例,不需要修改任何源码文件。 - 如果想要彻底消除检查阶段的误报,不要修改业务侧Makefile,直接修改
kselftest_deps.sh的解析逻辑,增加对Make$(shell)函数片段的过滤跳过即可;临时规避的话也可以在执行检查时跳过alsa模块的检查。
注释Makefile配置行的可行性判定
- 如果你本身不需要编译、运行ALSA相关的内核自测用例,注释这两行配置属于可行的临时方案,不会对其他模块的依赖检查、编译运行造成任何影响。
- 如果你后续需要运行ALSA相关的kselftest用例,绝对不能注释这两行:这两行配置是用来给编译阶段指定ALSA头文件路径、给链接阶段指定ALSA库路径的,注释之后会直接导致ALSA测试用例编译失败,提示找不到头文件或者链接符号。
内容的提问来源于stack exchange,提问作者li_jessen
相关产品推荐
相关产品推荐

