Linux 内核移植 |
您所在的位置:网站首页 › 凝思linux网络配置 › Linux 内核移植 |
使能 8 线 EMMC 驱动 Linux 内核驱动里面 EMMC 默认是 4 线模式的,4 线模式肯定没有 8 线模式的速度快,所以将 EMMC 的驱动修改为 8 线模式。修改方法很简单,直接修改设备树即可,打开文件 imx6ull-mybsp-emmc.dts,找到如下所示内容: gedit arch/arm/boot/dts/imx6ull-mybsp-emmc.dts关键字:&usdhc2 只需要将其改为如下代码即可: &usdhc2 { pinctrl-names = "default", "state_100mhz", "state_200mhz"; pinctrl-0 = ; pinctrl-1 = ; pinctrl-2 = ; bus-width = ; non-removable; status = "okay"; };修改完成以后保存一下 imx6ull-mybsp-emmc.dts,然后使用命令“make dtbs”重新编译一下设备树,编译完成以后使用新的设备树重新烧录 Linux 系统即可。下载烧录参考:https://blog.csdn.net/qq_29246181/article/details/106297810 修改网络驱动修改 LAN8720 的复位以及网络时钟引脚驱动ENET1 复位引脚 ENET1_RST 连接在 I.M6ULL 的 SNVS_TAMPER7 这个引脚上。ENET2的复位引脚 ENET2_RST 连接在 I.MX6ULL 的 SNVS_TAMPER8 上。打开设备树文件 imx6ull-mybsp-emmc.dts,找到如下代码: gedit arch/arm/boot/dts/imx6ull-mybsp-emmc.dts关键词:pinctrl_spi4: 第 588 和 589 行就是初始化 SNVS_TAMPER7 和 SNVS_TAMPER8 这两个引脚的,但是它们作为了 SPI4 的 IO口。所以我们要删除SPI4的IO口掉重新定义。修改后: 关键词:spi4 { 第 129 行,设置 GPIO5_IO08 为 SPI4 的一个功能引脚,而GPIO5_IO08 就是 SNVS_TAMPER8 的 GPIO 功能引脚。 第 133 行, 设置 GPIO5_IO07 作为 SPI4 的片选引脚, 而 GPIO5_IO07 就是 SNVS_TAMPER7的 GPIO 功能引脚。 现在我们需要 GPIO5_IO07 和 GPIO5_IO08 分别作为 ENET1 和 ENET2 的复位引脚,而不是 SPI4 的什么功能引脚, 因此将示例代码中的第 129 行和第 133 行处的代码删除掉! !否则会干扰到网络复位引脚!修改后: 关键词:iomuxc_snvs然后在此节点下添加网络复位引脚信息,内容如下: /*enet1 reset*/ pinctrl_enet1_reset:enet1resetgrp { fsl,pins = < /* used for enet1 reset */ MX6ULL_PAD_SNVS_TAMPER7__GPIO5_IO07 0x10B0 /* ENET1 RESET */ >; }; /*enet2 reset*/ pinctrl_enet2_reset:enet2resetgrp { fsl,pins = < /* used for enet2 reset */ MX6ULL_PAD_SNVS_TAMPER8__GPIO5_IO08 0x10B0 /* ENET2 RESET */ >; };**关键词:pinctrl_enet1: **添加如下内容: MX6UL_PAD_ENET1_TX_CLK__ENET1_REF_CLK1 0x4001b009MX6UL_PAD_ENET2_TX_CLK__ENET2_REF_CLK2 0x4001b009修改前: 修改后: 资料直通车:Linux内核源码资料文档+视频资料 学习直通车:Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈 至此网络复位以及时钟引脚驱动就修改完成。 修改 fec1 和 fec2 节点的 pinctrl-0 属性gedit arch/arm/boot/dts/imx6ull-mybsp-emmc.dts先看下修改前,和修改后。 第一部分://添加了 ENET1 网络复位引脚所使用的 IO 为 GPIO5_IO07, 低电平有效。复位低电平信号持续时间为 200ms。//添加了 ENET2 网络复位引脚所使用的 IO 为 GPIO5_IO08, 低电平有效,持续时间同样为 200ms。 pinctrl-0 = ; pinctrl-0 = ; phy-reset-gpios = ; phy-reset-duration = ; phy-reset-gpios = ; phy-reset-duration = ;第二部分:①“smsc,disable-energy-detect” 表明 PHY 芯片是 SMSC 公司的, 这样 Linux内核就会找到 SMSC 公司的 PHY 芯片驱动来驱动 LAN8720A。②ethernet-phy@”后面的数字是 PHY 的地址,ENET1 的 PHY 地址为 0,所以“@”后面是 0(默认为 2)。reg 的值也表示 PHY 地址,ENET1 的 PHY 地址为 0,所以 reg=0。ENET1 的 LAN8720A 地址为 0x0,ENET2 的 LAN8720A地址为 0x1。 ethphy0: ethernet-phy@0 { compatible = "ethernet-phy-ieee802.3-c22"; smsc,disable-energy-detect; reg = ; }; ethphy1: ethernet-phy@1 { compatible = "ethernet-phy-ieee802.3-c22"; smsc,disable-energy-detect; reg = ; }; &fec1 { pinctrl-names = "default"; pinctrl-0 = ; phy-mode = "rmii"; phy-handle = ; phy-reset-gpios = ; phy-reset-duration = ; status = "okay"; }; &fec2 { pinctrl-names = "default"; pinctrl-0 = ; phy-mode = "rmii"; phy-handle = ; phy-reset-gpios = ; phy-reset-duration = ; status = "okay"; mdio { #address-cells = ; #size-cells = ; ethphy0: ethernet-phy@0 { compatible = "ethernet-phy-ieee802.3-c22"; smsc,disable-energy-detect; reg = ; }; ethphy1: ethernet-phy@1 { compatible = "ethernet-phy-ieee802.3-c22"; smsc,disable-energy-detect; reg = ; }; }; };重新编译一下设备树,终端输入:make dtbs 要 在 I.MX6ULL 上 使 用 LAN8720A , 需 要 修 改 一 下 Linux 内 核 源 码 , 打 开drivers/net/ethernet/freescale/fec_main.c。 gedit drivers/net/ethernet/freescale/fec_main.c关键词: fec_probefec_probe 中加入如下代码: 终端输入命令:make menuconfig步骤:①-> Device Drivers② -> Network device support③ -> PHY Device support and infrastructure④ -> Drivers for SMSC PHYs 保存完毕了,选择Exit,一路退出。 修改 smsc.c 文件首先需要找到 LAN8720A 的驱动文件,LAN8720A 的驱动文件是 drivers/net/phy/smsc.c,在此文件中有个叫做 smsc_phy_reset 的函数。 gedit drivers/net/phy/smsc.c①添加头文件 #include #include② 修改复位函数:smsc_phy_reset (不要用shell,因为会清除配置文件)。 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_mybsp_emmc_defconfigmake ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j16下载烧录:编译完成以后就会在目录 arch/arm/boot 下生成 zImage 镜像文件。在 arch/arm/boot/dts 目录下生成 imx6ull-alientek-emmc.dtb 文件。 设置uboot环境变量:https://blog.csdn.net/qq_29246181/article/details/106265362 setenv bootargs ‘console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw’saveenv将zImage烧录到开发板中(参考 4、tftp 命令):https://blog.csdn.net/qq_29246181/article/details/106272766 cp arch/arm/boot/zImage …/…/tftpboot/ -fcp arch/arm/boot/dts/imx6ull-mybsp-emmc.dtb …/…/tftpboot/ -f将这两个文件拷贝到 tftp 目录下,然后重启开发板,在uboot 命令模式中使用 tftp 命令下载这两个文件并启动,命令如下: tftp 80800000 zImagetftp 83000000 imx6ull-mybsp-emmc.dtbbootz 80800000 - 83000000修改好设备树和 Linux 内核以后重新编译一下,得到新的 zImage 镜像文件和 imx6ull-mybsp-emmc.dtb 设备树文件, 使用网线将 I.MX6U-ALPHA 开发板的两个网口与路由器或者电脑连接起来,最后使用新的文件启动 Linux 内核。输入命令“ifconfig -a”来查看一下开发板中存在的所有网卡: 使用如下命令依次打开 eth0 和 eth1 这两个网卡: ifconfig eth0 upifconfig eth1 up输入“ifconfig”命令来查看一下当前活动的网卡 可以看出,此时 eth0 和 eth1 两个网卡都已经打开,并且工作正常,但是这两个网卡都还没有 IP 地址,所以不能进行 ping 等操作。使用如下命令给两个网卡配置 IP 地址: ifconfig eth0 192.168.1.251、ifconfig eth1 192.168.1.252使用“ping”命令来 ping 一下自己的主机。 ping 192.168.1.250因为使用shell,因为会清除配置文件,所有我们需要把配置文件另存为。操作如下: 终端输入:make menuconfig输入:arch/arm/configs/imx_mybsp_emmc_defconfig 这样就可以使用shell,因为另存为后,就不会被清除。运行脚本: chmod 777 imx6ull_mybsp_emmc.sh//给予可执行权限./imx6ull_mybsp_emmc.sh//执行 shell 脚本编译内核https://www.cnblogs.com/xuejiangqiang/p/16582512.html |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |