Linux内核移植之网络驱动更改说明二

一.  简介

本文继续学习 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

参考 IMX6ULL参考手册,TX_CLK寄存器的  SION位如下:

Linux内核移植之网络驱动更改说明二_第1张图片

5. 修改 smsc.c 文件

6. 配置 Linux 内核,使能 LAN8720 驱动

进入 NXP 官方提供的 Kernel源码的根目录下,输入 “make menuconfig”命令,打开图形化配置界面,选择使能 LAN8720A 的驱动,路径 如下:
-> Device Drivers
    -> Network device support
          -> PHY Device support and infrastructure
                  -> Drivers for SMSC PHYs

选中 "Driver for SMSC PHYs" 选项,如下:

Linux内核移植之网络驱动更改说明二_第2张图片

选择 "Driver for SMSC PHYs" 选项后,进行保存。

Linux内核移植之网络驱动更改说明二_第3张图片

你可能感兴趣的:(系统移植篇,Kernel,arm开发,linux)