- 论坛徽章:
- 0
|
回复 3# aaaaa5aa
我最近在写关于设备模型的文章,后面准备写固件开发,可惜现在还没写。我只能提供你函数
ldd3
#include <linux/firmware.h>
int request_firmware(const struct firmware **fw, char *name,
struct device *device);
调用 request_firmware 要求用户空间定位并提供一个固件映象给内核; 我们
一会儿看它如何工作的细节. name 应当标识需要的固件; 正常的用法是供应者
提供的固件文件名. 某些象 my_firmware.bin 的名子是典型的. 如果固件被成
功加载, 返回值是 0(负责常用的错误码被返回), 并且 fw 参数指向一个这些
结构:
struct firmware {
size_t size;
u8 *data;
};
void release_firmware(struct firmware *fw);
因为 request_firmware 请求用户空间来帮忙, 它保证在返回前睡眠. 如果你
的驱动当它必须请求固件时不在睡眠的位置, 异步的替代方法可能要使用:
int request_firmware_nowait(struct module *module,
char *name, struct device *device, void *context,
void (*cont)(const struct firmware *fw, void *context));
这里额外的参数是 moudle( 它将一直是 THIS_MODULE), context (一个固件子
系统不使用的私有数据指针), 和 cont. 如果都进行顺利,
request_firmware_nowait 开始固件加载过程并且返回 0. 在将来某个时间,
cont 将用加载的结果被调用. 如果由于某些原因固件加载失败, fw 是 NULL.
你在/linux-2.6.*/drivers/下
grep -r "request_firmware" ./*
看那些驱动用了,研究一下。
我的bolg
http://blog.csdn.net/xxxxxlllllxl
后期我会写固件开发的专题 |
|