精华内容
下载资源
问答
  • 解决win10系统以太网适配器的驱动程序可能出现问题

    解决win10系统以太网适配器的驱动程序可能出现问题

    参考文章:

    (1)解决win10系统以太网适配器的驱动程序可能出现问题

    (2)http://www.cnblogs.com/sdusrz/p/5017745.html


    备忘一下。


    展开全文
  • linux以太网驱动总结

    万次阅读 2017-05-24 13:37:31
    linux以太网驱动总结工作中涉及linux以太网驱动,涉及代码:drivers/net/ethernet/stmicro/,drivers/net/phy/,进行一下总结。 概要: 1.以太网硬件 2.软件初始化probe, open 3.数据发送过程 4.数据接收过程 ...

    linux以太网驱动总结

    工作中涉及linux以太网驱动,涉及代码:drivers/net/ethernet/stmicro/,drivers/net/phy/,进行一下总结。
    概要:
    1.以太网硬件
    2.软件初始化probe, open
    3.数据发送过程
    4.数据接收过程
    5.设备无关层
    6.bring up以太网功能
    7.传输过程中传输中断的问题

    1.以太网硬件
    MAC:通常集成在ARM芯片中,功能类似于一个controller,以太网协议层数据传送给MAC,由MAC通过DMA发送到外部接口,外部接口连接着PHY。或者接收从PHY传过来的信号,DMA搬运到内存中存储。
    PHY:通常是一个独立芯片,有数字和模拟两部分,也可以集成在ARM芯片内部。负责把从MAC传送过来的数据转换成可以在网线上传输的信号,或者接收网线上传输过来的信号,转换成数字信号回传给MAC。分为百兆PHY和千兆PHY。
    PHY配置:自协商模式开启/关闭; 自协商关闭状态下,配置为强制full duplex, half duplex, 强制1000Mbps/100Mbps/10Mbps;WOL开启/关闭。
    MAC和PHY之间的接口分为RMII接口(百兆),RGMII接口(千兆)。
    RMII接口:
    这里写图片描述
    数据传输信号线TX0, TX1, RX0,RX1,clock
    控制口:MDC, MDIO
    RGMII接口:
    这里写图片描述
    数据传输信号线TX0-3, RXD0-3,TX clock, RX clock
    控制口:MDC, MDIO
    MDC,MDIO用于控制信号的传输,MAC对PHY的读写数据通过MDIO接口传送。
    TX,RX,信号线用于数据信号的传输。

    2.软件初始化
    我们使用的驱动是stmicro驱动,所以基于该驱动代码来介绍
    probe
    1.读取dts文件中的ethernet配置,读取MAC基地址,rgmii or rmii, 配置寄存器,读取和保存从uboot传过来的MAC地址。
    2.alloc,init net_device struct, 注册ops: stmmac_netdev_ops, register net_device. clock enable.
    stmmac_hw_init:注册mac ops, dma ops.
    dwmac1000_ops, dwmac1000_dma_ops,
    3.寻找phy: stmmac_mdio_register
    BUS:bus_register(&mdio_bus_type)
    driver: driver_register注册phy driver.
    device: 读取phy id, phy_device_create, dev.bus = &mdio_bus_type
    mdio_bus_type里面有一个match函数,通过phyid来match phy device和phy driver
    stmmac_open
    ifconfig eth0 up时会调用到ndo_open回调,实际调用stmmac_open
    1.stmmac_init_phy, 如果没有匹配上phy driver, 就赋予通用phy driver, 初始化phy, 启动delayed work: phy_state_machine,
    2.alloc&init dma descriptor struct array, sk_buff address array (tx, rx)
    这里写图片描述
    3.MAC init
    dma mode, descriptor base address, set mac address,
    4.request_irq, 注册ISR
    5.napi_enable, netif_start_queue.

    3.数据发送
    每填充一个descriptor, cur_tx++, 每回收一个descriptor, dirty_tx++,
    如果dirty_tx != cur_tx, 说明有等待dma传送的数据。
    调用stmmac_xmit, 注册为ndo_start_xmit的回调函数。
    这里写图片描述
    TX 发送完毕回收内存
    stmmac_tx_clean,
    一次stmmac_tx_clean调用会通过while循环把队列中所有已经完成发送的descriptor全部回收。
    stmmac_tx_clean可通过DMA ISR调用,也可以通过timer ISR调用到。
    这里写图片描述
    4.数据接收
    这里写图片描述
    关于skb
    TX端的skb是从上层传送过来的,我们需要把skb->data地址 dma_map_single到 tx descriptor中,发送完成后,再dma_ummap_single, 调用dev_free_skb, 应该是通知上层,这个skb已经处理完毕。
    RX端的skb,是在驱动中alloc的,接收的数据填充到skb中,然后通过napi_gro_receive把skb传送到上层
    Q:驱动怎么知道传送给上层的skb中的空间已经可以作为下一次传送的空间来覆盖数据?
    A:传给上层的skb不会再使用,会重新获取到新的skb.
    调试打印函数:通过修改default_msg_level, 设置打印功能。

    5.设备无关层
    在协议层和设备驱动程序之间,是skb的传递,类似于其他驱动程序中的core层,与具体设备无关。
    skb向上传递:
    这里写图片描述
    skb向下传递:
    这里写图片描述

    6.bring up以太网功能
    检查寄存器基地址,寄存器定义,寄存器配置(百兆,千兆,rmii,rgmii,内部,外部phy), pinmux, 检查phy的配置.
    probe失败可能原因:
    1.MAC reset失败。检查电源,clock。
    2.无法读取phy id。检查phy的电源,clock,pinmux.
    能正确显示link状态,但是数据不通:
    1.检查寄存器配置,pinmux, 主要是rmii, rgmii相关配置
    2.检查phy driver是否正确匹配上,phy driver中的phy id与 phy device 中的phy id如果不一致的话,phy driver就匹配不成功,导致phy config函数没有执行到。
    7.传输过程中传输中断的问题
    tx方向的传输中断。增加每秒运行一次的work queue, 检查在dma队列中是否有待发送的数据(已经交给dma),如果有,记下队列index, 过5秒之后再检查这个待发送的数据是否已发送完成,如果还未完成,认为TX传输中止,reset ethernet.
    rx方向的传输中断。每条检查一次,检查phy的状态,如果状态异常,则reset ethernet. 还可以仿照TX方向增加监控和恢复机制。
    在reset ethernet时,需要注意kernel panic。 reset过程是,停止TX,RX,释放之前alloc的所有memory, 重新alloc memory, 初始化mac, 初始化phy。出现panic的原因是,驱动代码还在使用已经被释放了的memory。因为已经停止了TX,RX,按道理不会再运行TX,RX部分的代码了。最后发现是tx timer handler里面会操作memory。当停止TX,RX之后, 释放所有memory, 然后tx timer handler触发,操作被释放的memory, 导致panic. 解决方法是,减少tx timer的expire时间,并且在停止TX之后,增加delay, 使tx timer handler完成之后,再释放memory.

    展开全文
  • 《工业以太网现场总线EtherCAT驱动程序设计及应用》介绍了:实时工业以太网技术进展、EtherCAT系统组成原理、EtherCAT协议、从站专用集成电路芯片ET1100、ET1100从站硬件设计实例、EtherCAT用于伺服驱动器控制应用...
  • 《工业以太网现场总线EtherCAT驱动程序设计及应用》介绍了:实时工业以太网技术进展、EtherCAT系统组成原理、EtherCAT协议、从站专用集成电路芯片ET1100、ET1100从站硬件设计实例、EtherCAT用于伺服驱动器控制应用...
  • (2)将microsoft网络客户端,qos数据包计划程序,microsoft网络的文件盒打印机共享,链路层拓扑发现响应程序,microsoft lldp协议驱动程序,internet协议版本6和4,链路层拓扑发现映射器i/o驱动程序打钩,其他的...

    (1)点击网络,进入网络共享中心

    (2)点击更改适配器设置,右击以太网,点击属性

    (2)将microsoft网络客户端,qos数据包计划程序,microsoft网络的文件盒打印机共享,链路层拓扑发现响应程序,microsoft lldp协议驱动程序,internet协议版本6和4,链路层拓扑发现映射器i/o驱动程序打钩,其他的不要打钩,点确定就可以了,现在你的电脑就可以联网了

    引自:here

    转载于:https://www.cnblogs.com/tdcqma/p/5680727.html

    展开全文
  • 没有大神做过arm7(lpc2368)以太网接口的,只是简单的收发数据,不需要基于操作系统的,求指点和程序,谢谢
  • 中文图书,EtherCat学习书籍,7章内容 全面介绍,解析 EtherCAT 1. 协议 2 从站控制芯片 3 硬件设计 4伺服驱动器控制应用协议 5主站驱动程序 6 从站驱动程序
  • 工业以太网现场总线EtherCAT驱动程序设计及应用sample.pdf
  • 使用zynq7000系列SoC开发以太网功能比较简单,xilinx提供了完整的驱动程序,只需配置设备树中与phy相关的信息即可,本篇文章的重点并非讲解以太网驱动程序本身,而是通过对以太网驱动程序代码的分析,探索linux phy...

    1.简介

    使用zynq7000系列SoC开发以太网功能比较简单,xilinx提供了完整的驱动程序,只需配置设备树中与phy相关的信息即可,本篇文章的重点并非讲解以太网驱动程序本身,而是通过对以太网驱动程序代码的分析,探索linux phy子系统,包括了mdio总线,phy设备、phy驱动等,同时也能加深对linux设备模型总线、设备和驱动的理解。

    2.主要结构体

    phy芯片和以太网控制器之间通过mdio总线进行控制信息的传输,phy芯片挂接在mdio总线上,并且一个mdio总线上可同时挂接多个phy芯片,通过phy地址进行区分。可以看出,linux phy子系统典型地对应linux的总线、设备、驱动模型。

    2.1 总线

    和大多数总线结构一样,mdio总线结构定义为mdio_bus_type:

    /drivers/net/phy/mdio_bus.c
    
    struct bus_type mdio_bus_type = {
    	.name		= "mdio_bus",
    	.match		= mdio_bus_match,
    	.uevent		= mdio_uevent,
    };
    

    2.2 设备

    设备结构体包括mdio_device、phy_device和mii_bus,其中,mdio_device代表挂接在mdio总线上的mdio设备,phy_device是对mdio_device的进一步封装,专门代表phy设备(属于mdio设备的一种)。mii_bus是代表mdio总线本身的设备,是总线上mdio设备的父设备(parent)。

    /include/linux/mdio.h
    
    struct mdio_device {
    	struct device dev;
    
    	struct mii_bus *bus;
    	char modalias[MDIO_NAME_SIZE];
    
    	int (*bus_match)(struct device *dev, struct device_driver *drv);
    	void (*device_free)(struct mdio_device *mdiodev);
    	void (*device_remove)(struct mdio_device *mdiodev);
    
    	/* Bus address of the MDIO device (0-31) */
    	int addr;
    	int flags;
    	struct gpio_desc *reset_gpio;
    	struct reset_control *reset_ctrl;
    	unsigned int reset_assert_delay;
    	unsigned int reset_deassert_delay;
    };
    
    /include/linux/phy.h
    
    struct phy_device {
    	struct mdio_device mdio;
    
    	/* Information about the PHY type */
    	/* And management functions */
    	struct phy_driver *drv;
    
    	u32 phy_id;
    
    	struct phy_c45_device_ids c45_ids;
    	unsigned is_c45:1;
    	unsigned is_internal:1;
    	unsigned is_pseudo_fixed_link:1;
    	unsigned is_gigabit_capable:1;
    	unsigned has_fixups:1;
    	unsigned suspended:1;
    	unsigned sysfs_links:1;
    	unsigned loopback_enabled:1;
    	
    	/*其余部分......*/
    };
    
    /include/linux/phy.h
    
    /*
     * The Bus class for PHYs.  Devices which provide access to
     * PHYs should register using this structure
     */
    struct mii_bus {
    	struct module *owner;
    	const char *name;
    	char id[MII_BUS_ID_SIZE];
    	void *priv;
    	int (*read)(struct mii_bus *bus, int addr, int regnum);
    	int (*write)(struct mii_bus *bus, int addr, int regnum, u16 val);
    	int (*reset)(struct mii_bus *bus);
    
    	/*
    	 * A lock to ensure that only one thing can read/write
    	 * the MDIO bus at a time
    	 */
    	struct mutex mdio_lock;
    
    	struct device *parent;
    	enum {
    		MDIOBUS_ALLOCATED = 1,
    		MDIOBUS_REGISTERED,
    		MDIOBUS_UNREGISTERED,
    		MDIOBUS_RELEASED,
    	} state;
    	struct device dev;
    
    	/* list of all PHYs on bus */
    	struct mdio_device *mdio_map[PHY_MAX_ADDR];
    
    	/* PHY addresses to be ignored when probing */
    	u32 phy_mask;
    
    	/* PHY addresses to ignore the TA/read failure */
    	u32 phy_ignore_ta_mask;
    
    	/*
    	 * An array of interrupts, each PHY's interrupt at the index
    	 * matching its address
    	 */
    	int irq[PHY_MAX_ADDR];
    
    	/* GPIO reset pulse width in microseconds */
    	int reset_delay_us;
    	/* RESET GPIO descriptor pointer */
    	struct gpio_desc *reset_gpiod;
    };
    

    2.3 驱动

    驱动结构体主要包括mdio_driver和phy_driver,其关系和mdio_device与phy_device的关系类似。

    /include/linux/mdio.h
    
    /* struct mdio_driver_common: Common to all MDIO drivers */
    struct mdio_driver_common {
    	struct device_driver driver;
    	int flags;
    };
    
    /* struct mdio_driver: Generic MDIO driver */
    struct mdio_driver {
    	struct mdio_driver_common mdiodrv;
    
    	/*
    	 * Called during discovery.  Used to set
    	 * up device-specific structures, if any
    	 */
    	int (*probe)(struct mdio_device *mdiodev);
    
    	/* Clears up any memory if needed */
    	void (*remove)(struct mdio_device *mdiodev);
    };
    
    /include/linux/phy.h
    
    struct phy_driver {
    	struct mdio_driver_common mdiodrv;
    	u32 phy_id;
    	char *name;
    	u32 phy_id_mask;
    	const unsigned long * const features;
    	u32 flags;
    	const void *driver_data;
    
    	/*
    	 * Called to issue a PHY software reset
    	 */
    	int (*soft_reset)(struct phy_device *phydev);
    
    	/*
    	 * Called to initialize the PHY,
    	 * including after a reset
    	 */
    	int (*config_init)(struct phy_device *phydev);
    
    	/*
    	 * Called during discovery.  Used to set
    	 * up device-specific structures, if any
    	 */
    	int (*probe)(struct phy_device *phydev);
    	
     	/*其余部分......*/
    };
    

    3.流程

    3.1 总线和驱动的注册

    总线和通用phy驱动的注册主要在phy_init函数中进行,可以看出这是个系统初始化函数:

    /drivers/net/phy/phy_device.c
    
    static int __init phy_init(void)
    {
    	int rc;
    
    	rc = mdio_bus_init();
    	if (rc)
    		return rc;
    
    	features_init();
    
    	rc = phy_driver_register(&genphy_c45_driver, THIS_MODULE);
    	if (rc)
    		goto err_c45;
    
    	rc = phy_driver_register(&genphy_driver, THIS_MODULE);
    	if (rc) {
    		phy_driver_unregister(&genphy_c45_driver);
    err_c45:
    		mdio_bus_exit();
    	}
    
    	return rc;
    }
    
    int phy_driver_register(struct phy_driver *new_driver, struct module *owner)
    {
    	int retval;
    
    	/* Either the features are hard coded, or dynamically
    	 * determined. It cannot be both.
    	 */
    	if (WARN_ON(new_driver->features && new_driver->get_features)) {
    		pr_err("%s: features and get_features must not both be set\n",
    		       new_driver->name);
    		return -EINVAL;
    	}
    
    	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;
    	new_driver->mdiodrv.driver.remove = phy_remove;
    	new_driver->mdiodrv.driver.owner = owner;
    
    	retval = driver_register(&new_driver->mdiodrv.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;
    }
    
    /drivers/net/phy/mdio_bus.c
    
    int __init mdio_bus_init(void)
    {
    	int ret;
    
    	ret = class_register(&mdio_bus_class);
    	if (!ret) {
    		ret = bus_register(&mdio_bus_type);
    		if (ret)
    			class_unregister(&mdio_bus_class);
    	}
    
    	return ret;
    }
    

    可见总线和驱动的注册最终都调用了linux设备模型中的bus_register函数和driver_register函数。

    3.2 设备注册

    phy子系统设备包括mii_bus设备和phy_device设备,是在以太网控制器驱动注册后进行注册的。xilinx提供的macb以太网控制器驱动遵循典型的网络设备驱动架构,主要是构建net_device结构体并调用register_netdev函数注册。之后便会进入phy芯片的探测和注册流程,主要在macb_mii_init函数中进行。流程如下:

    Created with Raphaël 2.2.0 macb_mii_initmdiobus_allocof_mdiobus_registermacb_mii_probereturn

    3.2.1 mdiobus_alloc

    mdiobus_alloc分配了mii_bus结构体,如前所述,mii_bus结构体代表mdio总线本身,是总线上挂接的mido设备的父设备,其本身又从属于macb控制器,因此它的parent是对应macb的net_device结构体。在该结构体中还提供了mdio总线的读写方法。

    3.2.2 of_mdiobus_register

    of_mdiobus_register注册mii_bus结构体并扫描phy设备。

    Created with Raphaël 2.2.0of_mdiobus_register mdiobus_registerof_mdiobus_register_phy设备树中phy节点信息是否遍历完?returnyesno

    mdiobus_register最终会调用device_register将mii_bus设备注册进设备模型,之后获取设备树中记录的phy节点信息并调用of_mdiobus_register_phy探测并创建phy_device设备。

    Created with Raphaël 2.2.0 of_mdiobus_register_phy get_phy_devicephy_device_registerreturn

    get_phy_device调用get_phy_id读取phy芯片的id号,然后调用phy_device_create。phy_device_create函数分配了phy_device结构体并对其进行初始化。

    /drivers/net/phy/phy_device.c
    
    struct phy_device *phy_device_create(struct mii_bus *bus, int addr, u32 phy_id,
    				     bool is_c45,
    				     struct phy_c45_device_ids *c45_ids)
    {
    	struct phy_device *dev;
    	struct mdio_device *mdiodev;
    	int ret = 0;
    
    	/* We allocate the device, and initialize the default values */
    	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
    	if (!dev)
    		return ERR_PTR(-ENOMEM);
    
    	mdiodev = &dev->mdio;
    	mdiodev->dev.parent = &bus->dev;
    	mdiodev->dev.bus = &mdio_bus_type;
    	mdiodev->dev.type = &mdio_bus_phy_type;
    	mdiodev->bus = bus;
    	mdiodev->bus_match = phy_bus_match;
    	mdiodev->addr = addr;
    	mdiodev->flags = MDIO_DEVICE_FLAG_PHY;
    	mdiodev->device_free = phy_mdio_device_free;
    	mdiodev->device_remove = phy_mdio_device_remove;
    
    	/*......*/
    	mutex_init(&dev->lock);
    	INIT_DELAYED_WORK(&dev->state_queue, phy_state_machine);
    	/*......*/
    	if (!ret) {
    		device_initialize(&mdiodev->dev);
    	} else {
    		kfree(dev);
    		dev = ERR_PTR(ret);
    	}
    
    	return dev;
    

    可见,phy_device_create中设置了phy_device设备的父设备为mii_bus设备,设置phy_device设备对应的总线为mdio_bus_type。
    值得注意的是,创建phy_device设备后,of_mdiobus_register_phy将phy_device中device结构体的of_node成员设置为设备树中的phy节点,以便后续可以通过设备树节点直接查找到phy_device结构体。

    /drivers/of/of_mdio.c
    
    static int of_mdiobus_register_phy(struct mii_bus *mdio,
    				    struct device_node *child, u32 addr)
    {
    	/*......*/
    	
    	phy = get_phy_device(mdio, addr, is_c45);
    	
    	/*......*/
    	
    	/* Associate the OF node with the device structure so it
    	 * can be looked up later */
    	of_node_get(child);
    	phy->mdio.dev.of_node = child;
    	phy->mdio.dev.fwnode = of_fwnode_handle(child);
    	
    	/*......*/
    	
    	/* All data is now stored in the phy struct;
    	 * register it */
    	rc = phy_device_register(phy);
    	
    	/*......*/
    }
    

    然后,在phy_device_register中首先调用mdiobus_register_device将该phy_device添加进mii_bus的mdio_map数组中,最终调用device_add将phy_device注册进驱动模型并初始化该phy_device的phy状态机。
    在linux设备模型中,device_add是一个重要的函数,它会调用kobject_add将device注册进sysfs,然后调用bus_add_device和bus_probe_device。bus_add_device将设备挂接到其总线(这里即mdio_bus_type)的设备列表中。bus_probe_device将遍历总线上已注册的所有驱动程序,调用总线的match函数检查驱动是否能和该设备匹配。若匹配则将设备和驱动程序绑定,然后调用驱动的probe函数。在笔者所做的项目中,使用的phy芯片并不能在这一步匹配上。

    3.2.3 macb_mii_probe

    macb_mii_probe初始化和启动phy硬件,其主要调用了of_phy_connect函数。而of_phy_connect函数在通过设备树节点信息获取对应的phy_device设备后最终调用了phy_attach_direct函数。

    Created with Raphaël 2.2.0phy_attach_direct d->driver = &genphy_driver.mdiodrv.driverphy_probedevice_bind_driverphy_init_hwphy_resumereturn

    phy_attach_direct判断phy_device是否绑定了phy驱动,如果没有的话则将通用phy驱动genphy_driver作为phy_device的驱动,然后调用genphy_driver的probe函数,即phy_probe函数进行初始化处理,随后调用device_bind_driver将设备和驱动正式绑定。最后调用phy_init_hw和phy_resume初始化和唤醒Phy硬件使其开始工作。至此,phy设备的注册就告一段落了。

    4 总结

    通过对linux phy子系统的结构体和流程进行分析可以发现,linxu phy子系统是一个典型的总线、设备和驱动架构,总线和phy驱动在系统初始化时注册,而设备则是在以太网控制器驱动注册函数中根据设备树的信息进行创建和注册。注册后设备模型会调用总线的match进行设备和驱动的匹配,若未能匹配成功则使用通用phy驱动。

    5 参考资料

    源码:linux-5.5.2和xilinx-linux-master

    展开全文
  • 3、以太网驱动分析(结合gmac项目) 3.1 dts节点分析 3.2 gmac驱动源码分析(open 收发包机制简要分析) 一、引言 最近在Android项目中,遇到以太网相关的问题,故来整理一下相关东西 涉及代码:drivers/...
  • 工业以太网现场总线ETHERCAT驱动程序设计及应用,扫描版,比较清晰的版本,全册230页。
  • 在U-boot中添加以太网驱动

    千次阅读 2013-12-24 09:21:10
    因此,需要打开U-boot的网络功能, u-boot-sunxi-sunxi中没有找到明显的网络驱动代码,或许有通用的驱动,但可以获得资料的途径有限,再说我是个初学者,平时工作属于自动控制类,网络方面很菜,因此想通过修改一个...
  • linux驱动程序之虚拟以太网设备vmeth

    千次阅读 2007-03-22 15:16:00
    Posted on 2006-10-05 15:05 倚槛追风 阅读(197) 评论(0) 编辑 收藏 引用 所属分类: 嵌入式linux,驱动程序 <!--...
  • mac安装绿联USB转以太网驱动

    万次阅读 2016-08-22 10:51:29
    前文我们介绍了mac osx英文系统驱动安装方法,详情: Mac OSX苹果系统如何安装绿联USB...苹果系统无光驱,您可从绿联官网下载或用其他电脑拷贝出驱动盘里的安装文件夹,即可进行安装。 第一步:打开驱动文件夹,打开m
  • 网络驱动程序
  • 虽然此文名为移植,但实际的工作量很小,只需简单修改即可完成tiny210板上的以太网驱动程序移植。 tiny210开发板上板载DM9000网络芯片,集成了网络控制器和PHY,外接一个网络变压器。uboot源码目录driver/net...
  • ENC28J60以太网模块直插NRF24L01接口直接进行远程固件升级STM32。同时采用了1Kmode协议,可以稳定升级。 ENC28J60以太网模块连接: ...可以完美兼容正点原子开发板,即插即用,还送AD
  • 因为做的项目需要用到ethercat主站,而用ethercat主站,标准的网卡网络协议栈性能就无法达到要求,需要根据ethercat官方提供的文档修改网卡驱动程序的网络协议栈。那么在做正式的工作之前呢,我们先来分析i.MX6的...
  • 今天接着分析上次没有分析完的i.MX6网卡驱动程序。上一篇分析了iMX6网卡驱动程序的driver与device的加载过程(点击可以查看上一篇文章),这篇我们来分析一下MAC层,物理层接口以及1588协议支持的代码。 首先分析...
  • Intel(R)Dual Band Wireless-AC 3165网卡驱动程序出现问题,WiFi,热点和以太网无法连接## 问题描述:Wlan连接状态正在识别,无Internet,热点,WiFi都连不上,打开设备管理器里的网络适配器,右边无黄色感叹号一...
  • u-boot 2016.7之以太网驱动模型

    千次阅读 2017-05-18 14:42:11
    u-boot 2016.7引入了设备树(device tree) 和 驱动模型MD(driver model),这为设备的驱动的定义和访问接口提供了统一的方法,提高了驱动之间的兼容性和可移植性。具体细节建议参考./doc/driver-model/README.txt...
  • STM32以太网程序解析

    万次阅读 2016-07-23 22:03:53
    本篇博文以上一篇文章《TCP、IP、ARP、ICMP首部分析》为基础,根据STM32中以太网程序来着重看一下,以太网数据包的解析过程。
  • 因此,需要打开U-boot的网络功能, u-boot-sunxi-sunxi中没有找到明显的网络驱动代码,或许有通用的驱动,但可以获得资料的途径有限,再说我是个初学者,平时工作属于自动控制类,网络方面很菜,因此想通过修改一个...
  • Linux的网络系统主要是基于BSD Unix 的socket机制, 访问网络设备的驱动程序不需要使用设备节点。在系统和驱动程序之间定义有专门的数据结构(sk_buff)进行数据的传递。系统内部支持对发送数据和接收数据的缓存,...
  • 基于LPC2210的RTL8019AS以太网驱动系统设计(三) <br />六.接收数据包模块 RTL8019AS接收数据有中断模式和查询模式两种。 Ø 采用中断模式时,需要在初始化程序中配置中断。当有一个正确的...
  • 改造iMX6(fec)网卡驱动程序前期工作之:阅读ethercat-1.5.2.pdf文档的第四章内容。 ethercat-1.5.2.pdf文档链接: 前期我已经将iMX6网卡驱动程序整体分析了一遍(点击链接查看之前分析的网卡驱动程序),今天来...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,279
精华内容 12,511
关键字:

以太网驱动程序下载