ubuntu 18.04换内核后找不到 /dev/ttyUSB0问题

在Ubuntu 18.04上,由于新安装的5.4.0-42内核缺少必要模块,导致USB转串口驱动未加载。通过安装`linux-modules-extra`并加载ch341驱动,解决了找不到ttyUSB0的问题。经过modprobe和insmod命令加载及卸载模块,最终成功识别USB转串口设备。
摘要由CSDN通过智能技术生成

系统: win10 + ubuntu18.04.6
内核:非默认内核,新安装的内核 5.4.0-42 版本
uname -r
5.4.0-42-generic

问题:
用USB转串口线连接开发版串口,
ls /dev/tty*
ls /dev |grep tty

查找不到 ttyUSB0;

lsmod | grep usbserial

没有,说明系统不支持USB转串口。
于是 参考博客安装驱动 ch340,
在sudo make load , 报错:原因是执行 modprobe usbserial 报错

modprobe: ERROR: could not insert ‘ch341’: Exec format error

modprobe 加载模块时 出现权限不允许提醒;Operation not permitted 解决:root 权限,加 sudo

modprobe 提示 FATAL: Module chrdevbase not found in directory /lib/modules/5.4.0-42-generic
可能是缺少相关路径、文件或是文件名不需要带扩展
使用modprobe xx 命令后,会到文件系统/lib/modules/xxxxx目录下查找相应的XX.ko文件;找不到报错;

sudo cp ch34x.ko /lib/modules/uname -r/kernel/drivers/usb/serial/
重启仍然 中找不到;

对比 原来的内核版本 /lib/modules/5.4.0-84-generic/kernel/drivers/usb
发现 /lib/modules/5.4.0-42-generic/kernel/drivers/usb 中少了 usbserial 文件夹,而且少了很多 drivers 文件。
因此怀疑是在安装 5.4.0-42-generic 内核时,没有安装完全。
通过 dpkg --get-selections | grep linux

对比,发现新安装的 5.4.0-42-generic, 少了 linux-modules-extra;

sudo apt install linux-modules-extra-5.4.0-42-generic
重启后,
/lib/modules/5.4.0-42-generic/kernel/drivers 中多了很多文件;
/lib/modules/5.4.0-42-generic/kernel/drivers/usb 有了usbserial 文件夹;

usbserial 文件夹中已经有 ch341.ko ,usbserial.ko 等驱动。

lsmod | grep usbserial 还是没有;
sudo modprobe usbserial # 加载模块
lsmod | grep usbserial
有了

加载自带驱动 ch341.ko

sudo insmod /lib/modules/5.4.0-42-generic/kernel/drivers/usb/usbserial /ch341.ko
depmod
执行depmod命令(建立该模块的依赖关系。也即必须用 depmod 来更新一下 /lib/modules/$(uname -r)/modules.dep 文件)

rmmod 命令 卸载驱动;即 emmod ch341.ko
再次: lsmod | grep usbserial
显示正确:
USB转串口线连接开发版串口,ls /dev |grep tty ,看到有了 ttyusb0;

通过lsmod来查看当前系统中已经加载的模块,lsmod命令显示的当前内核已经加载的模块和驱动。
执行lsmod指令,会列出所有已载入系统的模块。Linux操作系统的核心具有模块化的特性,应此在编译核心时,务须把全部的功能都放入核心。您可以将这些功能编译成一个个单独的模块,待需要时再分别载入。
lsmod命令显示的当前内核已经加载的模块和驱动。以下面行为例:

scsi_mod 130637 6 qla2xxx,scsi

_transport_fc,mptspi, mptscsih, scsi_transport_spi,sd_mod

第1列:表示模块的名称,如scsi_mod表示scsi模块。

第2列:表示模块的大小,如130637表示scsi_mod模块的大小为130637字节。

第3列:表示依赖于该模块的个数,如6表示有6个模块依赖scsi_mod模块。

第4列:表示依赖模块的内容,如qla2xxx表示Qlogic FC HBA光纤HBA卡模块。

通常在使用lsmod命令时,都会采用类似lsmod|grep usbserial这样的命令来查询当前系统是否加载了某些模块。

通常会配合grep来查看指定模块是否已经加载,若没有加载,先确认模块是否已经安装,安装完成后可以用modprobe 来加载

modprobe insmod 加载模块和驱动

modprobe -r 卸载模块;
rmmod来卸载驱动。
卸载驱动模块的时候,使用modprobe -r 卸载,不需要将后缀名,即 modprobe -r hello 就可以
使用rmmod 卸载则必须要加后缀名.ko 即rmmod hello.ko
与内核模块操作相关的命令还有:lsmod modinfo depmod rmmod insmod modprobe

对于没有驱动或者不是用默默人驱动的话,可以参考 ,安装出 驱动;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值