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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/300313.html
標籤:其他
下一篇:大量資料匯出Excel方案
