1.相关函数

.相关函数
int request_firmware_nowait(
struct module *module, bool uevent,
const char *name,
struct device *device,
gfp_t gfp,
void *context, /*驱动自己可以向回调函数传递一个参数,一般指向驱动设备结构体*/
void (*cont)(const struct firmware *fw, void *context)) /*失败时传入的fw=NULL*/ int request_firmware(const struct firmware **firmware_p, const char *name, struct device *device) void release_firmware(const struct firmware *fw)

2.函数调用关系

request_firmware_nowait
INIT_WORK(&fw_work->work, request_firmware_work_func); schedule_work(&fw_work->work); 这就是异步的实现方法,queue到内核线程中去执行
fw_get_filesystem_firmware
kernel_read_file_from_path
file = filp_open(path, O_RDONLY, );
kernel_read_file(file, buf, size, max_size, id);

2.相关结构体

/* direct firmware loading support */
static char fw_path_para[];
static const char * const fw_path[] = { /* 固件查找路径 */
fw_path_para, /* 模块参数,可作为启动参数 */
"/lib/firmware/updates/" UTS_RELEASE,
"/lib/firmware/updates",
"/lib/firmware/" UTS_RELEASE,
"/lib/firmware"
};
module_param_string(path, fw_path_para, sizeof(fw_path_para), ); /*这个还做为模块参数供用户配置*/
MODULE_PARM_DESC(path, "customized firmware image search path with a higher priority than default path");
struct firmware {
size_t size;
const u8 *data; /*data里面存的直接是打卡固件里面的数据*/
struct page **pages; /* firmware loader private fields */
void *priv; /*_request_firmware_prepare中指向struct firmware_buf *buf, 若驱动App这里指定为null,内核分配的buff就存在这里*/
};

3.实验测试

error = request_firmware_nowait(THIS_MODULE, true, "maxtouch.cfg", &client->dev, GFP_KERNEL, data, mxt_config_cb);

mxt_config_cb(const struct firmware *cfg, void *ctx)
{
printk(KERN_INFO"sfl: size=%d, content=%s\n", cfg->size, buff);
} # mkdir -p /lib/firmware/updates
# touch /lib/firmware/updates/maxtouch.cfg
# ehco abcdefghijklmnopqrst > /lib/firmware/updates/maxtouch.cfg 打印:
sfl: size=, content=abcdefghijklmnopqrst

最新文章

  1. 头疼--windows之安装meteor.js
  2. unity自定义菜单面板开发
  3. (String)将一个String里面的单词反转
  4. 2015年百度之星初赛(1) --- B 找连续数
  5. android 资源ID
  6. Android绘图之渐隐动画
  7. Apache Spark的部署环境的小记
  8. 利用迅雷提供的接口从磁力链得到bt种子文件
  9. cocos2d-x 基本数学
  10. Tunnel Warfare
  11. Android 自定义View (二) 进阶
  12. 有关oppo蝴蝶解锁的三D技术
  13. jsp-2 简单的servlet连接mysql数据库 增删改查
  14. JS动态生成<style>
  15. scala攻略--简介
  16. [LeetCode] Complex Number Multiplication 复数相乘
  17. 【SSH系列】-- hibernate基本原理&&入门demo
  18. 关于截取URL地址参数的方法
  19. asp.net开启多线程异步处理
  20. SVN命令备忘录

热门文章

  1. HDU - 2844 Coins(多重背包+完全背包)
  2. laravel + html ajax 多表单字段和图片一起上传
  3. HttpClient-RestTemplate-Feign
  4. 关于LIS和LCS问题的o(nlogn)解法
  5. What's the difference between SDK and Runtime in .NET Core?
  6. Docker 安装&基本操作
  7. 2017NOIP模拟赛-科普基地
  8. sonar runner的配置
  9. hadoop经典案例
  10. angular-cli 文档