在編譯 linux 核心之後,會出現某些韌體(firmware)找不到的情況,在這些缺少的韌體當中,可能會引起無法啟用某些硬體的問題,那這問題要如何解決呢?
這類問題,不難解決,簡單來說,就是找到相對應的「韌體檔案」,然後放到對的位置,對的目錄底下,讓作業系統可以找到與使用。
那~這些韌體檔案該去哪裡找呢?以下網址可以找到:
https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/
在找到需要檔案後,下載並將該檔案放到 /lib/lib/firmware/ 目錄相對應的位置下,問題就可解決。
簡化與加速一下
基本上,下載韌體檔案,放到對應目錄底下,問題就解決。
但是,若缺少的檔案很多,我一定會因為一個一個檔案下載,感到很焦躁,很煩,然後就放棄了這件事。
還好,可以使用 wget, awk 這兩個工具來解決煩躁問題。
- 將缺少的韌體檔案訊息,「W: Possible missing firmware /lib/firmware/rtl_nic/rtl8125d-1.fw for module r8169」全部複製,並貼成一個檔案
- 整理一下檔案內容,將W: Possible missing firmware /lib/firmware/xxxx/全部去掉,只留下後面訊息。
- 批次下載韌體檔案
- 將下載回來檔案,放到 /lib/firmware/ 相對應位置中
檔名就取:firmware_error.txt 好了!
可用 awk ,一行指令就可處理掉了。
awk -F "/" '{print $5}' firmware_error.txt > firmware_error_01.txt
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
例: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
臨時補充筆記
- 在 vim 下,如何刪除每行的第一個字
- awk -F 語法:若指定 / 為分隔符時,語法如下:
:%s/^.//g
awk -F/ '{print $1, $2}' filename.txt