linux内核的串口驱动架构之我的形象理解

前面我们分析i2c的驱动框架的时候,我们把整个的linux系统比喻成一个超大型公司,其中i2c的一条总线类似一个测试部,另外一条总线是另外一个测试部,两个测试部门测试的类型是不同的,所以成了不同的部门。
这样,i2c_core我们必须成了公司的管理部门和管理制度,有了这个制度,我们就知道如何新建一个测试部门(i2c总线啊),如何理顺这个测试部门的工作流程(i2c所谓的算法),以及测试部门如何招聘增加人员(i2c的设备注册等)。
i2c_adpter可以必须中测试部门的主管或者对外接口,用于接收公司内部或者外部发过来的任务和命令。而/dev中注册可以理解成测试部门对外开放,可以接受公司以外的委托测试任务。

但是,我们再研究uart的驱动,发现uart部分和i2c还是有很大不同的。这些不同主要有如下原因。
1)i2c总线主要用于内部,但是uart设计之初,其实倾向于外部应用,也就是x86和windows下的com口
2)uart是一个最传统的部门,linux早年就已经设计了一套完整的策略如何操作uart,也就是tty。我们必须兼容这些老的东西,否则,一些老的应用和程序就无法运行了。
3)i2c是多设备可以共享的总线,类似pci,而uart一个一对一的总线,也就是一个master或者控制器,在一个时间内之内接一个slaver。

如果,我们还以公司的模型去理解这个系统,我们应该如何理解呢?
很好,我们只需要把这种类型的驱动给比喻成公司的大供应商管理就可以了。随着社会分工的细化,很多公司把生产,开发等自己不擅长的工作外包出去,对于特别大的供应商,例如富士康之类的,可能就需要一个部门专门来管理他了。
好了,有了这个例子,我们就可以理解uart的驱动系统架构了。

1)首先,我们必须有一个机制就是这样的一个客户部门的成立和注册机制,这个就是serial_core中间提供,其提供在公司内部建立一个这样部门的管理流程和制度,而且提供了这个部门的岗位职责和运行规范。
2)adpter的驱动,实际提供了流程和岗位职责的落实,就是实际实施总线读写。
3)因为供应商管理部门属于公司的传统业务,其关系到公司产品的质量和成本等方法面面,而且公司已经有完成的质量、成本和交货管理系统,所以,这个驱动必须向公司再注册,以接口质量、成本和交货系统。这就是和传统的tty连接的例子。

这样,如果我们想push公司交货,我们只需要给公司销售部门压力(/dev下面tty接口),然后tty自动会连接到这个供应商管理部门。

后面,我会按照这个模型仔细分析每一个数据结构和模型实现上的对应。



你可能感兴趣的:(研究)