Linux固件加载过程简析

Linux内核模块使用固件程序时,正确的做法是使用request_firmware_nowait()一类固件接口来获取固件数据。

在使用firmware前,必须对内核做如下配置。

Device Drivers —> 
Generic Driver Options —> 
<*> Userspace firmware loading support 

否则会出现: Unknown symbol release_firmware 和: Unknown symbol request_firmware 的错误。

下面是request_firmware_nowait函数的原型

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))

如果一切正常,request_firmware_nowait 开始固件加载过程并返回0。随后会调用驱动程序的回调函数cont并将保存有firmware的fw作为函数cont的参数。
如果找不到对应位置的文件,过了一段时间后(默认60秒),将用fw=NULL作为参数调用cont。

其中struct firmware定义如下:

struct firmware {
    size_t size;
    u8 *data;
};

这个结构包含实际的固件,它现在可被下载到设备中。但是请注意:在发送它到硬件之前,必须检查这个文件以确保它是正确的固件映象(设备固件常常包含标识字符串、校验和等等)

跟踪request_firmware_nowait的实现过程:

request_firmware_nowait
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值