Linux tty驱动学习 - UART驱动的open操作

/dev/ttyS*属于字符设备,所以在用户空间调用open系统调用打开该类设备,进入到tty核心层后调用的第一个函数是tty_fops中的tty_oepn。tty_open的前面三个判断是根据设备主次设备号来判断设备的类型,分别为/dev/tty(5,0),/dev/tty0(4.0),/dev/console(5,1),分别表示当前控制终端,当前虚拟终端,当前控制台终端。而uart设备对应的设备名为/dev/tty*,另外从uart_driver的定义中也可以看到设备的主设备号为4,次设备号从64开始,所以前面三个判断条件都不满足,直接跳到get_tty_driver()。get_tty_driver()函数就是利用设备的设备号跟tty_drivers链表上面所有的驱动去做比对,看当前设备的设备号是否在驱动所支持的范围里,如果有找到这样的驱动,则返回tty_driver的描述符,并返回该设备在驱动设备链表中的索引位置。

static struct tty_driver *get_tty_driver(dev_t device, int *index)
{
	struct tty_driver *p;

	list_for_each_entry(p, &tty_drivers, tty_drivers) {
		dev_t base = MKDEV(p->major, p->minor_start);
		if (device < base || device >= base + p->num)
			continue;
		*index = device - base;
		return tty_driver_kref_get(p);
	}
	return NULL;
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值