tty驱动调试

这两周调试tty驱动从uboot到linux驱动,遇到了一下问题,也学到了解决的方法,乘现在还有点印象总结一下:

question one:目的是打开串口uart1,对应ttyS1设备,首先要打开uart1的对应的引脚配置,在Board-m3-reff33.c  (z:\amlogic-0920-updata-fv-new\kernel\arch\arm\mach-meson3)中配置引脚。

question two:在uboot中打开串口,可以知道有串口数据接收,但接受的数据不对让我郁闷很久,最后发现在uboot中为了节能主时钟频率为32k当让读不到了,我的uart1波特率9600。要注意调试顺序。

question three:打开uart2,我勒个去呀,首先我直接调用ttyS2连设备都打不开,真的很郁闷,最后发现是ttyS2的设备权限是root不是system的,在android的环境先不想linux权限吃的很紧,只好在驱动init第一个进程(那时还处于system权限下)时,调用init.rc和uevent.rc来配置,最后发现还是uevent.rc中修改较好,大多数的驱动文件的权限修改都在在这里(device\amlogic\f16ref\init.rc)和(device\amlogic\common\ueventd.rc)


接下来,基础的介绍一下tty驱动的设备平台:tty驱动有三种:控制台、串口和PTY。

1.查看tty设备,在proc/tty/drivers文件中可以看到它们对应的类型。

2.当注册class后,在sys\class\tty中有对应的子目录。

3.tty的驱动程序的主要结构体是tty_driver,用来注册和注销驱动程序

 a.通过alloc_tty_driver(type):申请分配

 b.tty_set_operations是拷贝具体的操作函数到operation中,

 c.tty_register_driver(tty_driver):向tty核心注册驱动程序,注册时会有三个参数,tty_driver结构指针、设备的此设备号、指向该设备的所绑定的device结构体指针。

 d.tty_driver中的init_termios可以配置都铎初始化参数,同时tty接收到数据后直接送到tty核心,而不是read函数,所以tty驱动中没有read函数,提供了几个函数:

<1>tty_flip_buffer_push

<2>tty_insert_flip_char

你可能感兴趣的:(驱动)