1、控制台
1)控制台是一个虚拟的终端,它必须映射到真正的终端上
2)控制台是个只输出的设备,功能很简单,只能在内核中访问
2、伪终端
一种特殊的终端设备,由主-从两个成对的设备构成,当打开主设备时,对应的从设备随之打开,形成连接状态
输入到主设备的数据成为从设备的输出,输入到从设备的数据成为主设备的输出,形成双向管道
伪终端设备常用于远程登录服务器来建立网络和终端的关联
3、串口驱动
Linux 内核使用uart_driver来描述串口,包含串口设备驱动名、设备名、设备号等信息
struct uart_driver
{
struct module *owner;
const char *driver_name; //驱动名
const char *dev_name; //设备名
int major; /主设备号
int minor; //次设备号
int nr; // 设备数
struct console *cons; //
strruct uart_state *state;
struct tty_driver *tty_driver;
};
//注册串口驱动
int uart_regiater_driver(struct uart_driver *drv);
端口
uart_port用于描述一个UART端口(一个串口)的地址,FIFO大小、端口类型等信息
struct uart_port
{
spinlock_t lock;// 端口锁
unsigned int iobase; //IO端口基地址
unsigned char __iomem *membase; //IO内存基地址
unsigned int irq; // 中断号
unsigned char fifosize; //传输fifo大小
const struct uart_ops *ops; //操作函数指针
};
//添加端口
int uart_add_one_port(struct uart_driver *drv,struct uart_port *port);
//操作流程:
1)定义一个uart_driver的变量,并初始化
2)使用uart_register_driver来注册这个驱动
3)初始化uart_port和ops函数表、
4)调用uart_add_one_port()添加初始化好的uart_port