第12章工程中的 Linux设备驱动之Linux设备驱动的固件加载

12.7 Linux设备驱动的固件加载

    一个外设的运行可能依赖于固件,如某公司的WiFi 模块,在启动前需要加载固件。传统的设备驱动将固件的二进制码作为一个数组直接编译进目标代码,在 Linux 2.6 中,有一套成熟的固件加载流程。

    首先,申请固件的驱动程序发起如下请求:

    linux/firmware.h

    int request_firmware(const struct firmware **fw, const char *name, struct device *device);

fw: 用于保存申请到的固件

name: 固件名

device:申请固件的设备的结构体指针

    发起这个调用后,内核的udevd 会配合将固件通过对应的sysfs 结点写入内核。之后内核将收到的firmware 写入外设,最后通过如下API 释放请求:

    void release_firmware(const struct firmware *fw);

    一个典型的例子drivers/media/video/cx25840/cx25840-firmware.c 的cx25840_loadfw()函数,如代码清单12.24 所示。

    代码清单 12.24 Linux 设备驱动申请 firmware 的例子

#define FWDEV(x)  &((x)->dev)

static int check_fw_load(struct i2c_client *client, int size)
{

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值