Linux系統安裝驅動過程中ko文件加載錯誤(Required key not available)的解決辦法
問題描述
在Ubuntu上使用CP210x USB轉UART設備時需要安裝驅動程序(CP210x USB to UART Bridge VCP Drivers),安裝驅動過程中cp210x.ko文件已經編譯成功,但使用命令
insmod /lib/modules/4.15.0-43-generic/kernel/drivers/usb/serial/usbserial.ko
加載usbserial模塊時報錯:
Required key not available
開發環境
操作系統:Ubuntu 18.04
Linux內核版本:4.15.0-43-generic
使用命令 $uname -a
查看系統環境,得到如下結果:
另附:CP210x驅動下載地址:https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers
關於該驅動的詳細安裝教程,請參考上述官網說明.
解決步驟
1.首先,對於Ubuntu系統,可以使用如下命令安裝 mokutil工具:
$sudo apt-get install mokutil
2.然後任意目錄下,創建一個生成證書的參數配置文件 x509-configuration.ini,配置文件內容如下:
[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = myexts
[ req_distinguished_name ]
O = YOUR_USERNAME
CN = YOUR_USERNAME
emailAddress = YOUR_EMAIL_ADDRESS
[ myexts ]
basicConstraints=critical,CA:FALSE
keyUsage=digitalSignature
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid
3.在該目錄下調用openssl命令, 生成public_key.der 和 private_key.priv文件。其中public_key.der是證書:
$sudo openssl req -x509 -new -nodes -utf8 -sha256 -days 36500 -batch -config x509-configuration.ini -outform DER -out public_key.der -keyout private_key.priv
- 用mokutil 命令把證書public_key.der放進數據庫mokdb裏:
$mokutil --import public_key.der
當提示輸入密碼時,需要輸入root用戶的密碼,若默認未創建root用戶密碼,則需要通過下面的命令設置新的root密碼:
$sudo passwd
上述步驟執行完畢後,輸入reboot命令重啓計算機即可。
注意!重啓過程中也需要輸入上述root用戶密碼。 另外,mokutil具有保護機制,若root用戶密碼連續輸錯兩次以上,則需要重啓計算機重新輸入。
5.給模塊賦予簽名
重啓計算機後,使用形式如下的命令給加載錯誤的模塊賦予簽名,例如:
$/usr/src/4.15.0-43-generic/scripts/sign-file sha256 private_key.priv public_key.der /lib/modules/4.15.0-43-generic/kernel/drivers/usb/serial/usbserial.ko
隨後,重新加載該模塊:
$insmod /lib/modules/4.15.0-43-generic/kernel/drivers/usb/serial/usbserial.ko
即可成功加載.大功告成!