Linux驱动编程——ch340x驱动移植
主要概念:
ch340x驱动移植
作为通用器件,厂商都有提供适配各种平台的驱动。linux一般会提供驱动源码。
一般所谓驱动移植,就是将厂商的驱动源码拿来改一改,编译成自己系统版本适配的驱动。
ch340简介
usb转串口芯片,需要编写驱动。
实验目的:
移植,编译并加载官方 ch34x 驱动,实现 usb 转串口功能。
硬件电路:
开发板,一个 CH340 模块。
驱动源码下载:
下载地址:https://blog.csdn.net/JAZZSOLDIER/article/details/70169732
这里我选择 Linux 驱动
CH341SER_LINUX.ZIP 包含三个文件
ch34x.c ch34x 的驱动源码
Makefile 编译
readme.txt 一些版本及命令说明
代码:
我们主要修改 ch34x.c 两个地方
注释掉如下两行
修改Makefile,我没有使用自带的 Makefile,而是自己编写。
KERNELDIR := /home/sixer/imx_kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga
CURRENT_PATH := $(shell pwd)
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
target := ch34x
obj-m := $(target).o
APP_NAME := $(target)_app
build: kernel_modules
kernel_modules:
$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules
clean:
$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean
# rm -rf $(APP_NAME)
dir_exist = $(shell if [ -d "/nfsroot/$(target)/" ]; then echo "exist"; else echo "noexist"; fi)
$(info $(dir_exist))
install:
ifeq ("$(dir_exist)", "noexist")
$(shell mkdir /nfsroot/$(target))
#"文件夹不存在,已重新创建文件夹"
endif
# arm-linux-gnueabihf-gcc $(APP_NAME).c -o $(APP_NAME)
cp *.ko /nfsroot/$(target)/
编译运行:
make
编译
生成目标文件 ch34x.ko
make install
将目标拷贝到 NFS 目录
插上我的 ch340 模块
insmod ch34x.ko
加载ch34x驱动
实验现象:
[root@iTOP-iMX6UL]# cd /mnt/nfs_dir/ch34x/
[root@iTOP-iMX6UL]# ls
ch34x.ko
[root@iTOP-iMX6UL]# insmod ch34x.ko
usbcore: registered new interface driver ch34x
usbserial: USB Serial support registered for ch34x
[root@iTOP-iMX6UL]# usb 2-1.3: new full-speed USB device number 4 using ci_hdrc
ch34x 2-1.3:1.0: ch34x converter detected
usb 2-1.3: ch34x converter now attached to ttyUSB0
[root@iTOP-iMX6UL]#
总结:
加载完 ch34x 驱动,插上模块,系统立马识别出一路串口,说明我的移植成功。
微信号:
InsertingAll