固件_Linux内核
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内核的更多相关文章
- 进程_Linux内核设计与实现笔记
进程 进程是处于执行期的程序以及相关资源的总称,是正在执行的代码的实时结果. 进程部分位于Kernel的PM层.进程是Unix操作系统的抽象概念中最基本的一种,操作系统的存在就是为了运行用户程序,所以 ...
- 【request_firmware】 linux内核下载模块固件接口【转】
转自:http://blog.csdn.net/magod/article/details/6049558 [-] 8 处理固件 1481 内核固件接口 1482 它如何工作 14.8. 处理固件 作 ...
- 如何在编译内核时添加缺少的固件(随着intel wireless 5100 AGN的 iwlwifi 案例)
我不知道你在笔记本使用 Linux 在内核编译无线wifi 不能用.我的书"关联 Y450"一个足够的旧书,随着无线网卡: $ lspci | grep Wireless 06:0 ...
- 使用 OpenWrt Image Generator 为 WR703N 路由器定制固件
标题:使用 OpenWrt Image Generator 为 WR703N 路由器定制固件 之前试着自己编译固件,编译是成功了,但是在后期安装官方仓库的ipk时出现问题,因为自己编译的固件和官方固件 ...
- 树莓派配置文档 config.txt 说明(转)
原文连接:http://elinux.org/RPi_config.txt 由于树莓派并没有传统意义上的BIOS, 所以现在各种系统配置参数通常被存在"config.txt"这个文 ...
- Android源码剖析之Framework层基础版(窗口、linux、token、Binder)
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 关于Framework,就是应用层底下的控制层,离应用层最近,总想找个机会,写写WindowMang ...
- 嵌入式 -- WINKHUB 边信道攻击 (NAND Glitch)
0x00 前言 随着物联网IOT的飞速发展,各类嵌入式设备, 路由器安全研究也越来越火. 但因为跟以往纯软件安全研究的要求不同, 这类研究往往需要结合相应的硬件知识. 很多朋友困惑如何开始, 甚至卡在 ...
- MDEV Primer
/************************************************************************** * MDEV Primer * 说明: * 本文 ...
- centos7使用无线wifi连接
一:所用命令 dmesg | grep firmware(看看有没有来自无线网卡的固件请求) iw: iw dev(查找无线网卡口) iw wls1 link(查看wls1网口无线网络连接情况) iw ...
随机推荐
- OpenCV图像的轮廓的匹配
http://blog.sina.com.cn/s/blog_67a7426a0101cxl0.html 一个跟轮廓相关的最常用到的功能是匹配两个轮廓.如果有两个轮廓,如何比较它们;或者如何比较一个轮 ...
- 常用php操作redis命令整理(四)SET类型
SADD 将一个或多个member元素加入到集合key当中.(从左侧插入,最后插入的元素在0位置),集合中已经存在TK 则返回false,不存在添加成功 返回true <?php var_dum ...
- bzoj1604 / P2906 [USACO08OPEN]牛的街区Cow Neighborhoods
P2906 [USACO08OPEN]牛的街区Cow Neighborhoods 考虑维护曼哈顿距离:$\left | x_{1}-x_{2} \right |+\left | y_{1}-y_{2} ...
- 【javascript】数据结构-集合
<!DOCTYPE html> <html> <head> <title>集合</title> <meta charset=" ...
- notepad++下载32位,安装插件管理
下载32位地址: https://notepad-plus-plus.org/download/v7.6.4.html 下载插件: 链接: https://pan.baidu.com/s/1tRSo4 ...
- UVa 1636 决斗
https://vjudge.net/problem/UVA-1636 题意: 首先在手枪里随机装了一些子弹,然后抠了一枪,发现没有子弹.你希望下一枪也没有子弹,是应该直接再抠一枪还是随机转一下再抠. ...
- install ros-indigo-map-msgs
CMake Warning at /opt/ros/indigo/share/catkin/cmake/catkinConfig.cmake: (find_package): Could not fi ...
- S4 继承
S3 系统是宽泛且灵活的,同类的 S3 对象也可能有不同的成员.但是,对于 S4 系统,就不会发生,也就是说,当我们创建一个属于某类的 S4 对象实例时,不能任意添加不在类表示中的字段.举个例子,在创 ...
- 遗传算法 Genetic Algorithm
2017-12-17 19:12:10 一.Evolutionary Algorithm 进化算法,也被成为是演化算法(evolutionary algorithms,简称EAs),它不是一个具体的算 ...
- Java Redis的Pipeline管道,批量操作,节省大量网络往返时间 & Redis批量读写(hmset&hgetall) 使用Pipeline
一般情况下,大家使用redis去put/get都是先拿到一个jedis实例,然后操作,然后释放连接:这种模式是 请求-响应,请求-响应 这种模式,下一次请求必须得等第一次请求响应回来之后才可以,因为r ...