Android固件加载出错(load failed with error -2)
16lz
2022-08-04
在Android下移植一个降噪模块到另一个平台,需要加载固件的时候报错
[ 137.659357] xxxxx 0-002c: Direct firmware load failed with error -2
[ 137.665773] xxxxx 0-002c: Falling back to user helper
查看-2代表的错误码可知,-2代表找不到文件,可是文件的确在/system/lib/firmware下,为什么找不到呢?
#defineEPERM 1/* Operation not permitted */#defineENOENT 2/* No such file or directory */#defineESRCH 3/* No such process */#defineEINTR 4/* Interrupted system call */#defineEIO 5/* I/O error */#defineENXIO 6/* No such device or address */#defineE2BIG 7/* Argument list too long */#defineENOEXEC 8/* Exec format error */#defineEBADF 9/* Bad file number */#defineECHILD10/* No child processes */#defineEAGAIN11/* Try again */#defineENOMEM12/* Out of memory */#defineEACCES13/* Permission denied */#defineEFAULT14/* Bad address */#defineENOTBLK15/* Block device required */#defineEBUSY16/* Device or resource busy */#defineEEXIST17/* File exists */#defineEXDEV18/* Cross-device link */#defineENODEV19/* No such device */#defineENOTDIR20/* Not a directory */#defineEISDIR21/* Is a directory */#defineEINVAL22/* Invalid argument */#defineENFILE23/* File table overflow */#defineEMFILE24/* Too many open files */#defineENOTTY25/* Not a typewriter */#defineETXTBSY26/* Text file busy */#defineEFBIG27/* File too large */#defineENOSPC28/* No space left on device */#defineESPIPE29/* Illegal seek */#defineEROFS30/* Read-only file system */#defineEMLINK31/* Too many links */#defineEPIPE32/* Broken pipe */#defineEDOM33/* Math argument out of domain of func */#defineERANGE34/* Math result not representable */
找到driver/base/firmware_class.c文件,可以看到
static char fw_path_para[256];static const char * const fw_path[] = {fw_path_para,"/lib/firmware/updates/" UTS_RELEASE,"/lib/firmware/updates","/lib/firmware/" UTS_RELEASE,"/lib/firmware"};/* * Typical usage is that passing 'firmware_class.path=$CUSTOMIZED_PATH' * from kernel command line because firmware_class is generally built in * kernel instead of module. */module_param_string(path, fw_path_para, sizeof(fw_path_para), 0644);MODULE_PARM_DESC(path, "customized firmware image search path with a higher priority than default path");原来固件的位置不对,在Android的文件系统下,並没有lib文件夹啊,当然通过软链接的方式实现固件加载,在init.rc中将/system/lib/软链接(symlink)到/lib
当然,直接修改源码,想从什么路径进行加载都行啊。还有一个路径,fw_path_path就是读取内核命令行(/proc/cmdline)指定的固件路径,将firmware_class.path=$CUSTOMIZED_PATH'添加到内核命令行中就行。当然,只是直接翻译别人的注释,没验证过。
更多相关文章
- Pycharm安装PyQt5的详细教程
- NPM 和webpack 的基础使用
- 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
- 读取android手机流量信息
- android 使用html5作布局文件: webview跟javascript交互
- Android(安卓)多媒体扫描过程(Android(安卓)Media Scanner Proces
- android“设置”里的版本号
- Android开发环境搭建
- Android(安卓)Resource介绍和使用