Linux TTY驱动/串口驱动开发

一、TTY介绍

当前主要有三种类型tty设备及驱动程序:控制台、pty和串口。其中控制台和pty可看作为虚拟tty设备,物理tty设备包含串口、USB转串口、SPI转串口等。

二、TTY设备及驱动信息查看

确定tty设备及驱动程序类型可查阅/proc/tty/drivers文件。如下所示:

文件从左至右列举了:驱动程序名称,默认节点名称,驱动程序主设备号,次设备号范围,tty驱动程序类型。

以cdc-acm驱动为例,驱动为acm,节点名为/dev/ttyACMx,类型为serial串口。

当前注册并存在于内核的tty设备在/sys/class/tty下都有自己的子目录,如将USB CDC转双串口芯片CH342接入USB主机时,信息如下:

三、TTY驱动概览

Linux tty驱动包含硬件、tty驱动层、tty线路规程及tty核心层

tty驱动层:将发送给它的数据格式化成硬件能理解的格式,并从硬件那里接收数据。

tty线路规程:使用特殊方法,把从用户或硬件接收的数据格式化,这类格式化通常使用一些协议完成转换,比如PPP或者蓝牙。

tty数据发送:tty核心从用户层得到发往tty设备的数据,然后把数据发送给tty线路规程驱动,该驱动负责把数据传递给tty驱动程序,tty驱动程序对数据进行格式化,然后才能发送给硬件。

tty数据接收:tty硬件接收的数据会传递给tty驱动程序,然后流入tty线路规程驱动程序,接着是tty核心,最后用户从tty核心获取数据。

四、TTY驱动实现

tty驱动的注册与注销

tty驱动程序的主要数据结构是结构tty_driver,被用来向tty核心注册和注销驱动程序。

注册tty驱动程序时,会同时注册字符设备驱动。

注册tty驱动

接口:tty_register_driver

  • 指定驱动名
  • 指定串口设备名
  • 分配主从设备号

注销tty驱动

接口:tty_unregister_driver

实现TTY操作函数集

tty核心将和硬件有关的操作,抽象、封装出来,形成名称为struct tty_operations的数据结构,具体的tty driver不需要关心具体的业务逻辑,只需要根据实际的硬件情况,实现这些操作接口即可。

这些操作接口主要为上层tty应用程序操作硬件提供硬件实现,驱动和应用通过termios结构体关联,需要实现的通信接口主要包括:

  1. 设备的打开(open)和关闭(close)
  2. 设备的读(read)和写(write)
  3. 线路设置(set_termios):可看作串口参数配置
  4. 设置与获取控制线路参数(tiocmget/tiocmset):可看作MODEM信号读写
  5. 其他自定义ioctls方法:如设置和获得串口线路信息等

如:CDC驱动中相应实现

/*
 * TTY driver structures.
 */

static const struct tty_operations acm_ops = {
	.install =			acm_tty_install,
	.open =				acm_tty_open,
	.close =			acm_tty_close,
	.cleanup =			acm_tty_cleanup,
	.hangup =			acm_tty_hangup,
	.write =			acm_tty_write,
	.write_room =		acm_tty_write_room,
	.ioctl =			acm_tty_ioctl,
	.throttle =			acm_tty_throttle,
	.unthrottle =		acm_tty_unthrottle,
	.chars_in_buffer =	acm_tty_chars_in_buffer,
	.break_ctl =		acm_tty_break_ctl,
	.set_termios =		acm_tty_set_termios,
	.tiocmget =			acm_tty_tiocmget,
	.tiocmset =			acm_tty_tiocmset,
	.get_serial =		get_serial_info,
	.set_serial =		set_serial_info,
	.get_icount =		acm_tty_get_icount,
};

五、TTY应用程序

可参考WCH发布的串口应用源码:https://github.com/WCHSoftGroup/tty_uart

​​​​​​​

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PC技术小能手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值