Linux串口驱动程序(4)-数据发送

本文详细分析了Linux串口驱动程序中数据发送的流程,从应用程序调用write开始,经由tty_write、n_tty_write、uart_write等函数,最终在中断函数s3c24xx_serial_tx_chars中实现数据发送。在s3c24xx_serial_tx_chars函数中,检查x_char是否有数据,判断循环缓冲状态,并通过while循环逐个将数据写入串口FIFO。当缓冲区数据量小于特定阈值时,会唤醒等待的发送进程,并在缓冲区为空时关闭发送中断。
摘要由CSDN通过智能技术生成

1.tty数据发送调用关系

  • 怎么样才能找到发送数据所使用的函数呢?打开uart_register_driver函数,找到里面的tty_register_driver,转到定义,这里调用了tty_fops这个结构,这几结构里就保存了读写串口的函数tty_write:
static const struct file_operations tty_fops = {
	.llseek		= no_llseek,
	.read		= tty_read,
	.write		= tty_write,
	.poll		= tty_poll,
	.unlocked_ioctl	= tty_ioctl,
	.compat_ioctl	= tty_compat_ioctl,
	.open		= tty_open,
	.release	= tty_release,
	.fasync		= tty_fasync,
};
  • ty_write的函数又调用n_tty_write函数来实现,n_tty_write又调用uart_write函数,最终找到串口驱动程序中的s3c24xx_serial_start_tx,来实现串口的方式数据。
static void s3c24xx_serial_start_tx(struct uart_port *port)
{
	struct s3c24xx_uart_port *ourport = to_ourport(port);
 
	if (!tx_enabled(port)) {
		if (port->flags & UPF_CONS_FLOW)
			s3c24xx_ser
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值