一. 简介
前几篇文章学习了 在 NXP官方uboot上做网络驱动的一部分更改。地址如下:
ALPHA开发板网络方案说明-CSDN博客
NXP官方uboot针对ALPHA开发板网络驱动更改说明一-CSDN博客
NXP官方uboot针对ALPHA开发板网络驱动更改说明二-CSDN博客
本文继续来学习在 NXP官方uboot上做网络驱动方面的更改,适用正点原子ALPHA开发板的uboot。
二. NXP官方uboot针对ALPHA开发板网络驱动更改
前面几篇文章学习了 在 NXP官方uboot上做网络驱动方面的更改,适用正点原子ALPHA开发板的uboot。
本文继续学习:更改 网络 PHY芯片 LAN8720A驱动的更改。
4. 修改 drivers/net/phy/phy.c 文件中的函数 genphy_update_link
int genphy_update_link(struct phy_device *phydev)
{unsigned int mii_reg;#ifdef CONFIG_PHY_SMSCstatic int lan8720_flag = 0;int bmcr_reg = 0;if (lan8720_flag == 0) {bmcr_reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR); phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, BMCR_RESET); while(phy_read(phydev, MDIO_DEVAD_NONE, MII_BMCR) & 0X8000){udelay(100); }phy_write(phydev, MDIO_DEVAD_NONE, MII_BMCR, bmcr_reg); lan8720_flag = 1;}#endif/** Wait if the link is up, and autonegotiation is in progress* (ie - we're capable and it's not done)*/mii_reg = phy_read(phydev, MDIO_DEVAD_NONE, MII_BMSR);
...................return 0;
}
注意:这里需要参考 网络PHY芯片 LAN8720A 的数据手册:LAN_8720A-CP_datasheet.pdf文档。
LAN8720A 数据手册所在目录:
【正点原子】阿尔法Linux开发板(A盘)-基础资料-2022 /【正点原子】阿尔法Linux开发板(A盘)-基础资料 / 硬件资料 / 芯片资料
代码分析:
上面的 genphy_update_link 函数中,新添加的代码 为条件编译代码段,只有使用 SMSC 公司的 PHY 这段 代码才会执行。
三. 编译测试
1. 编译 uboot源码,进入 Uboot根目录,使用脚本编译:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/linux/uboot/nxp_uboot/uboot-imx-rel_imx_4.1.15_2.1.0_ga$ ./imx6ull_alientek_nand.sh
2. 烧写到 SD卡
将 SD卡插入 读卡器,将读卡器插入电脑。连接进 ubuntu系统下。
进入Uboot根目录, 使用 imxdownload软件,将 u-boot.bin 烧写到 SD卡,操作如下:
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
I.MX6ULL bin download software
Edit by:zuozhongkai
Date:2019/6/10
Version:V1.1
log:V1.0 initial version,just support 512MB DDR3V1.1 and support 256MB DDR3
file u-boot.bin size = 470120Bytes
Board DDR SIZE: 256MB
Delete Old load.imx
Create New load.imx
Download load.imx to /dev/sdb ......
[sudo] wangtian 的密码:
记录了924+1 的读入
记录了924+1 的写出
473192字节(473 kB,462 KiB)已复制,0.54755 s,864 kB/s
3. 开发板运行。
将 SD卡插入开发板,开发板的拨码开关拨到 SD卡启动,开发板上电启动。
串口打印如下:
U-Boot 2016.03 (Oct 20 2023 - 18:20:39 +0800)CPU: Freescale i.MX6ULL rev1.1 69 MHz (running at 396 MHz)
CPU: Industrial temperature grade (-40C to 105C) at 35C
Reset cause: POR
Board: MX6ULL 14x14 EVK
I2C: ready
DRAM: 256 MiB
NAND: 512 MiB
MMC: FSL_SDHC: 0, FSL_SDHC: 1
Display: TFT43AB (480x272)
Video: 480x272x24
In: serial
Out: serial
Err: serial
Net: FEC1
Normal Boot
Hit any key to stop autoboot: 0
=>
4. ping ubuntu系统的 ip地址。
开发板上电后按下 "Enter"回车键进入 uboot命令模式下。试着 ping Ubuntu的 ip。操作如下:
U-Boot 2016.03 (Oct 20 2023 - 18:20:39 +0800).................
Net: FEC1
Normal Boot
Hit any key to stop autoboot: 0
=>
=>ping 192.168.1.66
FEC1 Waiting for PHY auto negotiation to complete.... done
Using FEC1 device
host 192.168.1.66 is alive
=>
可以看出,所使用的网络是 FEC1,也就是对应网络 2。 ping Ubuntu 的 ip 时也可以 ping通,至此针对 ALPHA开发板的网络驱动已经更改好。