当前位置: 首页 > wzjs >正文

网站排名分析大型网站开发基本流程

网站排名分析,大型网站开发基本流程,注册网站那里能注册,网站建设项目执行情况报告模板上一篇文章(Linux驱动框架——字符设备驱动节点的创建)中介绍了静态节点创建的方式。但是Linux驱动中的设备一般是通过设备树配置的,是通过一些属性(比如compatible)判断设备需要某种驱动。本文会提一下动态设备创建的…

        上一篇文章(Linux驱动框架——字符设备驱动节点的创建)中介绍了静态节点创建的方式。但是Linux驱动中的设备一般是通过设备树配置的,是通过一些属性(比如compatible)判断设备需要某种驱动。本文会提一下动态设备创建的驱动程序框架,讲解驱动插入内核时(insmod命令)大概发生了什么,促使驱动和设备相匹配。

1、动态设备节点创建的驱动程序

        和静态创建不同,动态创建时不在驱动程序的init函数中进行设备号申请、设备创建等操作。而是只进行驱动在总线上的注册等到设备到来,或者驱动插入内核时再进行匹配。下面是框架代码:

        init和remove,分别在注册和注销驱动。

static int tmc_i2c_init(void){/*注册i2c_driver*/return i2c_add_driver(&tmc_i2c_driver);
}static void tmc_i2c_exit(void){/* 注销i2c_driver */i2c_del_driver(&tmc_i2c_driver);
}

        i2c驱动结构体如下定义:

static const struct of_device_id tmc_i2c_dt_ids[] = {{.compatible = "tmc_i2c_test",},
};static struct i2c_driver tmc_i2c_driver={.driver = {.name = "tmc_i2c_drv",.of_match_table = tmc_i2c_dt_ids,},.probe = tmc_i2c_probe,.remove = tmc_i2c_remove,//.id_table = tmc_i2c_ids,
};

         设备匹配成功的probe函数,和卸载时的remove函数如下:

static int tmc_i2c_probe(struct i2c_client *client){struct i2c_adapter *adapter = client->adapter;struct device_node *np = client->dev.of_node;/*记录client*/ g_client = client;printk("match probe i2c\n");/*注册字符设备*/major = register_chrdev(0,"tmc_i2c_chrdev",&i2c_drv);i2c_class = class_create("tmc_i2c_class");if (IS_ERR(i2c_class)) {printk(KERN_ERR "i2c_class: failed to allocate class\n");return PTR_ERR(i2c_class);}device_create(i2c_class,NULL,MKDEV(major,0),NULL,"tmc_i2c_device");return 0;
}static void tmc_i2c_remove(struct i2c_client *client){/*反注册字符设备*/device_destroy(i2c_class,MKDEV(major,0));class_destroy(i2c_class);unregister_chrdev(major,"tmc_i2c_chrdev");return;
};

        下面对各部分代码进行详细的介绍。

2、 驱动模块init初始化

        在这一步中,调用i2c_add_driver(实际上调用的就是i2c_register_driver)函数,把对应驱动结构体定义的probe、remove、设备树节点匹配信息注册到了i2c总线当中。 并进行设备树信息匹配。

static int tmc_i2c_init(void){/*注册i2c_driver*/return i2c_add_driver(&tmc_i2c_driver);
}

         从源码中可以看到,会对应初始化driver驱动结构体的总线类型,这里是i2c_bus_type,从而复用i2c驱动的基本功能。随后进行driver_register(),把驱动注册到相应的总线上(这个&i2c_bus_type的赋值操作后续会用到)。

/ drivers / i2c / i2c-core-base.c:1964

        在driver_register中会通过driver_find判断该总线上是否有同名驱动,linux中在同一总线上不允许同名驱动的存在。随后执行bus_add_driver把驱动挂载到相应总线上。(后续代码不懂

/ drivers / base / driver.c:222

        在bus_add_driver函数中存在这么一段跟probe相关的关键代码。它通过判断总线是否允许自动探测,来决定是否执行驱动和设备的自动匹配过程。 也就是说在驱动初始化时,就会执行匹配和probe的过程

 / drivers / base / bus.c:672

        在driver_attach中,即使用__driver_attach函数,对总线上的每个设备与驱动进行匹配。

 

        在__driver_attach中,通过下图所示函数进行驱动与设备的匹配,并进行后续操作(如果匹配上了)。

 

        这个match函数,就是通过上述从i2c_bus_type中赋值得到的。可以查看此结构体的定义从而找到具体的match函数如下。可以看到i2c驱动子系统的匹配过程,是设备树信息->ACPI信息->I2C设备节点信息。  (一般就考虑设备树信息了吧)

        在设备树匹配中,可以看到是对compatible、type、name属性进行匹配。  可以看到还有一个score记录最优匹配驱动。 其中权重最大的是compatible,其次type、最后是name属性

        匹配上了后,就执行相应的probe函数,并把当前的设备节点dev当作参数传入。(会循环遍历总线上的所有设备进行匹配)。probe 的过程就是上一篇文章讲的,设备号创建、操作函数的关联、类创建、真实设备节点创建。

 3、remove设备

        remove的过程和probe相反,就是注销设备节点、销毁类(可能一个设备开一个类都是够用的)、释放设备结构体。

 


文章转载自:

http://9tfYYTYm.Ltpzr.cn
http://UnYxOYjK.Ltpzr.cn
http://rt5hXNzp.Ltpzr.cn
http://3onNJGXl.Ltpzr.cn
http://vzNx2KLH.Ltpzr.cn
http://SCGJP3El.Ltpzr.cn
http://GlVOOB8t.Ltpzr.cn
http://OF9WQok2.Ltpzr.cn
http://cSNUG1MQ.Ltpzr.cn
http://qpxmj3xc.Ltpzr.cn
http://GK8b0TmW.Ltpzr.cn
http://vI1HWwqi.Ltpzr.cn
http://aYmTpYcW.Ltpzr.cn
http://FWzchz6U.Ltpzr.cn
http://DochOEcW.Ltpzr.cn
http://OJgBvNGl.Ltpzr.cn
http://bdw6c85A.Ltpzr.cn
http://cV00d8fz.Ltpzr.cn
http://IBeiDAIQ.Ltpzr.cn
http://AMxGggjd.Ltpzr.cn
http://he4ugsjb.Ltpzr.cn
http://An5CZyvm.Ltpzr.cn
http://uZv5JG4R.Ltpzr.cn
http://h5lPDsRt.Ltpzr.cn
http://NWNbadU4.Ltpzr.cn
http://Yziq6ILB.Ltpzr.cn
http://gNshYKUE.Ltpzr.cn
http://kcGS4JtF.Ltpzr.cn
http://dRgrGJbO.Ltpzr.cn
http://ORRVS1OX.Ltpzr.cn
http://www.dtcms.com/wzjs/696378.html

相关文章:

  • 网站的子域名怎么设置珠海高端网站建设报价
  • 做网站设计工资多少钱js怎么做网站
  • 官方网站平台下载wordpress好玩
  • 网站备案是需要去哪里做做网站有没有前景
  • 怎么查询网站空间商环保工程 技术支持 东莞网站建设
  • 一个人做网站 优帮云html在线编程网站
  • 网站收录查询临沂seo自己动手制作网站
  • 公司建个网站要多少钱seo诊断分析
  • 无法打开建行网站电商网站平台建设视频
  • 如何制作简单网站wordpress 视频网站
  • 做网站怎么上传建筑网站的思想
  • 网站建设方案的重要性成功营销的案例
  • 网站开发语音大数据营销的应用领域
  • 母婴会所 网站源码下载游戏的软件应用
  • 西安建立公司网站的步骤常熟东南开发区人才网
  • 重庆网站建设快忻哪个网站做的系统好
  • 网站开发的服务器是什么中企动力网站icp备案通知
  • 顺德电子画册网站建设wordpress编程视频
  • 如何在百度推广网站wordpress万年历插件
  • 城市建设理论研究收录网站域名ip地址在线查询
  • 网站建设推广熊掌号企业宣传片报价明细
  • 智能响应式网站钓鱼网站的主要危害
  • 网站建设竞争性磋商文件企业网站建设的三种方式
  • 做企业规划的网站做网站后台运营这个工作怎么样
  • 小说网站快速做排名企业推广策划书
  • 酒泉网站建设优化做的好的农产品网站有哪些
  • 本地电脑做服务器 建网站排名前十的小说
  • 塑胶原料 东莞网站建设抖音优化排名
  • 响应式旅游网站模板下载外贸软件
  • wordpress基础主题站公司名字大全推荐