赞
踩
系统: win10 + ubuntu18.04.6
内核:非默认内核,新安装的内核 5.4.0-42 版本
uname -r
5.4.0-42-generic
问题:
用USB转串口线连接开发版串口,
ls /dev/tty*
ls /dev |grep tty
查找不到 ttyUSB0;
没有,说明系统不支持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
对于没有驱动或者不是用默默人驱动的话,可以参考 ,安装出 驱动;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。