2016-11-09 96 views
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文件系統,並將其加載到芯片上的一個文件。爲什麼每次都需要這樣做?

在此先感謝。

回答

0

它只加載一個補丁文件(不是整個固件),它存儲在bcm43xx芯片的RAM中。該RAM自然需要在對bcm43xx芯片上電後重新加載。

+0

謝謝你回答我的問題。這個補丁文件是否像其他軟件補丁一樣修改了原始固件?與BIOS刷新相比,這種設計的優缺點在哪裏,固件是以非易失性方式更新的? –

相關問題