学习环境: linux 2.6.32.2 mini2440串口驱动
要看懂UART的整个程序,需要看/drivers/char/tty_io.c 、tty_ldisc.c 和/drivers/serial/s3c2440.c 、samsung.c、serial_core.c
先看UART驱动的总图。。
UART是TTY的一类,tty体系包括了,tty核心,tty线路规程,tty驱动三大部分,这个体系就如一个子系统一样,如下图
这种图看着感觉很简单,也很有层次,实际上很复杂,图1只是这整个驱动体系的一部分,其实驱动开发者主要关心的是这两个文件如何编写s3c2440.c 、samsung.c,其他的linux系统都已经实现。
按照最简单的驱动,在驱动完成之后应该能看到两点: 1、在/dev下有设备文件 2、在用cat /proc/devices 下应该能看到这个设备的主设备号和设备名
第一点 s3c24xx_serial_probe(dev, &s3c2440_uart_inf);---->uart_add_one_port(&s3c24xx_uart_drv, &ourport->port);----->
tty_register_device(drv->tty_driver, uport->line, uport->dev);------>device_create(tty_class, device, dev, NULL, name);
第二点 uart_register_driver(&s3c24xx_uart_drv);---->tty_register_driver(normal);中
cdev_init(&driver->cdev, &tty_fops);
driver->cdev.owner = driver->owner;
error = cdev_add(&driver->cdev, dev, driver->num);