前几篇文章学习了 在 NXP官方uboot上做网络驱动的一部分更改。地址如下:
ALPHA开发板网络方案说明-CSDN博客
NXP官方uboot针对ALPHA开发板网络驱动更改说明一-CSDN博客
NXP官方uboot针对ALPHA开发板网络驱动更改说明二-CSDN博客
本文继续来学习在 NXP官方uboot上做网络驱动方面的更改,适用正点原子ALPHA开发板的uboot。
前面几篇文章学习了 在 NXP官方uboot上做网络驱动方面的更改,适用正点原子ALPHA开发板的uboot。
本文继续学习:更改 网络 PHY芯片 LAN8720A驱动的更改。
int genphy_update_link(struct phy_device *phydev)
{
unsigned int mii_reg;
#ifdef CONFIG_PHY_SMSC
static 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
将 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 DDR3
V1.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卡启动,开发板上电启动。
4. ping ubuntu系统的 ip地址。
U-Boot 2016.03 (Oct 21 2023 - 21:42:25 +0800)
CPU: Freescale i.MX6ULL rev1.1 69 MHz (running at 396 MHz)
CPU: Industrial temperature grade (-40C to 105C) at 44C
Reset cause: POR
Board: MX6ULL ALIENTEK NAND
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
=>
=> setenv ipaddr 192.168.1.50
=> setenv ethaddr b8:ae:1d:01:00:00
=> setenv gatewayip 192.168.1.1
=> setenv netmask 255.255.255.0
=> setenv serverip 192.168.1.66
=> saveenv
Saving Environment to NAND...
Erasing NAND...
Erasing at 0x3c00000 -- 100% complete.
Writing to NAND... OK
=>
试着 ping Ubuntu的 ip。操作如下:
=>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开发板的网络驱动已经更改好。