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

微信分销网站建设哪家好wordpress 多语言设置

微信分销网站建设哪家好,wordpress 多语言设置,婚纱网网站建设目的及功能定位,传奇网页游戏排名1. 概述 MAC控制器的驱动使用的是platform总线的连接方式#xff0c;PHY设备驱动是基于device、driver、bus的连接方式。 其驱动涉及如下几个重要部分#xff1a; 总线 - 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://www.dnsts.com.cn/news/158035.html

相关文章:

  • 网站建设 中企动力厨具网站开发成本报表
  • 我的网站怎么做wordpress有没有翻书的主题
  • 重庆综合网站建设配件手机端模板网站
  • 凡科的网站怎么做百度推广做竞价网站 要注意什么
  • 烟台市芝罘区建设局网站网站开发天津网站开发
  • 主机服务器网站 怎么做漂亮的学校网站模板下载
  • 做哪类视频网站需要视频证书免费的个人简历模板wps
  • 济宁三合一网站建设个人网站可以做百度推广吗
  • 自己找网站开发项目免费制作自己的网站
  • 企业网站seo从哪开始会展网站建设情况
  • 高端网站设计电话中文命名网页制作素材会怎么样
  • 跟京东类似的网站淘宝客网站WordPress
  • wordpress快站平台建设网站的流程图
  • 宝山青岛网站建设百度一下百度搜索百度一下
  • 雅虎网站收录提交入口wordpress 插件 无法创建目录
  • 网站重复网龙网络公司游戏
  • 你访问的网站正在建设织梦猫免费模板
  • VPS做镜像网站陕西最新消息今天
  • 模具网站建设网页小游戏在线玩儿
  • 淄博北京网站建设南昌的网站建设公司
  • dw做网站导航条做相册的网站dw
  • 团队建设网站下载app官方正版
  • 怎么自己制作一个网站下载器软件生命周期七个阶段
  • 织梦汽车网站模板免费下载网络推广公司优化客
  • 网页制作网站图片怎么查看网站啥系统做的
  • 定制网站徐州最大网架公司
  • 淄博学校网站建设定制无锡做网站哪家公司好
  • 1号店网站模板下载做网站怎么做鼠标跟随
  • gta5 网站正在建设中定制衣柜设计方案
  • 医院网站可信认证必须做吗营销推广方案