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. JavaScript实现Map功能

    JavaScript中没有类似Java中的Map集合类的实现,自己做了简单实现,如下: function Map() { this.elements = new Array(); this.size= ...

  2. KVM入门

    KVM KVM(Kernel-based Virtual Machine)是众多虚拟化技术之一,它是Linux内核中的一个模块,该模块依赖于CPU,如果CPU支持虚拟化,那么该模块才可以被加载.KVM ...

  3. 独家揭秘,106岁的IBM靠什么完成了世纪大转型|钛度专访

    IBM大中华区董事长陈黎明 到2017年2月,陈黎明就担任IBM大中华区董事长整整两年了. 五年前,IBM历史上首位女CEO也是第9位CEO罗睿兰上任,三年前,IBM在罗睿兰的带领下以数据与分析.云. ...

  4. 前端学习笔记之CSS知识汇总

    CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染). CSS语法 CSS实例 ...

  5. SQL Server2008安装图解

    1).双击set.up安装:

  6. Maven mybatis-generator自动生成代码

    mybatis-generator可以自动生成代码,不管你是否喜欢它生成的代码的风格,它确实有助于我们更快速便捷的生成代码. Maven pom文件配置: <build> <plug ...

  7. js的函数作用域

    1.js作用域 //在函数内部声明的变量,如果不加var,则自动变成window的成员//预处理:扫描代码,看到var或者函数就生效./*function f(){a = 8;//var a = 8; ...

  8. fiddler几种功能强大的用法(二)

    参考网址:http://blog.rekfan.com/articles/228.html http://www.cnblogs.com/tugenhua0707/p/4637771.html htt ...

  9. HDU 3435 A new Graph Game(最小费用流:有向环权值最小覆盖)

    http://acm.hdu.edu.cn/showproblem.php?pid=3435 题意:有n个点和m条边,你可以删去任意条边,使得所有点在一个哈密顿路径上,路径的权值得最小. 思路: 费用 ...

  10. python 获取昨天今天明天日期

    import datetime today = datetime.date.today() yesterday = today - datetime.timedelta(days = ) tomorr ...