在編譯 Linux kernel 後,出現某些韌體檔案找不到,怎麼辦?

在編譯 linux 核心之後,會出現某些韌體(firmware)找不到的情況,在這些缺少的韌體當中,可能會引起無法啟用某些硬體的問題,那這問題要如何解決呢?

這類問題,不難解決,簡單來說,就是找到相對應的「韌體檔案」,然後放到對的位置,對的目錄底下,讓作業系統可以找到與使用。

那~這些韌體檔案該去哪裡找呢?以下網址可以找到:
https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/

在找到需要檔案後,下載並將該檔案放到 /lib/lib/firmware/ 目錄相對應的位置下,問題就可解決。

 

簡化與加速一下

基本上,下載韌體檔案,放到對應目錄底下,問題就解決。

但是,若缺少的檔案很多,我一定會因為一個一個檔案下載,感到很焦躁,很煩,然後就放棄了這件事。

還好,可以使用 wget, awk 這兩個工具來解決煩躁問題。

 

  1. 將缺少的韌體檔案訊息,「W: Possible missing firmware /lib/firmware/rtl_nic/rtl8125d-1.fw for module r8169」全部複製,並貼成一個檔案
  2. 檔名就取:firmware_error.txt 好了!

  3. 整理一下檔案內容,將W: Possible missing firmware /lib/firmware/xxxx/全部去掉,只留下後面訊息。
  4. 可用 awk ,一行指令就可處理掉了。

    awk -F "/" '{print $5}' firmware_error.txt > firmware_error_01.txt

  5. 批次下載韌體檔案
  6. awk -F" " '{print echo "wget -c https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/" $4 echo "/"  $1}' firmware_error_01.txt | sh 

  7. 將下載回來檔案,放到 /lib/firmware/ 相對應位置中
  8. 例:sudo cp rtl8125d-1.fw /lib/firmware/rtl_nic/

    若檔案太多,一個一個放,覺得太慢很煩,也可以利用 awk 來幫忙。

    awk -F" " '{print echo "sudo cp " $1 echo " /lib/firmware/" $4 echo "/"  }' firmware_error_01.txt |sh 

 

臨時補充筆記

  1. 在 vim 下,如何刪除每行的第一個字
  2. :%s/^.//g

  3. awk -F 語法:若指定 / 為分隔符時,語法如下:
  4. awk -F/ '{print $1, $2}' filename.txt

 

參考資源

  1. https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*