系统-驱动开发中,设备是如何挂接到驱动上的???(大致的过程即可)

问题描述

驱动开发中,设备是如何挂接到驱动上的???(大致的过程即可)

问题:
1、基于dts/dtsi的内核系统,是通过dts/dtsi的读取来注册设备的吗?如果不是,那设备注册/挂接的
操作在哪实现的?
2、在static struct i2c_driver 结构中,
.driver = {
.name
.owner = THIS_MODULE,
.of_match_table
},
.id_table
};
of_match_table 与id_table 的作用???

解决方案

  1. 基于dts/dtsi的内核系统,应该是通过dts/dtsi的读取来注册,加载设备的驱动程序。
  2. of_match_table (Open FirmwareTable)定义了DTS/DTSI相关的ID。在系统启动过程中使用的。
  3. id_table的类型为i2c_device_id,记录I2C总线定义的Device ID,是在系统加载该模块的时候用来判别对应的驱动模块和设备ID是否匹配时候用的。
时间: 2024-11-10 00:26:32

系统-驱动开发中,设备是如何挂接到驱动上的???(大致的过程即可)的相关文章

Android开发中如何实现自动挂断电话的代码

实现方法一代码 1.准备AIDL文件 挂断电话的AIDL文件都是Android自带的文件,我们可以从Android的源代码中找到这两个文件,它们分别是NeighboringCellInfo.aidl和ITelephony.aidl 我把NeighboringCellInfo.aidl放在项目的android.telephony包下,将ITelephony.aidl放在com.android.internal.telephony包下 NeighboringCellInfo.aid具体内容如下: /

linux驱动开发--字符设备:静态分配设备号

字符设备(char device)         采用字节流方式访问的设备称为字符设备,通常智能采用顺序访问方式,也有极少数可以前后移动访问指针的设备(如:帧捕捉卡等设备).系统标准字符设备,例如:字符中断.串口等设备.常见待开发设备驱动的字符设备,例如:触摸屏.键盘.视频捕捉设备.音频设备等. 设备号 主设备号     用于标识设备类型,内核代码根据该号码对应设备文件和对应的设备驱动程序 次设备号     用于标识通类型的不同设备个体,驱动程序根据该号码辨别具体操作的是哪个设备个体. 设备号

linux驱动开发--字符设备:自动创建设备节点

自动创建设备文件 定义在<linux/device.h>中 class结构:该结构体类型变量对应一个设备类,被创建的类存放在/sys目录下面 device结构:该结构体类型变量对应设备,被创建的设备存放于/sys目录下面 在加载驱动模块时,用户空间中的udev会自动响应device_create()函数,在/sys下寻找对应的类,从而为这个设备在/dev目录下创建设备文件 内核版本问题: 在内核2.4版本中使用devfs_register 在内核2.6早起版本中使用class_device_r

linux驱动开发--字符设备:动态分配设备号

设备号的动态分配 int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name);dev:保存分配到的设备号baseminor:希望分配的起始次设备号count:需要分配的设备号数目name:设备名称(出现在/proc/devices)         返回:成功返回0, 失败返回负值 请求内核动态分配count个设备号,且次设备号从baseminor开始 /** *Copyrig

《Cucumber:行为驱动开发指南》——1.2 行为驱动开发

1.2 行为驱动开发 行为驱动开发(Behaviour-Driven Development,BDD)1建立于测试驱动开发的基础之上,它标准化了那些优秀TDD实践者的良好习惯.优秀的TDD实践者以自外向内的方式开发软件,最初他们会编写一个失败的客户验收测试,该测试从客户的视角描述系统的行为.作为BDD实践者,我们细心编写验收测试,作为所有团队成员都能读懂的实例.我们使用这个编写实例的过程来获取业务人员的反馈,以便在开始实现软件之前,我们就知道自己是否是在编写正确的软件.在此过程中,我们会主动开发

linux驱动开发--字符设备:创建一组设备节点

cdev改进 为设备驱动支持多个设备个体做准备,针对cdev进行改进 将代表字符设备的cdev对象包含在设备驱动定义的私有数据结构体中 对设备驱动私有数据结构体采用内核内存分配方式为其分配内存 将为每个设备添加cdev对象和创建设备节点封装为一个独立函数 支持多个设备个体 为设备驱动支持多个设备个体对驱动进行改进 循环调用为每个设备添加cdev对象和创建设备节点而封装的独立函数实现在系统中添加对多个设备个体的支持 /** *Copyright (c) 2013.TianYuan *All rig

linux驱动开发--字符设备:通过cdd_cdev结构中的led变量区分是哪个节点,private_data使用

private_data改进 为设备驱动支持多个设备个体做准备,针对private_data进行改进 在设备打开操作中通过inode中保存的i_cdev获取代表当前设备的cdev对象 通过代表当前设备的cdev对象得到包含该对象的设备私有数据结构体 将设备私有数据结构体指针保存到struct file的private_data成员中 在其它设备操作中直接使用保存在struct file的private_date成员中的当前设备私有数据结构体 /** *Copyright (c) 2013.Tia

linux驱动开发--字符设备:简单的file_operations示例

字符设备结构struct cdev 内核使用该结构来表示一个字符设备,在<linux/cdev.h>中定义. 重要成员: struct kobject kobj;//设备对象 struct module *owner;//该设备的拥有者驱动模块 struct file_operations *ops;//设备操作集合 struct list_head list;//内核维护的字符设备链表成员 dev_t dev;//字符设备号 unsigned int count;//设备个数 文件结构 st

linux驱动开发--字符设备:原子操作

解决竞态问题的途径是保证对共享资源的互斥访问,所谓互斥访问是指一个执行单元在访问共享资源的时候,其他的执行单元被禁止访问. 访问共享资源的代码区域称谓临界区(critical sections),临界区需要以某种互斥机制加以保护.中断屏蔽.原子操作.自旋锁和信号量是Linux设备驱动中可采用的互斥途径. 原子操作 原子操作指的是在执行过程中不会被别的代码路径所中断的操作. Linux内核停工了一系列函数来实现内核中的原子操作.这些函数分为两类,分别针对位和整型变量进行原子操作.他们的共同点是在任