为了解决Ubuntu插入FTDI设备可能出现没有ttyUSB*设备的问题。可以通过命令看一下结果:
dmesg | grep usb
例如发现错误:
ftdi_sio: Unknown symbol usb_serial_handle_sysrq_char (err -2)
这种错误有可能是因为模块是为不同版本的内核编译的,或者内核中缺失了模块所依赖的某些功能。
1. 确认内核版本
运行命令: uname -r查看内核版本信息。
2. 下载ftdi_sio
下面的网站下载对应内核版本的ftdi_sio.c、ftdi_sio.h和ftdi_sio_ids.h。
serial - drivers/usb/serial - Linux source code (v5.4.270) - Bootlin
3. makefile
在同目录内新建一个makefile文件
ifeq ($(KERNELRELEASE), )
KERNELDIR := /lib/modules/$(shell uname -r)/build
PWD :=$(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD)
clean:
rm -rf *.mk .tmp_versions Module.symvers *.mod.c *.o *.ko .*.cmd Module.markers modules.order *.a *.mod
load:
insmod ftdi_sio.ko
unload:
rmmod ftdi_sio
install: default
rmmod ftdi_sio || true
insmod ftdi_sio.ko || true
mkdir -p /lib/modules/$(shell uname -r)/kernel/drivers/usb/serial/ || true
cp -f ./ftdi_sio.ko /lib/modules/$(shell uname -r)/kernel/drivers/usb/serial/ || true
depmod -a
uninstall:
rmmod ftdi_sio || true
rm -rf /lib/modules/$(shell uname -r)/kernel/drivers/usb/serial/ftdi_sio.ko || true
depmod -a
else
obj-m := ftdi_sio.o
endif
4. 编译
sudo make clean
sudo make
sudo make install
5. 添加新的PID
对于一些老的内核和新的FTDI芯片,可能需要把新的pid添加到ftdi_sio
驱动中。
echo 0403 6048 >/sys/bus/usb-serial/drivers/ftdi_sio/new_id