一. 简介
本文继续学习 NXP官方Linux内核移植网络驱动的更改。
在学习 uboot 移植的时候就已经说过了,正点原子开发板的网络和 NXP 官方的网络硬件上不同,网络 PHY 芯片由 KSZ8081 换为了 LAN8720A,两个网络 PHY 芯片的复位 IO 也不同。 所以,Linux 内核自带的网络驱动是驱动不起来 I.MX6U-ALPHA 开发板上的网络的,需要做修改。
本文继上一篇文章的学习,文章地址如下:
Linux内核移植之网络驱动更改说明一-CSDN博客
二. Linux内核移植之网络驱动更改
之前网络驱动更改中,修改网络复位IO和PHY 地址以后,Linux 内核内部通用 PHY驱动已经正常工作。上一篇文章已经可以 ping通 ubuntu系统了。
但是,正点原子视频学习中,左神说网络可能还会存在问题,还需要做网络其他方面的更改。
这里在之前更改的基础上,再进行网络驱动其他方面的更改。具体如下:
4. 修改 fec_main.c 文件
要 在 I.MX6ULL 上 使 用 LAN8720A , 需 要 修 改 一 下 Linux 内 核 源 码 , 打 开
drivers/net/ethernet/freescale/fec_main.c,找到 fec_probe() 函数,在 fec_probe()函数 中加入如下代码:
static int fec_probe(struct platform_device *pdev)
{struct fec_enet_private *fep;struct fec_platform_data *pdata;struct net_device *ndev;int i, irq, ret = 0;struct resource *r;const struct of_device_id *of_id;static int dev_id;struct device_node *np = pdev->dev.of_node, *phy_node;int num_tx_qs;int num_rx_qs;/* zuozhongkai 2019/2/20 设置MX6UL_PAD_ENET1_TX_CLK和* MX6UL_PAD_ENET2_TX_CLK这两个IO的复用寄存器的SION位* 为1。*/void __iomem *IMX6U_ENET1_TX_CLK;void __iomem *IMX6U_ENET2_TX_CLK;IMX6U_ENET1_TX_CLK = ioremap(0X020E00DC, 4);writel(0X14, IMX6U_ENET1_TX_CLK);IMX6U_ENET2_TX_CLK = ioremap(0X020E00FC, 4);writel(0X14, IMX6U_ENET2_TX_CLK);...........................................return 0;
}
第18行 ~ 第 25行,是新添加的代码,如果要在 I.MX6ULL 上使用 LAN8720A 就需要设置 ENET1 和 ENET2 的 TX_CLK 引脚复位寄存器的 SION 位为 1。