android zigbee ttysac2,串口驱动程序设计详解---串口初始化(上)

TTY驱动程序架构:

1. TTY概念解析

1.1 /dev/ttySCA0

1.2 /dev/tty1-n

1.3 /dev/console

在linux系统中,终端是一类字符型设备,它包括多种类型,通常使用tty来简称各种类型的终端设备。

. 串口终端(/dev/ttyS*)

串口终端是使用计算机串口连接的终端设备。Linux把每个串行端口都看做是一个字符设备。这些串行端口所对应的设备名称是/dev/ttySAC*;

.控制台终端(/dev/console)

在Linux系统中,计算机的输出设备通常被称为控制台终端,这里特指printk信息输出到设备。/dev/console是一个虚拟的设备,它需要映射到真正的tty上,比如通过内核启动参数“console=ttySCA0”就把console映射到了串口0

. 虚拟终端(、dev/tty*)

当用户登录时,使用的是虚拟终端。使用Ctcl+Alt[F1 - F6]组合键时,我们就可以切换到tty1、tty2、tty3等上面去。tty*就称为虚拟终端,而tty0则是当前所使用虚拟终端的一个别名。

2. TTY架构分析

a0f732b81780bfbefba1db3bf95dc5fa.png

3d248e6a1090d0538122c74a61ed069b.png

下面来通过一个回溯功能从内核代码来印证上面一张图的tty架构各函数调用关系!

第一红色箭头对应的函数就是上图中的driver_write()

c644f7c756de82e1a17829be2a106d00.png

上图中第二个红色箭头部分:在该函数处加上一个dump_stack函数保存然后重新编译内核

通过tftp下载到开发板启动内核会看到串口终端打印出这个函数调用的回溯信息!

今天电脑难产了!编译内核用了好久,之前几分钟就搞定了!

10c24f2f2317527ec0b97c635174b644.png

开发板启动内核然后dmesg命令查看回溯打印的信息(这里为什么没直接打印到串口要用dmesg和printk打印级别有关)

4ac5e7da6213d3caafe012c525f9bb68.png

这里打印的比较多,仔细看其实都是重复的这里我里面的一段复制粘贴下来:

[] (dump_stack+0x18/0x1c) from [] (s3c24xx_serial_start_tx+0x14/0xb4)

[] (s3c24xx_serial_start_tx+0x14/0xb4) from [] (uart_start+0x64/0x68)

[] (uart_start+0x64/0x68) from [] (uart_write+0xc0/0xe4)

[] (uart_write+0xc0/0xe4) from [] (do_output_char+0x16c/0x1d8)

[] (do_output_char+0x16c/0x1d8) from [] (process_output+0x38/0x54)

[] (process_output+0x38/0x54) from [] (n_tty_write+0x204/0x444)

[] (n_tty_write+0x204/0x444) from [] (tty_write+0x14c/0x244)

[] (tty_write+0x14c/0x244) from [] (redirected_tty_write+0x58/0x68)

[] (redirected_tty_write+0x58/0x68) from [] (vfs_write+0xbc/0x150)

[] (vfs_write+0xbc/0x150) from [] (sys_write+0x44/0x74)

[] (sys_write+0x44/0x74) from [] (ret_fast_syscall+0x0/0x30)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值