Linux 内核--总线设备驱动模型(字符/块/网络设备 && platform设备)

本文介绍了Linux系统中的总线设备驱动模型,重点讲解了platform总线设备驱动模型及其与字符、块、网络设备的关系。在平台总线中,设备如SoC外设控制器和集成的I2C等被视为platform_device,而驱动为platform_driver。文章还通过实例分析了平台设备驱动和I2C总线设备驱动的注册过程,包括设备、驱动的注册以及匹配机制。
摘要由CSDN通过智能技术生成

一、概   述

       总线设备驱动模型主要包含总线、设备、驱动三个部分。

       现实总线:一个现实的Linux设备和驱动通常都需要挂接在一种总线上,对于本身依附于PCI、USB、I2C、SPI等的设备而言(例如USB、I2C等典型的设备),这自然不是问题。

       虚拟总线(platform总线):但是在嵌入式系统里面,对于一些设备(内部的设备)可能没有现成的总线,如SoC 系统中集成的独立的外设控制器、挂接在SoC内存空间的外设等确不依附于此类总线。基于这一背景,Linux发明了一种虚拟的总线,称为platform总线,相应的设备称为platform_device,而驱动成为 platform_driver。

        注意1:platform总线设备驱动模型与之前的三类驱动(字符、块设备、网络设备)没有必然的联系。设备只是搭载到了platform总线上,仅此而已。platform总线相比与常规的总线模型其优势主要是platform总线是由内核实现的,而不用自己定义总线类型,总线设备来加载总线。platform总线是内核已经实现好的。

         注意2:所谓的platform_device并不是与字符设备、块设备和网络设备并列的概念,而是Linux系统提供的一种附加手段,例如,在 S3C6410处理器中,把内部集成的I2C、RTC、SPI、LCD、看门狗等控制器都归纳为platform_device,而它们本身就是字符设备。


二、实例分析(TP:platform 总线设备驱动  +++  I2C总线设备驱动)


                        /*linux 驱动模型----基础知识*/

///在内核中是怎么按照driver mode(驱动模型)来实现整个系统的设备和驱动注册的???
1. 注册总线bus类型:
       在系统初始化阶段,会首先向内核注册各种常用的总线类型,比如pci, usb, spi, i2c, platform等等,当然你也可以自己发明一种总线类型注册上去。这部分代码一般放在./arch/arm/mach-xxx/board-xxx.c中。
       有两个重要的链表挂在bus上,一个是设备device链表,一个是驱动driver链表。
       它包含的最关键的函数:match()


2. 注册设备:在此之后,会将系统的设备列表,基本上整个系统的device都在这里了,一一地注册进内核,就是调用xxx_device_regisger注册的过程。
           (xxx_device_regisger:将自己加到设备device链表,然后使用总线bus匹配对应

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值