Linux驱动(1)概述

Linux驱动过程总览

在这里插入图片描述

  以上是Linux驱动从入口函数到驱动probe函数的整个流程。

  module_init(xxx_init_module):驱动入口函数,一般在驱动代码的最下方。其参数即为驱动初始化函数。

module_init(xxx_init_module)//这就入口
module_exit(xxx_exit_module)//这就设备退掉的时候调的,不是出口啊,一般来说不要...

  xxx_init_module:驱动初始化函数,当一个设备接入后,它的路就从这里开始了。
  xxx_register_driver:这通常是一个宏控,其本体为__xxx_register_driver。

#define xxx_register_driver(drv) \
			__xxx_register_driver(struct xxx_driver *,struct module *)
//这个xxx_driver还挺关键,随后再议。

  __xxx_register_driver:这个函数中包含了很多对驱动结构体中函数的重定向,这个之后再说,先关注一下它的返回值。

int __xxx_register_driver(struct xxx_driver *drv ,struct module *owner)
{
   
	...
	return driver_register(drv->driver);
}

  driver_register:这个函数的运行结果就是__xxx_register_driver函数的返回值。

int driver_register(struct device_driver *drv){
   }//device_driver它出现了...0.0

  bus_add_driver:在函数driver_register中运行,它的结果将决定总线是否可完成设备和驱动的匹配。参数和上面那个函数是一样的。

  driver_attach:它来了,它来了,他们又开始套娃了 …可能是我太菜了,不能理解这个函数是干嘛的…

int driver_attach(struct device_driver *drv)
{
   
	return bus_of_each_dev(drv->bus,NULL,drv,__driver_attach);
}

  bus_for_each_dev:driver_attach函数只做了一件事,就是返回这个函数的结果。(所以为什么不直接返回这个函数的结果???)这个函数有四个参数,我就不打出来了…费劲…

  fn(dev,data):bus_for_each_dev函数的第四个参数是__driver_attach函数,fn事实上就是指向__driver_attach的函数指针。所以这里事实上运行的是__driver_attach

  driver_match_device:这个函数是__driver_attach函数中的一个函数,主要目的就是为了匹配设备和驱动。它将会返回这么个玩意:别问我这干啥的,我也不知道…嘿嘿嘿… 不过假如没匹配上,那这个驱动就GG了。

static inline int driver_match_device(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值