在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'添加到内核命令行中就行。当然,只是直接翻译别人的注释,没验证过。

更多相关文章

  1. Android下的文件访问权限
  2. 【Android高级】DexClassloader和PathClassloader动态加载插件的
  3. Android 读取raw下的txt文件
  4. Android studio cmd命令行操作数据库文件导出,导入
  5. Android中的文件的读取方法
  6. android的文件存储
  7. Android之SystemUI加载流程和NavigationBar的分析
  8. 修改Android签名文件keystore作为eclipse默认debug签名文件
  9. android sdk 版本问题 R文件问题

随机推荐

  1. Android按键响应之初见
  2. android入门:zxing学习笔记
  3. Android 4.2 webview注入js对象时需要注
  4. 企业开发与Android
  5. Android音频开发(3):如何播放一帧音频
  6. android java代码调用linux命令续
  7. 关于Android软件盘的显示与隐藏的问题
  8. 《IT蓝豹》android 7种网络连接方式
  9. Android GPS学习笔记—HAL实现
  10. Android跨进程通信-IPC初探(三) - 使用AI