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"
};