在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. Pycharm安装PyQt5的详细教程
  2. NPM 和webpack 的基础使用
  3. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  4. 读取android手机流量信息
  5. android 使用html5作布局文件: webview跟javascript交互
  6. Android(安卓)多媒体扫描过程(Android(安卓)Media Scanner Proces
  7. android“设置”里的版本号
  8. Android开发环境搭建
  9. Android(安卓)Resource介绍和使用

随机推荐

  1. Android之SurfaceView简介(三)
  2. 谁说Android的动画不廉价(五)之水波纹动画
  3. 深入探讨 Android(安卓)传感器
  4. Android(安卓)如何检索Android设备的唯一
  5. [Android] 基于 Linux 命令行构建 Androi
  6. Android(安卓): 输入设备键值从底层到应
  7. 鸿洋,郭霖:2020学会这几样,Android未来属于
  8. Android脚本插件系列(一):安卓国际化多语
  9. 深入探讨 Android(安卓)传感器
  10. Android的消息机制,用Android线程间通信的