gpt4 book ai didi

linux - 为什么蓝牙固件需要在驱动初始化时加载?

转载 作者:太空宇宙 更新时间:2023-11-04 12:40:11 25 4
gpt4 key购买 nike

例如,查看从 BlueZ 改编的 BCM43xx 蓝牙驱动程序的代码:

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 将它加载到芯片中。为什么每次都需要这样做?

提前致谢。

最佳答案

它只加载一个补丁文件(不是整个固件),该文件存储在 bcm43xx 芯片的 RAM 中。在对 bcm43xx 芯片进行电源循环后,该 RAM 自然需要重新加载。

关于linux - 为什么蓝牙固件需要在驱动初始化时加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40499020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com