Linux TTY 驱动
相关链接:
http://blog.csdn.net/dongliqiang2006/archive/2009/09/05/4523563.aspx
字符设备
1,字符设备层
在Linux中是作为一个文件来出现的,所有对字符设备的操作都是通过file_operations接口来进行的:
struct cdev {
struct kobject kobj;
struct module *owner;
const struct file_operations *ops;
struct list_head list;
dev_t dev;
unsigned int count;
};
void cdev_init(struct cdev *, const struct file_operations *);
这个函数初始化指定的cdev结构:其中最重要的步骤就是设置ops
static struct kobj_map *cdev_map;
int cdev_add(struct cdev *, dev_t, unsigned);
cdev_map应该是所有cdev的一个集合,cdev_add函数负责把指定的cdev加入到这个集合中,以便以后的查询
2,line_discipline层(线路规程)
这一层通过tty_struct的ldisc成员实现不同的线路规程,负责连接上层的文件操作和下层的tty操作,并且加入线路规程层的处理逻辑;例如tty_write是导出给上层文件的写操作函数,这个函数一般会调用线路规程成员ldisc的write函数,再由后者调用tty驱动(例如n_tty中就是调用write_chan的),全部的导出函数如下:
static const struct file_operations tty_fops = {
.llseek = no_llseek,
.read = tty_read,
.write = tty_write,
.poll = tty_poll,
.ioctl = tty_ioctl,
.open = tty_open,//tty_open是个比较重要的函数,因为这个函数会调用init_dev,后者会初始化重要的结构tty_struct,并且设置file的private_data为tty_struct实例
.release = tty_release,
.fasync = tty_fasync,
};
3,tty层
介于线路规程层和硬件驱动之间,向上为线路规程提供接口(tty_driver),向下则提供硬件管理(例如tty_operations.start);写操作(例如tty_operations.write)向线路规程层提供(因为些操作一般都是线路规程层主动发起,而读操作则是硬件层主动发起),所有的写操作数据都是进入到tty层的一个circle buffer中,tty层会在适当的时候调用硬件层的写操作来输出这些数据;而读操作(例如tty_insert_flip_string)则向硬件层提供,所有读入数据都存放在tty的read buffer中,在适当的时候read buffer中的数据会通过flush_to_ldisc函数推送到线路规程层(具体的硬件驱动在完成数据接收后,需要调用tty_flip_buffer_push函数来推送数据)
注:tty_bufhead结构中有一个work_struct结构,这个结构负责
相关文档:
软件安装命令
1. tar
tar 命令的基本用法为:
tar [选项] 文件名
常用的选项包括
-c 创建一个新的档案文件
-t 查看档案文件的内容
-x 分解档案文件的内容
-f 指定档案文件的名称
-v 显示过程信息
-z 采用压缩方式
举例
1 tar -czf oracle.tar.gz /u01/app/oracle /etc/oratab /home/oracl ......
ifconfig 命令,查看/配置网络信息
ifconfig的语法为
ifconfig [-a] [-V] [-s] <interface> [[<AF>] <address>]
[[-]broadcast [<address>]]
[netmask <address>]
[up|down]
其中 interface 为网卡名 address 为 IP 地址 broadcast 表示设置广播
......
昨天在编写一个程序的时候发现需要链接的静态库都确定存在,指定的路径也没有问题,但是编译总是出现链接问题,找不到实现,才发现原来如果同时链接多个静态库,并且如果这些静态库之间存在相互依赖关系的话,需要按一定的顺序进行链接,例如:如果libb.a依赖liba.a,那么编译参数应该写成这样: -lb -la ......
源码的安装一般由3个步骤组成:配置(configure)、编译(make)、安装(make install),具体的安装方法一般作者都会给出文档,这里主要讨论配置(configure)。Configure是一个可执行脚本,它有很多选项,使用命令./configure –help输出详细的选项列表,如下:
-bash-3.00# ./configure --help
Usage: configure ......
Linux安装Sphnix 记录
先当然是从sphnix网站下载sphinx源码包,当前最新版本是:http://www.sphinxsearch.com/downloads/sphinx-0.9.8.1.tar.gz。当然,还需要保证你的系统已经安装了mysql。
其次,就是依照官方的安装指导进行安装了,基本步骤如下:
解 ......