为内核模块ch341.ko签名步骤

 

### **步骤 1:生成自签名密钥对**
1. **安装依赖工具**:
   ```bash
   sudo apt install openssl mokutil
   ```

2. **生成密钥对**:
   ```bash
   openssl req -new -x509 -newkey rsa:2048 -keyout my_key.priv -outform DER -out my_key.der -nodes -days 36500 -subj "/CN=Your Name/"
   ```
   - `my_key.priv`: 私钥文件(用于签名模块)。
   - `my_key.der`: 公钥文件(需注册到 Secure Boot)。
   - `/CN=Your Name/`: 可自定义名称(如 `/CN=My Custom Driver/`)。

---

### **步骤 2:签名 `ch341.ko` 模块**
使用内核的 `sign-file` 工具对模块签名:
```bash
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 my_key.priv my_key.der ch341.ko
```
- 签名后会在模块中嵌入签名信息。
- 如果 `sign-file` 路径不存在,请安装对应内核头文件:
  ```bash
  sudo apt install linux-headers-$(uname -r)
  ```

---

### **步骤 3:注册公钥到 Secure Boot**
1. **将公钥添加到 MOK(Machine Owner Key)列表**:
   ```bash
   sudo mokutil --import my_key.der
   ```
   - 输入一个临时密码(用于下一步确认)。

2. **重启并完成密钥注册**:
   - 重启电脑,系统会自动进入 **MOK Manager** 界面。
   - 选择 **Enroll MOK** → **Continue** → **Yes** 输入密码 → 确认注册。

---

### **步骤 4:加载已签名的模块**
```bash
sudo insmod ch341.ko
```
- 如果成功,不会有错误提示。
- 验证模块是否加载:
  ```bash
  lsmod | grep ch341
  ```

---

### **验证签名**
检查模块的签名信息:
```bash
modinfo ch341.ko | grep 'signer'
```
如果输出包含 `signer: Your Name`,则签名成功。

---

### **注意事项**
1. **密钥安全**:
   - 私钥(`my_key.priv`)需妥善保管,泄露后可能被恶意利用。
   - 公钥(`my_key.der`)可随意分发。

2. **内核版本兼容性**:
   - 签名后的模块需与当前运行的内核版本匹配,否则可能无法加载。

3. **备用方案**:
   - 如果模块是标准内核驱动(如 USB 转串口驱动),尝试更新内核或使用 `modprobe`:
     ```bash
     sudo modprobe ch341
     ```

---

### **常见问题**
1. **签名后仍报错**:
   - 确保 Secure Boot 已启用且密钥已正确注册(检查 `mokutil --list-enrolled`)。
   - 确保内核版本一致(`uname -r` 与模块编译环境一致)。

2. **模块未生效**:
   - 检查模块是否被黑名单阻止(查看 `/etc/modprobe.d/` 下的配置文件)。

3. **需要自动化签名**:
   - 对于频繁编译的驱动,可将签名步骤集成到 Makefile 中,或使用 DKMS 自动处理。

通过上述步骤,你应该可以成功为 `ch341.ko` 签名并在 Secure Boot 启用的系统中加载它。

 

你可能感兴趣的:(linux,51,linux,51单片机)