野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5791|回复: 1

[经验\资料] 驱动移植之网口移植

[复制链接]
发表于 2023-1-13 12:40:23 | 显示全部楼层 |阅读模式
本帖最后由 おおおじ。 于 2023-1-13 15:31 编辑

前言
imx6ull的IO资源比较“紧张”,在nxp以及野火的imx6ull的底板上网口复位引脚以及其他一些外设的复位引脚都使用74LV595进行IO扩展,如图下图所示,但在实际项目中IO资源可能并不紧张,那么还使用74LV595进行IO扩展就显得十分多余!本文教大家如何使用其他IO对网口进行复位,并且在实际项目中也可能只用到一个网口,另一个网口的引脚作其他复用,本文也教大家如何实现单网口。

野火论坛202301130908171821..png


一、硬件说明
下图为野火imx6ull mini底板的扩展IO,实际项目中可以直接使用SNVS_TAMPER7以及SNVS_TAMPER8,也即GPIO5_7和GPIO5_8分别对两网口进行复位。
野火论坛202301130922143671..png
野火论坛202301130936286450..png

二、驱动移植
虚拟机环境:ubuntu18.04
开发板:实际项目中采用野火imx6ull核心板的开发板
开发板镜像:野火debian 2022_10_08镜像


搭建编译环境
sudo apt install make gcc-arm-linux-gnueabihf gcc bison flex libssl-dev dpkg-dev lzop

获取内核源码

1、网口复位引脚修改
(无论是单网口还是双网口此处请先跟着修改)
如果是emmc核心板打开ebf_linux_kernel_6ull_depth1/arch/arm/boot/dts/imx6ull-mmc-npi.dts
如果是nand核心板打开ebf_linux_kernel_6ull_depth1/arch/arm/boot/dts/imx6ull-nand-npi.dts

两者修改方法一致,只是对应的文件不同,下面以emmc核心板为例

找到74hc595的节点,将pinctrl-assert-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>;  以及cs-gpios = <&gpio5 7 0>;  进行注释,避免与后面配置冲突,修改完如下图所示
野火论坛202301130951095871..png

添加复位引脚
找到&fec1以及&fec2节点分别添加
        phy-reset-gpios = <&gpio5 7 GPIO_ACTIVE_LOW>; // 复位引脚
        phy-reset-duration = <200>; //复位时间

        phy-reset-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>; // 复位引脚
        phy-reset-duration = <200>; //复位时间
修改完如下图所示
野火论坛202301130957537497..png

添加复位引脚属性配置
找到pinctrl_enet1以及pinctrl_enet2节点分别修改时钟的电气属性以及添加复位引脚配置
        MX6UL_PAD_ENET1_TX_CLK__ENET1_REF_CLK1        0x4001b009 // 时钟
        MX6UL_PAD_SNVS_TAMPER7__GPIO5_IO07        0x10B0 // 复位引脚

        MX6UL_PAD_ENET2_TX_CLK__ENET2_REF_CLK2        0x4001b009 // 时钟
        MX6UL_PAD_SNVS_TAMPER8__GPIO5_IO08        0x10B0 // 复位引脚
修改完如下图所示
野火论坛202301131431407556..png

重新编译设备树
在内核源码顶层目录输入:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- npi_v7_defconfig
make ARCH=arm -j4 CROSS_COMPILE=arm-linux-gnueabihf- dtbs
如下下图所示
野火论坛202301131009348283..png

编译出来的设备树生成在 arch/arm/boot/dts/imx6ull-mmc-npi.dtb位置

替换开发板的设备树,设备树.dtb文件可以直接替换到板子的 /usr/lib/linux-image-4.19.35-imx6/ 目录下后重启
sudo cp -f imx6ull-mmc-npi.dtb  /usr/lib/linux-image-4.19.35-imx6/
执行完上面命令重启开发板即可

2、单网口修改
(1)单eth1网口
找到pinctrl_enet1以及pinctrl_enet2节点
在pinctrl_enet1节点下添加
        MX6UL_PAD_GPIO1_IO07__ENET2_MDC        0x1b0b0
        MX6UL_PAD_GPIO1_IO06__ENET2_MDIO        0x1b0b0
在pinctrl_enet2下,将以下内容都注释掉
        /*                MX6UL_PAD_GPIO1_IO07__ENET2_MDC                0x1b0b0
                        MX6UL_PAD_GPIO1_IO06__ENET2_MDIO        0x1b0b0
                        MX6UL_PAD_ENET2_RX_EN__ENET2_RX_EN        0x1b0b0
                        MX6UL_PAD_ENET2_RX_ER__ENET2_RX_ER        0x1b0b0
                        MX6UL_PAD_ENET2_RX_DATA0__ENET2_RDATA00        0x1b0b0
                        MX6UL_PAD_ENET2_RX_DATA1__ENET2_RDATA01        0x1b0b0
                        MX6UL_PAD_ENET2_TX_EN__ENET2_TX_EN        0x1b0b0
                        MX6UL_PAD_ENET2_TX_DATA0__ENET2_TDATA00        0x1b0b0
                        MX6UL_PAD_ENET2_TX_DATA1__ENET2_TDATA01        0x1b0b0
                        MX6UL_PAD_ENET2_TX_CLK__ENET2_REF_CLK2        0x4001b009 // 时钟
                        MX6UL_PAD_SNVS_TAMPER8__GPIO5_IO08        0x10B0 // 复位引脚 */
修改完如下图所示
野火论坛202301131434464957..png

重新编译设备树
在内核源码顶层目录输入:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- npi_v7_defconfig
make ARCH=arm -j4 CROSS_COMPILE=arm-linux-gnueabihf- dtbs
如下下图所示
野火论坛202301131515272144..png

编译出来的设备树生成在 arch/arm/boot/dts/imx6ull-mmc-npi.dtb位置

替换开发板的设备树,设备树.dtb文件可以直接替换到板子的 /usr/lib/linux-image-4.19.35-imx6/ 目录下后重启
sudo cp -f imx6ull-mmc-npi.dtb  /usr/lib/linux-image-4.19.35-imx6/
执行完上面命令重启开发板即可

(2)单eth2网口
eth2网口相对单eth1网口修改十分简单,只需将&fec1改为 disabled即可,修改为如下图所示
野火论坛202301131035155904..png

重新编译设备树
在内核源码顶层目录输入:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- npi_v7_defconfig
make ARCH=arm -j4 CROSS_COMPILE=arm-linux-gnueabihf- dtbs
如下下图所示
野火论坛202301131516013659..png

编译出来的设备树生成在 arch/arm/boot/dts/imx6ull-mmc-npi.dtb位置

替换开发板的设备树,设备树.dtb文件可以直接替换到板子的 /usr/lib/linux-image-4.19.35-imx6/ 目录下后重启
sudo cp -f imx6ull-mmc-npi.dtb  /usr/lib/linux-image-4.19.35-imx6/
执行完上面命令重启开发板即可

三、其他型号的PHY芯片驱动
nxp和野火都使用KSZ8081RNB型号的PHY芯片,那么使用其他型号的PHY芯片驱动应该如何修改呢?

其实内核已经自带了通用的PHY驱动,理论上可以驱动任何的PHY芯片,并且这个驱动是开启了的
而PHY驱动的匹配规则是首先匹配我们指定的PHY驱动,例如KSZ8081RNB这个型号,是micrel公司生产的,我们配置好设备树和在内核开启了相应的驱动后,首先匹配的就是micrel的驱动
野火论坛202301131100448304..png

野火论坛202301131101336040..png

野火论坛202301131104226450..png

当驱动匹配不成功的时候就会匹配通用的PHY驱动,笔者这里测试过其他型号的PHY芯片,例如SR8201F型号的PHY芯片,这个芯片是SMSC公司生产的,如果要使用对应的驱动来驱动该PHY芯片,正常操作是开启对应驱动,修改设备树,参考下图
野火论坛202301131111291074..png

野火论坛202301131114516253..png

如果要使用通用的PHY驱动来驱动该PHY芯片,如上述所说当驱动匹配不成功的时候就会匹配通用的PHY驱动,所以你可以完全不修改内核配置和设备树(这里指没有修改过复位引脚,改了复位的话是要按之前所说的修改复位引脚)
野火论坛202301131142123817..png

四、PHY地址说明
PHY的地址是在硬件上确定的,然后软件上再根据硬件设计,例如野火底板,eth1的地址为0x02,eth2的地址为0x01
野火论坛202301131152447982..png

野火论坛202301131153311668..png

根据硬件设计,在设备树里面确定两网口的PHY地址,硬件地址和软件地址要对应
野火论坛202301131231265795..png

五、附件
提供eth1、eth2网口PHY地址分别为0x02、0x01的修改好复位引脚的emmc版本和nand版本的双网口、单网口的设备树源码以及编译好的文件
网口移植.zip (71.5 KB, 下载次数: 29)









回复

使用道具 举报

发表于 2023-1-13 15:48:33 | 显示全部楼层
谢谢大佬
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-4-20 09:03 , Processed in 0.035154 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表