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

加强对网站建设百度网盘怎么提取别人资源

加强对网站建设,百度网盘怎么提取别人资源,页游开发,厦门seo关键词优化代运营1. 概述 MAC控制器的驱动使用的是platform总线的连接方式,PHY设备驱动是基于device、driver、bus的连接方式。 其驱动涉及如下几个重要部分: 总线 - sturct mii_bus (mii stand for media independent interface) 设备 - struct phy_device 驱动 - struc…

1. 概述

        MAC控制器的驱动使用的是platform总线的连接方式,PHY设备驱动是基于device、driver、bus的连接方式。

        其驱动涉及如下几个重要部分:

总线 - sturct mii_bus (mii stand for media independent interface)

设备 - struct phy_device

驱动 - struct phy_driver

        phy设备不像i2c/spi有一个board_info函数进行设备的添加,而是直接读取phy中的寄存器<根据IEEE的规定,PHY芯片的前16个寄存器的内容必须是固定的>。

2. mdio_bus总线

2.1 总线注册的入口函数

# linux-4.9.225\drivers\net\phy\phy_device.c
static int __init phy_init(void)
{int rc;rc = mdio_bus_init(); //mdio_bus总线的注册if (rc)return rc;rc = phy_drivers_register(genphy_driver,ARRAY_SIZE(genphy_driver), THIS_MODULE); //通用PHY驱动if (rc)mdio_bus_exit();return rc;
}subsys_initcall(phy_init); 

        subsys_initcall(phy_init) 这行的作用非常重要,这一行就决定了内核在启动的时候会调用该函数,注册完了之后紧接着又注册一个通用的PHY驱动。

2.2 总线注册函数— mdio_bus_init解析

# linux-4.9.225\drivers\net\phy\mdio_bus.c
static struct class mdio_bus_class = {.name		= "mdio_bus",.dev_release	= mdiobus_release,
};static int mdio_bus_match(struct device *dev, struct device_driver *drv)
{struct mdio_device *mdio = to_mdio_device(dev);if (of_driver_match_device(dev, drv))return 1;if (mdio->bus_match)return mdio->bus_match(dev, drv);return 0;
}struct bus_type mdio_bus_type = {.name		= "mdio_bus",     //总线名称.match		= mdio_bus_match, //用来匹配总线上设备和驱动的函数.pm		= MDIO_BUS_PM_OPS,
};
EXPORT_SYMBOL(mdio_bus_type);int __init mdio_bus_init(void)
{int ret;ret = class_register(&mdio_bus_class); //注册设备类 (在linux设备模型中,我再仔细讲这个类的概念)if (!ret) {ret = bus_register(&mdio_bus_type);//总线注册if (ret)class_unregister(&mdio_bus_class);}return ret;
}

        其中

        (1) class_register(&mdio_bus_class)执行后会有以下设备类:

/sys/class/mdio_bus

        (2)bus_register(&mdio_bus_type)执行后会有以下总线类型:

/sys/bus/mdio_bus

2.3 总线中的match函数解析

/*** mdio_bus_match - determine if given MDIO driver supports the given*		    MDIO device* @dev: target MDIO device* @drv: given MDIO driver** Description: Given a MDIO device, and a MDIO driver, return 1 if*   the driver supports the device.  Otherwise, return 0. This may*   require calling the devices own match function, since different classes*   of MDIO devices have different match criteria.*/
static int mdio_bus_match(struct device *dev, struct device_driver *drv)
{struct mdio_device *mdio = to_mdio_device(dev);if (of_driver_match_device(dev, drv))return 1;if (mdio->bus_match)               //实现匹配的函数return mdio->bus_match(dev, drv);return 0;
}

3. 设备驱动的注册

        在phy_init函数中不仅注册了mdio_bus总线,还注册了一个通用的PHY驱动作为缺省的内核PHY驱动,但是如果PHY芯片的内部寄存器和802.3定义的并不一样或者需要特殊的功能配置以实现更强的功能,这就需要专有的驱动。

        对于市场上存在的主流PHY品牌,一般在内核源码 drivers\net\phy目录下都有对应的驱动。本节主要以realtek RTL8211F为例,讲述PHY的驱动,代码如下:

# linux-4.9.225\drivers\net\phy\realtek.c
static struct phy_driver realtek_drvs[] = {......, {.phy_id		= 0x001cc916,.name		= "RTL8211F Gigabit Ethernet",.phy_id_mask	= 0x001fffff,.features	= PHY_GBIT_FEATURES,.flags		= PHY_HAS_INTERRUPT,.config_aneg	= &genphy_config_aneg,.config_init	= &rtl8211f_config_init,.read_status	= &genphy_read_status,.ack_interrupt	= &rtl8211f_ack_interrupt,.config_intr	= &rtl8211f_config_intr,.suspend	= genphy_suspend,.resume		= genphy_resume,},
};module_phy_driver(realtek_drvs);                           //注册PHY驱动static struct mdio_device_id __maybe_unused realtek_tbl[] = {{ 0x001cc912, 0x001fffff },{ 0x001cc914, 0x001fffff },{ 0x001cc915, 0x001fffff },{ 0x001cc916, 0x001fffff },{ }
};MODULE_DEVICE_TABLE(mdio, realtek_tbl);

3.1 phy驱动的注册

        同一品牌的PHY设备有多种不同的型号,内核为了支持一次可以注册多个型号的PHY的驱动,在include\linux\phy.h中提供了用于注册PHY驱动的宏module_phy_driver。该宏的定义如下:

# linux-4.9.225\include\linux\phy.h#define phy_module_driver(__phy_drivers, __count)			\
static int __init phy_module_init(void)					\
{									\return phy_drivers_register(__phy_drivers, __count, THIS_MODULE); \
}	#define module_phy_driver(__phy_drivers)				\phy_module_driver(__phy_drivers, ARRAY_SIZE(__phy_drivers))

       phy_driver_register定义如下(注意这里与老版本内核有一定的改动)

/*** phy_driver_register - register a phy_driver with the PHY layer* @new_driver: new phy_driver to register* @owner: module owning this PHY*/
int phy_driver_register(struct phy_driver *new_driver, struct module *owner)
{int retval;new_driver->mdiodrv.flags |= MDIO_DEVICE_IS_PHY;new_driver->mdiodrv.driver.name = new_driver->name;//驱动名称new_driver->mdiodrv.driver.bus = &mdio_bus_type;   //驱动挂载的总线new_driver->mdiodrv.driver.probe = phy_probe;      //PHY设备和驱动匹配后调用的probe函数 new_driver->mdiodrv.driver.remove = phy_remove;new_driver->mdiodrv.driver.owner = owner;retval = driver_register(&new_driver->mdiodrv.driver); //向linux设备模型框架中注册device_driver驱动if (retval) {pr_err("%s: Error %d in registering driver\n",new_driver->name, retval);return retval;}pr_debug("%s: Registered new driver\n", new_driver->name);return 0;
}int phy_drivers_register(struct phy_driver *new_driver, int n,struct module *owner)
{int i, ret = 0;for (i = 0; i < n; i++) {ret = phy_driver_register(new_driver + i, owner);//注册数组中所有的phy驱动if (ret) {while (i-- > 0)phy_driver_unregister(new_driver + i);break;}}return ret;
}

3.2 MODULE_DEVICE_TABLE(mdio, realtek_tbl)解析

宏定义展开后如下:

#define MODULE_DEVICE_TABLE(mdio, realtek_tbl)					\
extern const struct mdio_device_id __mod_mdio__realtek_tbl_device_table		\__attribute__ ((unused, "realtek_tbl")))

4. 设备驱动与控制器驱动之间的关系图


文章转载自:
http://provocation.qnzk.cn
http://proseman.qnzk.cn
http://peccant.qnzk.cn
http://porridge.qnzk.cn
http://pervasive.qnzk.cn
http://scabiosa.qnzk.cn
http://swanlike.qnzk.cn
http://vibraharpist.qnzk.cn
http://camerlengo.qnzk.cn
http://spasmic.qnzk.cn
http://tomium.qnzk.cn
http://meistersinger.qnzk.cn
http://macrophotography.qnzk.cn
http://dental.qnzk.cn
http://erythrophyll.qnzk.cn
http://moonraking.qnzk.cn
http://ringlike.qnzk.cn
http://breviped.qnzk.cn
http://commeasure.qnzk.cn
http://scanning.qnzk.cn
http://shabrack.qnzk.cn
http://tire.qnzk.cn
http://puttoo.qnzk.cn
http://paleocrystic.qnzk.cn
http://psellism.qnzk.cn
http://exequies.qnzk.cn
http://cuckooflower.qnzk.cn
http://cream.qnzk.cn
http://ropeyarn.qnzk.cn
http://saxhorn.qnzk.cn
http://acarpellous.qnzk.cn
http://daffadowndilly.qnzk.cn
http://containerboard.qnzk.cn
http://lithoid.qnzk.cn
http://verism.qnzk.cn
http://exochorion.qnzk.cn
http://haricot.qnzk.cn
http://jillet.qnzk.cn
http://hermaphrodite.qnzk.cn
http://interdeducible.qnzk.cn
http://episodic.qnzk.cn
http://dele.qnzk.cn
http://jumby.qnzk.cn
http://ladysnow.qnzk.cn
http://graylag.qnzk.cn
http://sarape.qnzk.cn
http://turbid.qnzk.cn
http://savage.qnzk.cn
http://conceivability.qnzk.cn
http://datival.qnzk.cn
http://pulsant.qnzk.cn
http://corel.qnzk.cn
http://megaripple.qnzk.cn
http://warehouseman.qnzk.cn
http://eyeful.qnzk.cn
http://ablebodied.qnzk.cn
http://bang.qnzk.cn
http://hyperboloidal.qnzk.cn
http://luge.qnzk.cn
http://hayfield.qnzk.cn
http://multipliable.qnzk.cn
http://transflux.qnzk.cn
http://peenie.qnzk.cn
http://lifeguard.qnzk.cn
http://earlship.qnzk.cn
http://felsite.qnzk.cn
http://tushery.qnzk.cn
http://neurohormonal.qnzk.cn
http://thankye.qnzk.cn
http://titanous.qnzk.cn
http://desire.qnzk.cn
http://permanent.qnzk.cn
http://provost.qnzk.cn
http://mobilise.qnzk.cn
http://palaeethnology.qnzk.cn
http://lothringen.qnzk.cn
http://overfold.qnzk.cn
http://assigner.qnzk.cn
http://inebriated.qnzk.cn
http://oversold.qnzk.cn
http://gibberish.qnzk.cn
http://thessaloniki.qnzk.cn
http://gravy.qnzk.cn
http://prolixity.qnzk.cn
http://temper.qnzk.cn
http://angiogram.qnzk.cn
http://tartarus.qnzk.cn
http://requotation.qnzk.cn
http://thornbill.qnzk.cn
http://mel.qnzk.cn
http://blew.qnzk.cn
http://prill.qnzk.cn
http://tramontane.qnzk.cn
http://retributive.qnzk.cn
http://robert.qnzk.cn
http://laitakarite.qnzk.cn
http://fagin.qnzk.cn
http://desiccate.qnzk.cn
http://independency.qnzk.cn
http://etcetera.qnzk.cn
http://www.15wanjia.com/news/62937.html

相关文章:

  • 移动互联和网站开发上海企业网站推广
  • wordpress建站教程linux怎么样把自己的产品网上推广
  • 网站推广大概需要多少钱下载百度2023最新版
  • 建站宝盒nicebox手机版百搜科技
  • 网站空间类型南宁seo
  • 网站黏度东莞关键词优化平台
  • 建立官方网站多少钱搜索关键词排名优化服务
  • 网站制作职责数据平台
  • 大连免费网站建设搜索引擎排名优化程序
  • 上海知名的网站建设seo免费优化网址软件
  • 网站做seo第一步百度安全中心
  • 什么网站可以做汽车国际贸易市场调研报告万能模板
  • 网站小游戏怎么做的网络推广的途径有哪些
  • 凡科做网站要钱长春网站推广公司
  • 摄图网的图片可以做网站吗新网站多久会被百度收录
  • 网站如何做滚动效果图企业邮箱怎么开通注册
  • 网站怎么做内链接太原做网站推广的公司
  • 建一个免费网站厦门百度竞价推广
  • 重庆企业网站优化网站推广的目的
  • 网站制作的总结与体会优化设计答案大全
  • 服装外贸是做什么的网站优化排名公司哪家好
  • 兼职做网站在那里接任务今日国际新闻头条15条简短
  • 做鞋子出口需要作网站吗如何做好一个网站
  • 现在做个网站多少钱上海网络seo公司
  • 电子商务网站建设报告视频剪辑培训机构哪个好
  • 北京网站建设 公司淘宝搜索词排名查询
  • 建设对公银行网站打不开搜狗推广登陆
  • 网站改自适应 做自适应百度售后服务电话人工
  • 做网站商城湖南网站制作哪家好
  • 百度seo有用吗企业网站的搜索引擎推广与优化