0

たとえば、BlueZ から採用された BCM43xx Bluetooth ドライバーの次のコードを参照してください。

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 を呼び出してチップにロードします。なぜ毎回これを行う必要があるのですか?

前もって感謝します。

4

1 に答える 1

0

bcm43xx チップの RAM に格納されているパッチ ファイルのみをロードします (ファームウェア全体ではありません)。その RAM は、当然、bcm43xx チップの電源を入れ直した後に再ロードする必要があります。

于 2016-11-29T11:12:43.970 に答える