You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为自定义Yocto发行版编译PL2303内核模块遇问题求助

PL2303 USB转串口模块编译与加载问题排查

问题1:Yocto编译的模块加载失败

用BitBake编译pl2303.ko后,执行insmod pl2303.ko报错:

insmod: ERROR: could not insert module ko/pl2303.ko: Invalid parameters

查看dmesg输出,核心错误为符号版本不匹配:

[17585.849506] pl2303: disagrees about version of symbol dev_err
[17585.853980] pl2303: Unknown symbol dev_err (err -22)

当前运行的内核信息:

Linux seco-sbc-a62 4.14.78+g15a48d6 #1 SMP PREEMPT Thu Nov 21 08:44:23 UTC 2019 armv7l armv7l armv7l GNU/Linux

问题2:板卡本地编译失败

尝试直接在板卡上编译PL2303源码,执行命令后报错:

make -C /lib/modules/4.14.78+g15a48d6/build M=/home/root/pl2303 module modules
make[1]: Entering directory '/usr/src/linux-4.14.78'
make[1]: *** No rule to make target 'module'. Stop.
make[1]: Leaving directory '/usr/src/linux-4.14.78'
make: *** [Makefile:10: all] Error 2

已将linux-4.14.78.tar.gz解压至/usr/src/linux-4.14.78,使用的Makefile内容:

obj-m += pl2303.o

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

解决方案

针对问题1:内核符号版本不匹配

本质原因是编译模块用的内核环境与目标系统运行的内核完全不一致,包括版本、配置、编译参数、符号版本控制等。

  1. 严格对齐内核环境:

    • 必须使用目标系统内核的完整源码(包含+g15a48d6对应的git提交)和编译配置来编译模块
    • 检查目标内核是否启用了CONFIG_MODVERSIONS=y,如果是,模块编译时必须同步开启该选项
    • 确保模块编译生成的版本字符串与uname -r完全匹配(包括git哈希后缀)
  2. Yocto环境下的正确做法:

    • 直接修改目标内核的recipe,将PL2303配置为模块(CONFIG_USB_SERIAL_PL2303=m),重新编译内核及模块
    • 若单独编译模块,需基于目标内核的recipe创建模块编译bb文件,确保继承相同的内核编译环境

针对问题2:板卡本地编译失败

错误源于Makefile命令冗余,且内核源码未完成编译准备。

  1. 修复Makefile:
    去掉命令中的重复目标module,仅保留modules(内核编译模块的正确目标是modules):

    obj-m += pl2303.o
    
    all:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
    
    clean:
        make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
    
  2. 完成内核源码编译准备:

    • 从目标系统导出当前内核配置:zcat /proc/config.gz > /usr/src/linux-4.14.78/.config
    • 生成编译依赖文件:
      cd /usr/src/linux-4.14.78
      make oldconfig
      make prepare
      make modules_prepare
      
    • 确保内核链接正确:检查/lib/modules/$(uname -r)/build是否指向/usr/src/linux-4.14.78,若未指向则创建软链接:
      ln -s /usr/src/linux-4.14.78 /lib/modules/4.14.78+g15a48d6/build
      
  3. 重新执行编译:在PL2303源码目录下运行make即可

内容的提问来源于stack exchange,提问作者RicBru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 05:10:35