一、说明
本人使用IMX6ULL开发板(正点原子阿尔法)!!!
二、网络驱动修改步骤
1.事先要有自己的uboot(移植NXP的uboot重名为my_uboot);
2.将自己的开发板添加到my_uboot中(这里就不细说了);
3. 上面2步骤添加完之后,能编译通过且可以正常启动uboot;
4. 在此基础上,开始网络驱动移植。
三、网络驱动修改
1. 网络 PHY 地址修改
首先修改 uboot 中的 ENET1 和 ENET2 的 PHY 地址和驱动,打开 mx6ull_my_emmc.h
这个文件,找到如下代码:代码在325行。
如上图所示,只修改三处即可!!!
2.删除 uboot 中 的 74LV595 驱动代码
uboot 中网络 PHY 芯片地址修改完成以后就是网络复位引脚的驱动修改了,打开
mx6ull_my_emmc.c,找到如下代码:
上图代码 中以 IOX 开头的宏定义是 74LV595 的相关 GPIO,因为 NXP 官方I.MX6ULL EVK 开发板使用 74LV595 来扩展 IO,两个网络的复位引脚就是由 74LV595 来控制的。正点原子的 开发板并没有使用 74LV595,因此我们将示例代码中的代码删除掉,替换为如下所示代码:
继续在 mx6ull_my_emmc.c 中找到如下代码:将其删除掉!!!
继续在 mx6ull_my_emmc.c 中找到如下函数static void iox74lv_init(void)、void iox74lv_set(int index)将其删除掉!!!
继续在 mx6ull_my_emmc.c 中找到 board_init 函数,作如下修改:删除这两行代码
3.添加开发板网络复位引脚驱动
在 mx6ull_my_emmc.c 中找到如下两个函数,并做修改:
添加如上两行代码!!!
在 mx6ull_my_emmc.c 中找到setup_iomux_fec函数,并添加如下代码:
添加mdelay(150),很重要,我的是v2.4的板子,添加后网卡才能初始化成功
4. 修改 drivers/net/phy/phy.c 文件中的函数 genphy_update_link
大功基本上告成,还差最后一步,uboot 中的 LAN8720A 驱动有点问题,打开文件
drivers/net/phy/phy.c,找到函数 genphy_update_link,这是个通用 PHY 驱动函数,此函数用于更新 PHY 的连接状态和速度。使用 LAN8720A 的时候需要在此函数中添加一些代码,修改后的
函数 genphy_update_link 如下所示:添加如下代码!!!
至此网络的复位引脚驱动修改完成,重新编译 uboot,然后将 u-boot.bin 烧写到 SD 卡中并
启动,uboot 启动信息如图 所示:
从图 中可以看到“Net: FEC1”这一行,提示当前使用的 FEC1 这个网口,也就是 ENET2。在 uboot 中使用网络之前要先设置几个环境变量,命令如下:
setenv ipaddr 192.168.10.50 //开发板IP地址 setenv ethaddr 00:04:9f:04:d3:32 //开发板网卡MAC地址 setenv gatewayip 192.168.10.1 //开发板默认网关 setenv netmask 255.255.255.0 //开发板子网掩码 setenv severip 192.168.10.100 //服务器地址,也就是 Ubuntu 地址 saveenv //保存环境变量
设置好环境变量以后就可以在 uboot 中使用网络了,用网线将 开发板上的 ENET2
与电脑或者路由器连接起来,保证开发板和电脑在同一个网段内,通过 ping 命令来测试一下网
络连接,命令如下: 切记!!!在ping之前一定要启动服务器,也就是ubuntu!!!
从图可以看出,ping 主机也成功,说明 ENET1 网络也工作正常,至此,开发板的网络都工作正常了。
如果FEC1网卡不通,可以换一个到FEC0,修改方式如下