一、硬件环境

网络驱动IC:LAN8720

二、源码分析

2.1物理地址
对my6ull_my_evk.h(copy from mx6ullevk.h)选中代码进行分析。

默认CONFIG_FEC_ENET_DEV为1,即默认使用ENET2。


CONFIG_FEC_MXC_PHYADDR 网口硬件地址,以LAN8720为例,若Pin_10接0,则物理地址为0, 若1,则物理地址为1。根据实际修改此宏定义。

2.2厂商宏定义
源码345行,定义了一个宏CONFIG_PHY_MIsCREL,意为使用MIsCREL厂商芯片的驱动。

那么,我们如何根据自己的芯片厂商进行宏定义?我们可以查看文件“include/config_phylib_all_drivers.h”,在其中找到我们所需要的。LAN8720应该使用CONFIG_PHY_SMSC。

#ifndef _CONFIG_PHYLIB_ALL_H
#define _CONFIG_PHYLIB_ALL_H#ifdef CONFIG_PHYLIB#define CONFIG_PHY_VITESSE
#define CONFIG_PHY_MARVELL
#define CONFIG_PHY_MICREL
#define CONFIG_PHY_BROADCOM
#define CONFIG_PHY_DAVICOM
#define CONFIG_PHY_REALTEK
#define CONFIG_PHY_NATSEMI
#define CONFIG_PHY_LXT
#define CONFIG_PHY_ATHEROS
#define CONFIG_PHY_SMSC#ifdef CONFIG_PHYLIB_10G
#define CONFIG_PHY_TERANETICS
#endif /* CONFIG_PHYLIB_10G */#endif /* CONFIG_PHYLIB */#endif /*_CONFIG_PHYLIB_ALL_H */

2.3引脚配置
删除91-94行,此为官方开发板对IC 74LV595的驱动


删除如下595配置

static iomux_v3_cfg_t const iox_pads[] = {/* IOX_SDI */MX6_PAD_BOOT_MODE0__GPIO5_IO10 | MUX_PAD_CTRL(NO_PAD_CTRL),/* IOX_SHCP */MX6_PAD_BOOT_MODE1__GPIO5_IO11 | MUX_PAD_CTRL(NO_PAD_CTRL),/* IOX_STCP */MX6_PAD_SNVS_TAMPER7__GPIO5_IO07 | MUX_PAD_CTRL(NO_PAD_CTRL),/* IOX_nOE */MX6_PAD_SNVS_TAMPER8__GPIO5_IO08 | MUX_PAD_CTRL(NO_PAD_CTRL),
};

删除595初始化

static void iox74lv_init(void)
{int i;gpio_direction_output(IOX_OE, 0);for (i = 7; i >= 0; i--) {gpio_direction_output(IOX_SHCP, 0);gpio_direction_output(IOX_SDI, seq[qn_output[i]][0]);udelay(500);gpio_direction_output(IOX_SHCP, 1);udelay(500);}gpio_direction_output(IOX_STCP, 0);udelay(500);/** shift register will be output to pins*/gpio_direction_output(IOX_STCP, 1);for (i = 7; i >= 0; i--) {gpio_direction_output(IOX_SHCP, 0);gpio_direction_output(IOX_SDI, seq[qn_output[i]][1]);udelay(500);gpio_direction_output(IOX_SHCP, 1);udelay(500);}gpio_direction_output(IOX_STCP, 0);udelay(500);/** shift register will be output to pins*/gpio_direction_output(IOX_STCP, 1);
};

删除595 set驱动

void iox74lv_set(int index)
{int i;for (i = 7; i >= 0; i--) {gpio_direction_output(IOX_SHCP, 0);if (i == index)gpio_direction_output(IOX_SDI, seq[qn_output[i]][0]);elsegpio_direction_output(IOX_SDI, seq[qn_output[i]][1]);udelay(500);gpio_direction_output(IOX_SHCP, 1);udelay(500);}gpio_direction_output(IOX_STCP, 0);udelay(500);/** shift register will be output to pins*/gpio_direction_output(IOX_STCP, 1);for (i = 7; i >= 0; i--) {gpio_direction_output(IOX_SHCP, 0);gpio_direction_output(IOX_SDI, seq[qn_output[i]][1]);udelay(500);gpio_direction_output(IOX_SHCP, 1);udelay(500);}gpio_direction_output(IOX_STCP, 0);udelay(500);/** shift register will be output to pins*/gpio_direction_output(IOX_STCP, 1);
};

删除732行和734行。

2.4添加复位引脚定义

#define ENET1_RESET IMX_GPIO_NR(5,7)
#define ENET2_RESET IMX_GPIO_NR(5,8)

修改IO配置数组fec1_pads 和 fec2_pads,修改后为,fec1_pads 和 fec2_pads 均新增加最后一行。该数组最终被board_eth_init函数调用。

static iomux_v3_cfg_t const fec1_pads[] = {MX6_PAD_GPIO1_IO06__ENET1_MDIO | MUX_PAD_CTRL(MDIO_PAD_CTRL),MX6_PAD_GPIO1_IO07__ENET1_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET1_TX_DATA0__ENET1_TDATA00 | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET1_TX_DATA1__ENET1_TDATA01 | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET1_TX_EN__ENET1_TX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET1_TX_CLK__ENET1_REF_CLK1 | MUX_PAD_CTRL(ENET_CLK_PAD_CTRL),MX6_PAD_ENET1_RX_DATA0__ENET1_RDATA00 | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET1_RX_DATA1__ENET1_RDATA01 | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET1_RX_ER__ENET1_RX_ER | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET1_RX_EN__ENET1_RX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_SNVS_TAMPER7__GPIO5_IO07 | MUX_PAD_CTRL(NO_PAD_CTRL),
};static iomux_v3_cfg_t const fec2_pads[] = {MX6_PAD_GPIO1_IO06__ENET2_MDIO | MUX_PAD_CTRL(MDIO_PAD_CTRL),MX6_PAD_GPIO1_IO07__ENET2_MDC | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET2_TX_DATA0__ENET2_TDATA00 | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET2_TX_DATA1__ENET2_TDATA01 | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET2_TX_CLK__ENET2_REF_CLK2 | MUX_PAD_CTRL(ENET_CLK_PAD_CTRL),MX6_PAD_ENET2_TX_EN__ENET2_TX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET2_RX_DATA0__ENET2_RDATA00 | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET2_RX_DATA1__ENET2_RDATA01 | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET2_RX_EN__ENET2_RX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_ENET2_RX_ER__ENET2_RX_ER | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_SNVS_TAMPER7__GPIO5_IO08 | MUX_PAD_CTRL(NO_PAD_CTRL),
};

2.5 添加复位代码
函数static void setup_iomux_fec(int fec_id),会根据id对IO初始化,在其中加入复位操作。


修改之后为

static void setup_iomux_fec(int fec_id)
{if (fec_id == 0){imx_iomux_v3_setup_multiple_pads(fec1_pads,ARRAY_SIZE(fec1_pads));gpio_direction_output(ENET1_RESET,1);gpio_set_value(ENET1_RESET,0);mdelay(20);gpio_set_value(ENET1_RESET,1);}else{imx_iomux_v3_setup_multiple_pads(fec2_pads,ARRAY_SIZE(fec2_pads));gpio_direction_output(ENET1_RESET,1);gpio_set_value(ENET2_RESET,0);mdelay(20);gpio_set_value(ENET2_RESET,1);}
}

2.6 添加软复位
主要考虑CPU软复位后,需要对网络驱动IC进行一个软复位。打开文化“drivers/net/phy/phy.c”
对函数“int genphy_update_link(struct phy_device *phydev)添加选中部分代码。

2.7添加环境变量
使用命令setenv和saveenv设置和保存环境变量
ipaddr eg:192.168.1.33
ethadr eg:11.22.33.44.55.66
gatewayip eg:102.168.1.1
netmask eg:255.255.255.0
serverip eg:192.168.1.250

三、测试


注意:如果电脑有打开VPN,请关闭测试。

uboot 添加网络驱动相关推荐

  1. [I.MX6UL] U-Boot移植(六) 网络驱动修改 LAN8720A(对比原子和NXP官方测试板的网络芯片LAN8720A , KSZ8081 (也是飞凌)唯独复位引脚不同595芯片也涉及改动)

    I.MX6UL/ULL 内部有个以太网 MAC 外设,也就是 ENET,需要外接一个 PHY 芯片来实现网络通信功能,也就是内部MAC+外部 PHY 芯片的方案. I.MX6UL/ULL 有两个网络接 ...

  2. [I.MX6UL] U-Boot移植(六) 网络驱动修改 LAN8720A

    I.MX6UL/ULL 内部有个以太网 MAC 外设,也就是 ENET,需要外接一个 PHY 芯片来实现网络通信功能,也就是内部MAC+外部 PHY 芯片的方案. I.MX6UL/ULL 有两个网络接 ...

  3. 在U-boot中添加以太网驱动-Nazgul

    当定义CONFIG_CMD_NET和CONFIG_CMD_PING,编译之后执行ping命令,告警没有找到以太网. 因此,需要打开U-boot的网络功能, u-boot-sunxi-sunxi中没有找 ...

  4. imx6ul——uboot添加RTC,pcf8563驱动

    博主使用的是天嵌的imx6ul_coreB 一般来说uboot一开始是不支持RTC,可是有时需要在uboot上使用RTC,那么就记录一下如何添加RTC 1.添加RTC芯片配置相关 要添加RTC,首先在 ...

  5. linux连接win7的打印机驱动,openWrt用CUPS当打印服务器支持多台打印机,USB打印机设置电脑添加网络USB打印机方法...

    打印机对於日常生活来说,很重要吧!呵呵-没错啊!尤其我们的 Linux 主机如果未来还要作为 Printing server 的话,那么自然就得要先创建好打印机的连线啦!在本章里面我们仅谈论一下如何让 ...

  6. 荔枝派ZERO_修改uboot添加自己的屏幕驱动(一)

    虽然经过前面的小白洗礼,终于将uboot如何切换开机画面弄好了,但是使用的毕竟还是她原本支持的800*480屏幕,而我的最终目的是要使用我自己的480*480屏. 面临的主要问题有:1.对uboot文 ...

  7. 在rk3328上从零构建ubuntu16.04系统系列(1):sdk的环境配置和编译与uboot的网卡驱动配置

    如果有问题,请加QQ群 891339868 进行交流 当前的项目是基于RK3328的硬件方案,安装ubuntu16.04系统,现在基本上告一段落,现在将这个过程记录下来,以备以后查阅,今天先描述一下怎 ...

  8. 03 TI OMAPL138E Linux移植 (Davinci) (资源获取+从串口启动UBoot+从网络启动Linux与文件系统)

    Date: 2018-02-08 [1.从实际硬件上获取主芯片型号为TI的OMAPL138E ],所属系列为OMAPL1,编译默认配置为davinci或者da850. <以下内容失效>&l ...

  9. s5p4418的uboot开通网络支持

    NanoPi2 的uboot2016添加网卡驱动支持 nanopi2系列开发板采用三星的s5p4418处理器,这个处理器在nanopi官方移植了有两个版本的固件分别是: uboot2014+linux ...

最新文章

  1. 微服务网关解决方案调研和使用总结 专题
  2. 基于Express+mongoose搭建的学生管理系统(2017-08-07)
  3. mysql asyn 示例
  4. python常用内置模块-Python基础-22常用内置模块
  5. POJ-1321-棋盘问题(深搜)
  6. 15 函数回调 模块
  7. php 特殊符号处理,处理特殊符号的方法-php技巧
  8. 【HDU - 2112】 HDU Today(dijkstra单源最短路 + map转换)
  9. PaperNotes(8)-Stein Variational Gradient Descent A General Purpose Bayesian Inference Algorithm
  10. ICLR2019 论文清单
  11. python列表、元组、集合、字典、json相互转换以及其他基础入门
  12. navicate 无法远程访问mysql数据库,设置用户
  13. MATLAB分子微纳模拟,FDTD/MODE/DEVICE/Interconnect 微纳光电子模拟
  14. 编译原理(第3版)陈火旺——课后习题答案——第四章
  15. arm64位的Centos7镜像安装JDK
  16. 新电脑配置不低却还是卡顿,你知道原因吗?
  17. qq留言板html代码,qq主人寄语代码_QQ留言板主人寄语
  18. 第二章 软件项目确立
  19. 太为难我了,阿里面试了7轮...
  20. 【网络游戏§绿色DOTA2魔笛V1.001 官方最新版§DOTA游戏辅助工具§】

热门文章

  1. 利用selenium 爬取豆瓣 武林外传数据并且完成 数据可视化 情绪分析
  2. win10的cmd显示颜色更换为绿色的方法
  3. transact sql mysql_MySQL与Transact SQL(MS SQL Server)的SQL语句区别点滴(C++)
  4. PHP是什么,其优势有哪些?
  5. 关于U盘文件消失,但是内存还在的情况。
  6. 移动硬盘位置不可用参数错误的解决方法
  7. php微信授权ajax,ajax 实现微信网页授权登录
  8. 复杂、繁杂、庞杂:图解七种代码耦合类型
  9. 一个利用html5的图片裁剪功能(已解决ios压扁缩放等bug)
  10. eureka服务返回的数据是xml格式