全志V3S嵌入式驱动开发(解决kernel 5.2.y 网卡驱动问题)

news2024/9/20 18:33:04

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        关于v3s网卡驱动,之前我们已经实现了。而且,它还是我们移植的第一个v3s驱动,之前的内容地址在这个地方,

https://blog.csdn.net/feixiaoxing/article/details/130937022?spm=1001.2014.3001.5501

        只不过后来在移植其他驱动代码的时候,我们发现有必要通过升级kernel,来解决新的问题。因此,整个kernel的版本也在不断升高,从最初的4.10.y,到4.14.y,一直到现在的5.2.y。当时为了验证新功能,或者说是赶进度,就没有回头去看,当然也没有确认之前已经ok的功能是不是在新版本的kernel上面也是ok的。所以这部分一直等到现在才做。没想到其他驱动移植都还好,就是这个网络驱动成了我们的一个拦路虎。好在最后花了点时间,还是解决了。今天正好周末,花点时间记录一下整个的处理过程。

1、先直接套用4.14.y的修改模式

        因为之前网卡驱动在4.14.y成功运行的,所以当时最直接的想法就是修改设备树。我们找到对应的设备树文件,即arch/arm/boot/dts/sun8i-v3s-licheepi-zero-with-lcd.dtsi文件,准备如法炮制一下,

        首先添加emac节点,

	aliases {
		ethernet0 = &emac;
	};

        接着设置emac的属性,

&emac {
	status = "okay";
};

        本以为这么做,网卡驱动就ok了。当时4.14.y版本的kernel确实是这么修改的,但是现实还是给我们上了一课,驱动失败。这一点我们也想到了,估计不会太顺利。无疑,还有其他地方需要修改。网卡测试的方法也很简单,就是看看eth0能不能加上去,

# ifconfig eth0 up
ifconfig: SIOCGIFFLAGS: No such device

2、优化emac的属性设置

        因为4.14.y的设备树过于简单,所以需要看一下5.2.y中的arch/arm/boot/dts/sun8i-v3s-licheepi-zero-dock.dts中,关于emac的部分究竟有什么变化没有,没想到还是有一点改动的,

&emac {
	phy-handle = <&int_mii_phy>;
	phy-mode = "mii";
	allwinner,leds-active-low;
	status = "okay";
};

        从内容上看,多了一些属性设置,比如phy-handle、phy-mode、leds-active等等。其他地方都是一样的。看到这个差异之后,毫不犹豫把emac的属性更新到5.2.y的sun8i-v3s-licheepi-zero-with-lcd.dtsi文件中,估计这次应该没问题了。

        编译、上传、烧入一顿操作后,还是不行,看来问题还是没有得到解决。

3、考虑从代码处着手

        既然设备树方面,sun8i-v3s-licheepi-zero-dock.dts和sun8i-v3s-licheepi-zero-with-lcd.dtsi的文件都差不多了,那么语法树这边其实问题不大了。下面如果需要继续解决问题的话,应该从代码这个角度来尝试去分析和修改了。当然,首先要保证的,就是相关的驱动代码已经编译到zImage当中去了,这是最基本的要求。带着这个思路,我们观察发现,目前来说,很多驱动都改成了ko动态加载的形式,

feixiaoxing@feixiaoxing-VirtualBox:~/Desktop/linux-zero-5.2.y$ find . -name "*.ko"
./drivers/video/backlight/lcd.ko
./drivers/input/mousedev.ko
./drivers/net/mii.ko
./drivers/net/ethernet/davicom/dm9000.ko
./drivers/net/ethernet/allwinner/sun4i-emac.ko
./drivers/net/phy/fixed_phy.ko
./drivers/net/phy/libphy.ko
./drivers/net/phy/mdio-sun4i.ko
./drivers/staging/rtl8723bs/r8723bs.ko
./drivers/of/of_mdio.ko
./drivers/usb/class/cdc-wdm.ko
./drivers/usb/serial/usbserial.ko
./drivers/usb/serial/cp210x.ko
./drivers/usb/serial/usb-serial-simple.ko
./drivers/usb/common/usb-otg-fsm.ko
./lib/crypto/libarc4.ko
./net/ipv4/tcp_westwood.ko
./net/ipv4/tcp_bic.ko
./net/ipv4/udp_diag.ko
./net/ipv4/tcp_htcp.ko
./net/wireless/cfg80211.ko
./net/mac80211/mac80211.ko

        上面显示的内容,就是用find命令搜索所有一起跟着内核编译出来的ko文件。简单看一下,就发现drivers/net下面有很多的驱动变成了ko。所以,当前要做的就是把这些驱动都编译到zImage里面去,当然这也是为了图省事。重新make ARCH=arm menuconfig配置,把drivers/net下面的m选项,都修改成y选项,

feixiaoxing@feixiaoxing-VirtualBox:~/Desktop/linux-zero-5.2.y$ find . -name "*.ko"
./drivers/video/backlight/lcd.ko
./drivers/input/mousedev.ko
./drivers/staging/rtl8723bs/r8723bs.ko
./drivers/usb/class/cdc-wdm.ko
./drivers/usb/serial/usbserial.ko
./drivers/usb/serial/cp210x.ko
./drivers/usb/serial/usb-serial-simple.ko
./drivers/usb/common/usb-otg-fsm.ko
./lib/crypto/libarc4.ko
./net/ipv4/tcp_westwood.ko
./net/ipv4/tcp_bic.ko
./net/ipv4/udp_diag.ko
./net/ipv4/tcp_htcp.ko
./net/wireless/cfg80211.ko
./net/mac80211/mac80211.ko

        一顿操作,再次编译。对比发现,果然所有的drivers/net驱动都不见了,这个时候我们也很高兴,以为问题马上也要解决了。不过测试结果又让我们失望了,网卡驱动还是没有成功。看来我们的工作还要继续。

4、继续搜索和查找

        既然设备树和代码都修改了,驱动问题还在,那说明驱动方面应该还是有地方没有配置好或者修改好。带着这个思路,我们网上搜索了一些答案,结果找到了这个链接,

https://blog.csdn.net/weixin_43850980/article/details/126267303

        上面提示我们不光要修改设备树,还要添加 STMicroelectronics devices的驱动配置,而这个配置默认是没有打开的,需要自己手动打开,

         直觉告诉我们这一步应该是正确的。因此,配置好内核之后,快速生成zImage和dtb文件,通过uboot的loady、sf erase、sf write命令烧入到spi norflash当中去。等到板子起来,迫不及待地输入ifconfig eth0 up这个熟悉的测试指令后,果然有了不一样的结果打印,

# ifconfig eth0 up
[   30.342090] dwmac-sun8i 1c30000.ethernet eth0: PHY [0.1:01] driver [Generic PHY]
[   30.351058] dwmac-sun8i 1c30000.ethernet eth0: No Safety Features support found
[   30.358460] dwmac-sun8i 1c30000.ethernet eth0: No MAC Management Counters available
[   30.366118] dwmac-sun8i 1c30000.ethernet eth0: PTP not supported by HW
[   30.372673] dwmac-sun8i 1c30000.ethernet eth0: configuring for phy/mii link mode
# 

        命令输入之后,看到一串打印,这应该是eth0驱动加载的动作。看来最后一次对menuconfig做的配置发挥了作用,driver应该生效了。当然,我们可以进一步输入ifconfig确认一下,看看eth0节点有没有加上,

# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:01:08:36:99:C3  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:40 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

        结果和我们预想的一样,除了之前就存在的lo节点,这一次有多了一个eth0节点。这说明我们的网卡驱动问题基本解决了。整个过程虽然有一些波折,不过结果还是让人满意的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/709059.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ATTCK(五)之ATTCK子项目invoke-atomicredteam的安装与使用

ATT&CK子项目invoke-atomicredteam的安装与使用 Invoke_atomicredteam介绍 Invoke-AtomicRedTeam 是一个 PowerShell 模块&#xff0c;用于执行在Red Canary 的 Atomic Red Team 项目的atomics 文件夹中定义的测试。“atomics”包含由MITRE ATT&CK™ 框架定义的每个技…

jupyter notebook优化

一&#xff0e;这个是jupyter notebook主题设置的相关教程&#xff0c;如果经常看着高亮的屏幕&#xff0c;对于眼睛会是一种损伤&#xff01; https://blog.csdn.net/qq_41566627/article/details/104984796?utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7…

[RocketMQ] Broker接收消息入口源码 (九)

文章目录 1.Broker处理请求入口1.1 registerProcessor注册消息处理器1.2 NettyServerHandler处理请求1.3 processRequestCommand分发处理请求1.3.1 rejectRequest是否拒绝请求 2.asyncProcessRequest异步处理请求2.1 asyncProcessRequest异步处理请求 3.总结 1.Broker处理请求入…

海康威视网络摄像头通过浏览器网页的配置流程

一、登录 输入网络摄像机IP地址&#xff0c;显示登录窗口&#xff0c;输入用户名和密码后&#xff0c;点击登录。如果是新设备&#xff0c;需要先激活设备&#xff0c;设置登录密码。&#xff08;Edge浏览器如何访问海康设备&#xff1f;&#xff09; 二、界面介绍 登入界面后…

logstash收集日志到elasticsearch

1.前言 logstash是一个相对较重的日志收集器&#xff0c;可以通过多种方式获取到日志数据&#xff0c;如tcp、日志文件、kafka、redis、rabbitmq等方式&#xff0c;还可以使用filter去过滤日志、转换日志为json格式&#xff0c;所以logstash是一个功能强大的日志收集器&#x…

六、神经网络完整训练流程(MNIST数据集为例)

一、下载数据集 MNIST数据集 将下载好的数据集解压放入同级项目路径下 二、导包 import torch import torch.nn as nnn import torch.optim as optim import torch.nn.functional as F import matplotlib.pyplot as plt import numpy as np from torchvision import datase…

华芯微特SWM34-IO速度优化之模拟SPI写速度提速

本文以在SWM34S&#xff08;M33内核,150Mhz&#xff0c;编译器Keil MDK 5.36&#xff09;上优化为例&#xff0c;说明优化方法和需要注意的地方&#xff0c;其他MCU可以参考。 在编写模拟SPI通信驱动LCD的例子的时候&#xff0c;会用到一个发送字节的核心函数&#xff0c;其基本…

【JavaSE】初步认识

目录 【1】Java语言概述 【1.1】Java是什么 【1.2】Java语言重要性 【1.3】Java语言发展简史 【1.4】Java语言特性 【1.5】 Java开发环境安装 【2】初识Java的main方法 【2.1】main方法示例 【2.2】运行Java程序 【3】注释 【3.1】基本规则 【3.2】注释规范 【4】…

ESP32-S2启动异常分析

客户反馈最近一批50块基于ESP32-S2的LoRaWAN gateway&#xff0c;有5块偶尔网络灯能亮&#xff0c;经常不能亮。 反复分析&#xff0c;定位&#xff0c;一个共同现象是用示波器看&#xff0c;串口输出一串信息后再没输出了。因为用了 ESP-ROM:esp32s2-rc4-20191025 Build:Oct …

企业构建知识库方案

AI模型理解误区&#xff1a;百万成本微调垂直行业达模型VS低成本建立企业专属知识库或ai助理_哔哩哔哩_bilibili

vscode关闭调试工具栏

问题描述 项目启动的时候老是蹦出这玩意 很碍眼 解决方案&#xff1a; 设置里搜索 选项改为hidden即可

前端Vue自定义注册界面模版 手机号邮箱账号输入框 验证码输入框 包含手机号邮箱账号验证

前端Vue自定义注册界面模版 手机号邮箱账号输入框 验证码输入框 包含手机号邮箱账号验证 &#xff0c; 下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13306 效果图如下&#xff1a;

CSS 备忘录2-动画、渐变、颜色、选择器等

1、背景 background属性是八个属性的简写形式&#xff1a; background-image 指定一个文件或生成的颜色渐变作为背景图片background-position 设置图片的初始位置background-size 指定背景图片的渲染尺寸background-repeat 是否平铺图片ba…

缺少msvcp140.dll丢失该如何解决?

msvcp140.dll是什么东西?相信很多人都遇到过msvcp140.dll这个文件吧?那么为什么一丢失msvcp140.dll电脑软件就会打不开?如果缺失了这个东西会怎么样?小编今天就来给大家详细的说说&#xff0c;其实这些都是一些比较常见的电脑知识&#xff0c;我们是需要去了解一下的。 msv…

Python 利用@property装饰器和property()方法将一个方法变成属性调用

目录 方法一&#xff1a;使用property装饰器 方法二&#xff1a;使用property()创建类属性 在创建实例属性时&#xff0c;如果直接把实例属性暴露出去&#xff0c;虽然写起来简单&#xff0c;但是存在一些风险&#xff0c;比如实例属性可以在外部被修改。 为了限制外部操作&a…

springboot集成openfeign,集成Histric

一、Feign简介 Feign是一个声明式的伪Http客户端&#xff0c;它使得写Http客户端变得更简单。使用Feign&#xff0c;只需要创建一个接口并注解。它具有可插拔的注解特性&#xff0c;可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon&…

Echarts入门(SpringBoot + Vue)

一、Echarts简介 代码已上传至码云:echarts_boot: echarts使用demo ECharts是一个使用 JavaScript 实现的"数据可视化"库, 它可以流畅的运行在 PC 和移动设备上 什么是数据可视化? 也就是可以将数据通过图表的形式展示出来&#xff0c; Echarts官网:Apache ECh…

9-如何获取N维数组元素?【视频版】

目录 问题视频解答 问题 视频解答 点击观看&#xff1a; 9-如何获取N维数组元素&#xff1f;

基于 Opencv python实现批量图片去黑边—裁剪—压缩软件

简介 批量处理图片文件&#xff0c;批量提取GIF图片中的每一帧&#xff0c;具有范围裁剪、自动去除黑/白边、调整大小、压缩体积等功能。 先看一些软件的界面&#xff0c;是基于Tkinter写的GUI 裁剪等功能基于Opencv 下载 我添加了处理GIF的github&#xff1a; 原作者的gith…

基于Ant DesignPro Vue + SpringBoot 前后端分离 - 后端微服化 + 接口网关 + Nacos

基于Ant DesignPro Vue SpringBoot 前后端分离 - 后端微服化 接口网关 Nacos 通过Ant DesignPro Vue SpringBoot 搭建的后台管理系统后&#xff0c;实现了前后端分离&#xff0c;并实现了登录认证&#xff0c;认证成功后返回该用户相应权限范围内可见的菜单。 后端采用Spri…