0
例如,見改編自BCM43xx的BlueZ藍牙驅動程序驗證碼:爲什麼需要在驅動程序初始化時加載藍牙固件?
int bcm43xx_init(int fd, int def_speed, int speed, struct termios *ti,
const char *bdaddr)
{
char chip_name[20];
char fw_path[PATH_MAX];
printf("bcm43xx_init\n");
if (bcm43xx_reset(fd))
return -1;
if (bcm43xx_read_local_name(fd, chip_name, sizeof(chip_name)))
return -1;
if (bcm43xx_locate_patch(FIRMWARE_DIR, chip_name, fw_path)) {
fprintf(stderr, "Patch not found, continue anyway\n");
} else {
if (bcm43xx_set_speed(fd, ti, speed))
return -1;
if (bcm43xx_load_firmware(fd, fw_path))
return -1;
/* Controller speed has been reset to def speed */
if (set_speed(fd, ti, def_speed) < 0) {
perror("Can't set host baud rate");
return -1;
}
if (bcm43xx_reset(fd))
return -1;
}
if (bdaddr)
bcm43xx_set_bdaddr(fd, bdaddr);
if (bcm43xx_set_speed(fd, ti, speed))
return -1;
return 0;
}
在這個函數中,它看起來通過調用bcm43xx_load_firmware文件系統,並將其加載到芯片上的一個文件。爲什麼每次都需要這樣做?
在此先感謝。
謝謝你回答我的問題。這個補丁文件是否像其他軟件補丁一樣修改了原始固件?與BIOS刷新相比,這種設計的優缺點在哪裏,固件是以非易失性方式更新的? –