众所周知,i.mx6ull自带2路百兆以太网口,且ENET2对应内核中eth0网卡节点,ENET1对应内核中eth1网卡节点,诸多配置均以eth0为默认网卡。为了现场应用或自定义载板设计,不需要使用多网口或者只选用eth1时该如何配置呢,在眺望电子TW-AC6G-EVM开发板上修改只使用单网卡作为参照修改:
编译环境及开发包:
主机:ubuntu18.04
交叉编译器:arm-linux-gnueabihf-gcc
QT5.12.8:qt-everywhere-opensource-src-5.12.8
开发板:TW-AC6G-EVM
Linux:Linux-4.1.15
串口工具:Xshell
注意:本文章的所有命令涉及到的路径均为眺望电子官方环境路径,需根据自身实际环境改变。本文所演示的平台来自于眺望电子 iMX6ULL ARM嵌入式平台,这是一个基于NXP iMX6ULL ARM处理器,主频800MH在 Cortex-A7的核心板。
1、打开Linux源码目录/arch/arm/boot/dts
下的hd-imx6ull-core-emmc.dts
,如图1.1所示屏蔽掉fec1节点。
2、如图1.2所示,屏蔽掉LAN1(fec1)对应的pinctrl_enet节点。
修改完成以后重新编译设备树,得到新的hd-imx6ull-core-emmc.dtb
并将其改名为imx6ull-14x14-evk.dtb
,替换掉开发板/run/media/mmcblk1p1/imx6ull-14x14-evk.dtb
,再输入sync。此处示例用U盘更新:
root@twdz-IMX6ULL:~# cp /run/media/sda1/imx6ull-14x14-evk.dtb /run/media/mmcblk1p1/
root@twdz-IMX6ULL:~# sync
重启后就会使用新的设备树。内核启动后,输入如下命令查看当前系统中所有网卡:
ifconfig -a //查看所有网卡
如图2.1,打开Linux源码目录/arch/arm/boot/dts
下的hd-imx6ull-core-emmc.dts
,屏蔽或删除掉hd-imx6ull-core-emmc.dts
文件中LAN2网卡对应的fec2节点内容。
接下来需要fec1节点进行修改,重点是在fec1节点下添加 mdio 子节点,修改后的fec1节点内容如下所示:
&fec1 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_enet1>;
phy-mode = "rmii";
phy-handle = <ðphy0>;
status = "okay";
mdio {
#address-cells = <1>;
#size-cells = <0>;
ethphy0: ethernet-phy@0 {
compatible = "ethernet-phy-ieee802.3-c22";
reg = <0>;
};
};
};
如图2.2所示,屏蔽或删除掉LAN2(fec2)对应的pinctrl_enet2节点。
默认情况下 GPIO1_IO07 和 GPIO1_IO06 复用为ENET2的MDC和MDIO,因此这里我们需要重新将 GPIO1_IO07 和 GPIO1_IO06 这两个IO复用为 ENET1 的 MDC和 DMIO,修改后的 pinctrl_enet1 内容如下所示:
pinctrl_enet1: enet1grp {
fsl,pins = <
MX6UL_PAD_GPIO1_IO07__ENET1_MDC 0x1b0b0
MX6UL_PAD_GPIO1_IO06__ENET1_MDIO 0x1b0b0
MX6UL_PAD_ENET1_RX_EN__ENET1_RX_EN 0x1b0b0
MX6UL_PAD_ENET1_RX_ER__ENET1_RX_ER 0x1b0b0
MX6UL_PAD_ENET1_RX_DATA0__ENET1_RDATA00 0x1b0b0
MX6UL_PAD_ENET1_RX_DATA1__ENET1_RDATA01 0x1b0b0
MX6UL_PAD_ENET1_TX_EN__ENET1_TX_EN 0x1b0b0
MX6UL_PAD_ENET1_TX_DATA0__ENET1_TDATA00 0x1b0b0
MX6UL_PAD_ENET1_TX_DATA1__ENET1_TDATA01 0x1b0b0
MX6UL_PAD_ENET1_TX_CLK__ENET1_REF_CLK1 0x4001b031
>;
};
修改完成以后重新编译设备树,得到新的hd-imx6ull-core-emmc.dtb
并将其改名为imx6ull-14x14-evk.dtb
,替换掉开发板/run/media/mmcblk1p1/imx6ull-14x14-evk.dtb
,再输入sync。此处示例用U盘更新:
root@twdz-IMX6ULL:~# cp /run/media/sda1/imx6ull-14x14-evk.dtb /run/media/mmcblk1p1/
root@twdz-IMX6ULL:~# sync
重启后就会使用新的设备树。内核启动后,输入如下命令查看当前系统中所有网卡:
ifconfig -a //查看所有网卡
从图 2.3 可以看出,此时系统只有一个 eth0 网卡,这里的 eth0 网卡就是ENET1,不要与前面的混淆,以为 eth0 是 ENET2 网卡名字。