request_firmware函数主要是用来在kermnel 里给外围设备更新固件的时候,获得固件文件的。
调用此函数后,编译进系统的固件文件,就被调用内存。
当调用request_firmware 函数时,它会自动在几个固定的文件夹下搜索,查找和文件名字相同的文件,然后打开读到内存。
1.调用方法:
const struct firmware *cfg;
int ret;
ret = mxt_update_file_name(dev, &data->cfg_name, buf, count);
if (ret)
return ret;
ret = request_firmware(&cfg, data->cfg_name, dev);
if (ret < 0) {
dev_err(dev, "Failure to request config file %s\n",
data->cfg_name);
ret = -ENOENT;
goto out;
}
mxt_update_file_name() // 在本例子中,用来获得固件文件名字。
其中 &data->cfg_name 指的是固件文件名字。
cfg 是读到内存后的固件文件内容。
2. 固件文件的存放文件夹位置:
固件文件存放的文件夹位置,在kernel代码里可以添加和更改。更改代码位置如下:
在高通平台上,代码文件位置:/drivers/base/firmware_class.c
/* direct firmware loading support */
static char fw_path_para[256];
static const char * const fw_path[] = {
fw_path_para,
"/lib/firmware/updates/" UTS_RELEASE,
"/lib/firmware/updates",
"/lib/firmware/" UTS_RELEASE,
"/lib/firmware",
"/lib64/firmware",
"/mnt/update",
"/lib/firmware/image"
};