NXP官方uboot针对ALPHA开发板网络驱动更改说明二
一. 简介
上一篇文章学习了 在 NXP官方uboot上做网络驱动的一部分更改。地址如下:
NXP官方uboot针对ALPHA开发板网络驱动更改说明一-CSDN博客
本文继续来学习在 NXP官方uboot上做网络驱动方面的更改,适用正点原子ALPHA开发板的uboot。
二. NXP官方uboot针对ALPHA开发板网络驱动更改
上一篇文章学习了 在 NXP官方uboot上做网络驱动的一部分更改,包括如下:
1. 更改网络 PHY芯片的 地址
2. 删除 uboot 中 74LV595 的驱动代码
本文继续来在 NXP官方uboot上做网络驱动的更改。
3. 添加 I.MX6U-ALPHA 开发板网络复位引脚驱动
在 mx6ull_alientek_nand.c 文件中,如下代码:static iomux_v3_cfg_t const fec1_pads[] = {MX6_PAD_GPIO1_IO06__ENET1_MDIO | MUX_PAD_CTRL(MDIO_PAD_CTRL),
........MX6_PAD_ENET1_RX_EN__ENET1_RX_EN | MUX_PAD_CTRL(ENET_PAD_CTRL),
};static iomux_v3_cfg_t const fec2_pads[] = {MX6_PAD_GPIO1_IO06__ENET2_MDIO | MUX_PAD_CTRL(MDIO_PAD_CTRL),
........MX6_PAD_ENET2_RX_ER__ENET2_RX_ER | MUX_PAD_CTRL(ENET_PAD_CTRL),
};
结构体数组 fec1_pads 和 fec2_pads 是 ENET1 和 ENET2 这两个网口的 IO 配置参数,在这
两个数组中添加两个网口的复位 IO 配置参数,添加后如下所示:
static iomux_v3_cfg_t const fec1_pads[] = {MX6_PAD_GPIO1_IO06__ENET1_MDIO | MUX_PAD_CTRL(MDIO_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_ENET2_RX_ER__ENET2_RX_ER | MUX_PAD_CTRL(ENET_PAD_CTRL),MX6_PAD_SNVS_TAMPER8__GPIO5_IO08 | MUX_PAD_CTRL(NO_PAD_CTRL),
};
继续在文件 mx6ull_alientek_emmc.c 中找到函数 setup_iomux_fec 函数。
setup_iomux_fec函数 就是根据 fec1_pads 和 fec2_pads 这两个网络 IO 配置数组来初始化 I.MX6ULL 的网络 IO 。我们需要在其中添加网络复位 IO 的初始化代码,并且复位一下 PHY 芯 片,更改后的 setup_iomux_fec 函数如下:
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(ENET2_RESET, 1); gpio_set_value(ENET2_RESET, 0);mdelay(20);gpio_set_value(ENET2_RESET, 1);}
}
第 4 行 ~11 行和第 12 行 ~20 行分别对应 ENET1 和 ENET2 的复 位 IO 初始化,将这两个 IO 设置为输出并且硬件复位一下 LAN8720A ,这个硬件复位很重要! 否则可能导致 uboot 无法识别 LAN8720A 。
正常来说,至此应该 uboot应该支持 网络了。这里编译后测试一下。编译后,将 SD卡插入 电脑usb口,将 SD卡识别到 ubuntu系统中。烧写 uboot,烧写命令如下:
开发板上电,串口打印信息如下:wangtian@wangtian-virtual-machine:~/zhengdian_Linux/linux/uboot/nxp_uboot/uboot-imx-rel_imx_4.1.15_2.1.0_ga$ ./imxdownload u-boot.bin /dev/sdb -256m
U-Boot 2016.03 (Oct 20 2023 - 14:28:42 +0800)CPU: Freescale i.MX6ULL rev1.1 69 MHz (running at 396 MHz)
CPU: Industrial temperature grade (-40C to 105C) at 30C
Reset cause: POR
Board: MX6ULL 14x14 EVK
..................
Net: FEC1
Error: FEC1 address not set.Normal Boot
..................
可以看出,网络识别了。所使用的 Net接口是 FEC1,FEC1网口就是 NET2网口。
开发板上电后,按下"Enter" 键,进入 uboot的命令模式下。
这里试着 ping 一下 Ubuntu系统的 ip 地址。这里我的 ubuntu的 ip地址为 192.168.1.66
串口操作如下:
=> ping 192.168.1.66
*** ERROR: `ipaddr' not set
ping failed; host 192.168.1.66 is not alive
设置 ipaddr地址(即开发板的 ip地址):
=> setenv ipaddr 192.168.1.50
=> saveenv
Saving Environment to NAND...
Erasing NAND...
Erasing at 0x3c00000 -- 100% complete.
Writing to NAND... OK
试着 继续 ping ubuntu:
=> ping 192.168.1.66
*** ERROR: `ethaddr' not set
ping failed; host 192.168.1.66 is not alive
这里提示 ethaddr 地址没有设置,ethaddr地址是网络的 MAC地址。
4. 修改 drivers/net/phy/phy.c 文件中的函数 genphy_update_link
发布者:admin,转转请注明出处:http://www.yc00.com/web/1703130893a1276036.html
评论列表(0条)