当前位置: 首页 > news >正文

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

一.  简介

本文学习 NXP官方Linux内核移植网络驱动的更改。

为了方便后面 Linux驱动的开发调试,所以,必须要把网络驱动调试好。

如果在做 Linux驱动开发时,写了一个 app或驱动,就需要将系统全部文件(即 uboot,kernel,.dtb文件,filesystem文件系统)烧写到开发板上,这个烧写过程是很慢的,filesystem根文件系统是很大的。

网络调试的话,可以将所有文件存放在 ubuntu系统下,开发板系统启动后,将 ubuntu系统下的 某个文件目录挂载在开发板上。如果更新了某个程序或文件,可以将其直接拷贝到该文件目录下,开发板就可以直接运行调试。这样调试十分方便。

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

在学习 uboot 移植的时候就已经说过了,正点原子开发板的网络和 NXP(恩智浦) 官方的网络硬件上 不同,网络 PHY 芯片由 KSZ8081 换为了 LAN8720A ,两个网络 PHY 芯片的复位 IO 也不同。 所以, NXP官方的 Linux 内核自带的网络驱动是驱动不起来 I.MX6U-ALPHA 开发板上的网络的,需要做修 改。

网络驱动的更改大体有五个方面更改。下面具体说明更改点。

1.  修改 LAN8720 的复位引脚驱动 与 网络时钟引脚驱动

(1) 删除 LAN8720(PHY芯片)的复位引脚做别的功能

结合IMX6ULL参考手册与网络硬件原理图可以知道,网络 ENET1 复位引脚 ENET1_RST 连接在 I.M6ULL SNVS_TAMPER7 这个引脚上。网络ENET2 的复位引脚 ENET2_RST 连接在 I.MX6ULL SNVS_TAMPER8 上。

这里我所使用的开发板是 nand-Flash版,对应的设备树配置文件为 imx6ull-alientek-nand.dts(之前添加ALPHA开发板添加的)。因为 imx6ull-alientek-nand.dts调用了imx6ull-14x14-evk.dts文件。

打开设备树文件 imx6ull-14x14-evk.dts,如下代码:

		pinctrl_spi4: spi4grp {fsl,pins = <MX6ULL_PAD_BOOT_MODE0__GPIO5_IO10        0x70a1MX6ULL_PAD_BOOT_MODE1__GPIO5_IO11        0x70a1/* MX6ULL_PAD_SNVS_TAMPER7__GPIO5_IO07      0x70a1 *//* MX6ULL_PAD_SNVS_TAMPER8__GPIO5_IO08      0x80000000 */>;};
5 行和 第 6 行,就是初始化 SNVS_TAMPER7 SNVS_TAMPER8 这两个 引脚的,这里是作为了 SPI4 IO ,这不是我们想要的,所以将第5行 第6行 代码 删除掉!

继续在 imx6ull-14x14-evk.dts 文件中,找到如下代码:

spi4 {compatible = "spi-gpio";
..................................../*	pinctrl-assert-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>; */status = "okay";gpio-sck = <&gpio5 11 0>;gpio-mosi = <&gpio5 10 0>;/*	cs-gpios = <&gpio5 7 0>;  */num-chipselects = <1>;
...................................
}

如上所示:4 行,设置 GPIO5_IO08 SPI4 的一个功能引脚(我也不清楚具体作为什么功能用)GPIO5_IO08 就是 SNVS_TAMPER8 GPIO 功能引脚。

8 行,设置 GPIO5_IO07 作为 SPI4 的片选引脚,而 GPIO5_IO07 就是 SNVS_TAMPER7 GPIO 功能引脚。
现在我们需要 GPIO5_IO07 GPIO5_IO08 分别作为 ENET1 ENET2 的复位引脚,而不 SPI4 的功能引脚,因此,上面第 4 行与第 8行 处的代码删除掉!! 否则会干扰到网络复位引脚!

(2) 添加网络复位引脚,配置网络时钟

在 imx6ull-14x14-evk.dts 文件中找到名为 “ iomuxc_snvs ” 的节点 ,然后在 此节点下添加网络复位引脚信息,添加完成以后的 “ iomuxc_snvs ” 的节点内容如下:

&iomuxc_snvs {pinctrl-names = "default_snvs";pinctrl-0 = <&pinctrl_hog_2>;imx6ul-evk {
...............................    /*enet1 reset zuozhongkai*/pinctrl_enet1_reset: enet1resetgrp {fsl,pins = </* used for enet1 reset */MX6ULL_PAD_SNVS_TAMPER7__GPIO5_IO07 0x10B0 >;};/*enet2 reset zuozhongkai*/pinctrl_enet2_reset: enet2resetgrp {fsl,pins = </* used for enet2 reset */MX6ULL_PAD_SNVS_TAMPER8__GPIO5_IO08 0x10B0 >;};};
};

2.  修改 fec1 和 fec2 节点的 pinctrl-0 属性

在 imx6ull-14x14-evk.dts 文件中,找到名为 “ fec1 ” 和 “ fec2 ” 的这两个节点,修改其中的 “ pinctrl-0 ”属性值,修改以后如下所示:
&fec1 {pinctrl-names = "default";pinctrl-0 = <&pinctrl_enet1&pinctrl_enet1_reset>; phy-mode = "rmii";
............................phy-reset-gpios = <&gpio5 7 GPIO_ACTIVE_LOW>;phy-reset-duration = <200>;status = "okay";
};&fec2 {pinctrl-names = "default";pinctrl-0 = <&pinctrl_enet2&pinctrl_enet2_reset>;  
...........................phy-reset-gpios = <&gpio5 7 GPIO_ACTIVE_LOW>;phy-reset-duration = <200>;status = "okay";
};

3~4 行,修改后的 fec1 节点“ pinctrl-0 ”属性值。
14~15 行,修改后的 fec2 节点“ pinctrl-0 ”属性值。

3. 修改 LAN8720A 的 PHY 地址

4. 修改 fec_main.c 文件

5. 修改 smsc.c 文件

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

http://www.lryc.cn/news/237421.html

相关文章:

  • 邮件|gitpushgithub报错|Lombok注解
  • 【前端知识】Node——events模块的相关方法
  • 广州华锐互动VRAR | VR课件内容编辑器解决院校实践教学难题
  • Wireshark抓包:理解TCP三次握手和四次挥手过程
  • 网络工程师-HCIA网课视频学习
  • 【每日刷题——语音信号篇】
  • Linux进程通信——IPC、管道、FIFO的引入
  • 数理统计的基本概念(一)
  • clickhouse分布式之弹性扩缩容的故事
  • 数据结构--串的基本概念
  • 音视频流媒体之 IJKPlayer FFmpeg Android 编译
  • 记录一次较为完整的Jenkins发布流程
  • Virtual安装centos后,xshell连接centos 测试及遇到的坑
  • 【算法】最优乘车——bfs(stringsteam的实际应用,getline实际应用)
  • 『亚马逊云科技产品测评』活动征文|通过lightsail一键搭建Drupal VS 手动部署
  • 使用 VuePress 和 Vercel 打造个人技术博客:实现自动化部署
  • Re50:读论文 Large Language Models Struggle to Learn Long-Tail Knowledge
  • Spring IOC - Bean的生命周期之依赖注入
  • Android Termux安装MySQL,内网穿透实现公网远程访问
  • OpenCV快速入门:像素操作和图像变换
  • Django 路由配置(二)
  • 电子学会C/C++编程等级考试2022年06月(一级)真题解析
  • 【C++】使用std::vector()函数实现矩阵的加、减、点乘、点除等运算
  • 【python】直方图正则化详解和示例
  • c语言:矩阵交换
  • 【论文阅读】基于隐蔽带宽的汽车控制网络鲁棒认证(一)
  • 暖阳脚本_ 将Agent技术的灵活性引入RPA,清华等发布自动化智能体ProAgent
  • JUnit 单元自动化
  • Vue3 源码解读系列(十一)——插槽 slot
  • [github初学者教程] 分支管理-以及问题解决