前几篇文章学习了 在 NXP官方uboot上做网络驱动的一部分更改。地址如下:
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开发板的网络驱动已经更改好。