Evans_li

个性签名:happy more day

  • 2021-09-14
  • 发表了主题帖: Linux驱动编程——ch340x驱动移植

    Linux驱动编程——ch340x驱动移植 主要概念: ch340x驱动移植 作为通用器件,厂商都有提供适配各种平台的驱动。linux一般会提供驱动源码。 一般所谓驱动移植,就是将厂商的驱动源码拿来改一改,编译成自己系统版本适配的驱动。 ch340简介 usb转串口芯片,需要编写驱动。 实验目的: 移植,编译并加载官方 ch34x 驱动,实现 usb 转串口功能。 硬件电路: 开发板,一个 CH340 模块。 驱动源码下载: 下载地址:http://www.wch.cn/download/CH341SER_LINUX_ZIP.html 这里我选择 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  

  • 发表了日志: Linux驱动编程——ch340x驱动移植

  • 2021-09-11
  • 发表了主题帖: 创建子进程实例

      Linux进程基础——创建子进程 主要概念:     父进程与子进程         创建新进程的那个进程称为父进程,新进程称为子进程。使用 fork() 函数创建子进程。 实验目的:     创建子进程,分别在父进程和子进程中打印各自的 PID。 相关函数: #include <sys/types.h> #include <unistd.h> pid_t fork(void) //创建进程 pid_t getpid(void) //获取进程ID pid_t getppid(void) //获取父进程ID 代码: //fork.c #include <stdio.h> #include <unistd.h> int main(void) { pid_t pid; pid = fork(); if(pid < 0) { printf("fork is error \n"); return -1; } if(pid > 0) { printf("This is parent, parent pid is %d\n", getpid()); } if(pid == 0) { printf("This is child, child pid is %d, parent pid is %d\n", getpid(), getppid()); } return 0; } 编译运行: sixer@ubuntu:~/imx_usr/sys_app/01_process$ gcc -o fork fork.c sixer@ubuntu:~/imx_usr/sys_app/01_process$ ./fork 实验现象: sixer@ubuntu:~/imx_usr/sys_app/01_process$ ./fork This is parent, parent pid is 2039 This is child, child pid is 2040, parent pid is 2039 总结:     可见父进程PID为2039,父进程创建了PID为2040的子进程。      

  • 2021-06-23
  • 加入了学习《电机应用开发实战指南-基于STM32》,观看 前言

学过的课程

最近访客

< 1/1 >

统计信息

已有8人来访过

  • 芯积分:15
  • 好友:--
  • 主题:2
  • 回复:11
  • 课时:--
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言