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

固件_Linux内核的更多相关文章

  1. 进程_Linux内核设计与实现笔记

    进程 进程是处于执行期的程序以及相关资源的总称,是正在执行的代码的实时结果. 进程部分位于Kernel的PM层.进程是Unix操作系统的抽象概念中最基本的一种,操作系统的存在就是为了运行用户程序,所以 ...

  2. 【request_firmware】 linux内核下载模块固件接口【转】

    转自:http://blog.csdn.net/magod/article/details/6049558 [-] 8 处理固件 1481 内核固件接口 1482 它如何工作 14.8. 处理固件 作 ...

  3. 如何在编译内核时添加缺少的固件(随着intel wireless 5100 AGN的 iwlwifi 案例)

    我不知道你在笔记本使用 Linux 在内核编译无线wifi 不能用.我的书"关联 Y450"一个足够的旧书,随着无线网卡: $ lspci | grep Wireless 06:0 ...

  4. 使用 OpenWrt Image Generator 为 WR703N 路由器定制固件

    标题:使用 OpenWrt Image Generator 为 WR703N 路由器定制固件 之前试着自己编译固件,编译是成功了,但是在后期安装官方仓库的ipk时出现问题,因为自己编译的固件和官方固件 ...

  5. 树莓派配置文档 config.txt 说明(转)

    原文连接:http://elinux.org/RPi_config.txt 由于树莓派并没有传统意义上的BIOS, 所以现在各种系统配置参数通常被存在"config.txt"这个文 ...

  6. Android源码剖析之Framework层基础版(窗口、linux、token、Binder)

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 关于Framework,就是应用层底下的控制层,离应用层最近,总想找个机会,写写WindowMang ...

  7. 嵌入式 -- WINKHUB 边信道攻击 (NAND Glitch)

    0x00 前言 随着物联网IOT的飞速发展,各类嵌入式设备, 路由器安全研究也越来越火. 但因为跟以往纯软件安全研究的要求不同, 这类研究往往需要结合相应的硬件知识. 很多朋友困惑如何开始, 甚至卡在 ...

  8. MDEV Primer

    /************************************************************************** * MDEV Primer * 说明: * 本文 ...

  9. centos7使用无线wifi连接

    一:所用命令 dmesg | grep firmware(看看有没有来自无线网卡的固件请求) iw: iw dev(查找无线网卡口) iw wls1 link(查看wls1网口无线网络连接情况) iw ...

随机推荐

  1. 【转】ViewPager 一屏显示多个子页面

    一.概述 项目中遇到一个需求:ViewPager 一屏显示多个子页面.因为之前没有做过这样的界面,所以经历了些许小插曲,特以记之! 主要内容来自: http://blog.csdn.net/JM_be ...

  2. 使用spring cache和ehcache之前必须了解的

    好长时间没写博客了,真的是没时间啊.ps:其实就是懒!!接下来几篇要写下缓存,这里主要写下ehcache与spring整合的内容,包括aop形式的缓存,基于注解的缓存,页面缓存这三方面吧.在这之前先要 ...

  3. window 下相关命令

    1. 启动window服务(各种应用启动设置的地方)命令方式: 1). window 按钮(输入CMD的地方)处输入:services.msc ,然后执行.   // 输入命令正确,上面的待选框中会出 ...

  4. Union、Union All、Intersect、Minus用法和区别

    假设我们有一个表Student,包括以下字段与数据: [c-sharp] view plain copydrop table student;    create table student  (   ...

  5. SQL学习笔记六之MySQL数据备份和pymysql模块

    mysql六:数据备份.pymysql模块   阅读目录 一 IDE工具介绍 二 MySQL数据备份 三 pymysql模块 一 IDE工具介绍 生产环境还是推荐使用mysql命令行,但为了方便我们测 ...

  6. Sybase数据库常用sql语言

    Sybase数据库常用sql语言 1,表备份: --table_name1:需要备份的表; table_name2:备份后的表 SELECT * into table_name2 from table ...

  7. 20145325张梓靖 《Java程序设计》第9周学习总结

    20145325张梓靖 <Java程序设计>第9周学习总结 教材学习内容总结 JDBC Java语言访问数据库的一种规范,是一套API.JDBC (Java Database Connec ...

  8. 《Effective Java 2nd》第7章 方法

    目录 第38条 检查参数的有效性 第39条 必要时进行保护性拷贝 第40条 谨慎设计方法签名 第41条 慎用重载 第42条 慎用可变参数 第43条 返回零长度的数组或集合,而不是null 第44条 为 ...

  9. class文件的结构

    任何一个class文件都对应着唯一一个类或接口的定义信息,但反过来说,类或接口的定义信息并不一定都在文件里(比如类或接口也可以通过类加载器直接生成) class文件是一组以8位字节为基础单位的二进制流 ...

  10. Gym 101246D Fire in the Country(dfs求SG函数)

    http://codeforces.com/gym/101246/problem/D 题意: 给定一个无向有环图,大火从1点开始,每个时间点与它相邻的点也将会着火,现在有两个人轮流操作机器人,机器人从 ...