品牌网站建设四川/推广策略都有哪些
linux中各种最新网卡2.5G网卡驱动,不同型号的网卡需要不同的驱动,整合各种网卡驱动,包括有线网卡、无线网卡、自动安装Wi-Fi热点。
最近在做路由器二次开发,现在市面上卖的新设备,大多数都采用了2.5G网卡,现在各种Linux社区对新网卡的驱动都还不成熟,尤其是一些小众一点的网卡,有些低版本的Linux官方都没有对应版本的驱动,这里有个覆盖几乎市面上最新网卡驱动的方法,主要是整合各种网卡型号,安装时候自动进行安装。
例如,以我下面的这个设备为例,查看网卡型号如下:
lspci |grep -i net
02:00.0 Network controller: MEDIATEK Corp. Device 7961
03:00.0 Ethernet controller: Intel Corporation Device 125c (rev 04)
04:00.0 Ethernet controller: Intel Corporation Device 125c (rev 04)
05:00.0 Ethernet controller: Intel Corporation Device 125c (rev 04)
06:00.0 Ethernet controller: Intel Corporation Device 125c (rev 04)
iwconfig
iwconfig: error while loading shared libraries: libiw.so.29: cannot open shared object file: No such file or directory
Linux网络设备驱动程序遵循通用的接口,设计时采用的是面向对象的方法,一个设备就是一个对象(net_device结构)。一个网络设备最基本的方法有初始化、发送和接收等。
Linux网络设备驱动程序的体系结构可以分为四层:网络协议接口层、网络设备接口层、设备驱动功能层和网络设备与媒介层,如图1所示。网络设备驱动程序最主要的工作是完成设备驱动功能层。在Linux中,所有网络设备都抽象为一个接口,这个接口提供了对所有网络设备的操作集合。由数据结构struct net_device来表示网络设备在内核中的运行情况,即网络设备接口。它既包括纯软件网络设备接口,如环路(loopback),也包括硬件网络设备接口,如以太网卡。由以dev_base为头指针的设备链来集体管理所有网络设备,该设备链中的每个元素代表一个网络设备接口。数据结构net_device中有很多供系统访问和协议层调用的设备方法,包括初始化,打开和关闭网络设备的open和stop函数,处理数据包发送的hard_start_xmit函数,以及中断处理函数等。
驱动程序(Device Driver)全称为“设备驱动程序”,是一种可以使计算机中央处理器——CPU控制和使用设备的特殊程序,相当于硬件的接口,操作系统通过这个接口,控制硬件设备的工作。所有的硬件都要安装驱动程序,没有驱动程序的硬件是运行不了的,就像一辆有轮胎但是没有传动轴的汽车一样跑不起来,控制不了。假如某设备的驱动程序未能正确安装,便不能正常工作。
1、内核启动流程
起电:开启主机硬件电源。
固件:主板固件加载 BIOS 或 UEFI,进行硬件自检和初始化,检查系统配置是否正确。
BIOS/UEFI:BIOS 或 UEFI 开始寻找可启动介质,读取磁盘的 MBR 或 GBT 引导分区,启动 Bootloader。
Bootloader:Bootloader 执行 GRUB2 引导程序,GRUB2 通过 /boot/grub2/grub.cfg 配置文件的内容,从 /boot 目录中读取 /boot/vmlinuz-3.10.0-1160.83.1.el7.x86_64 内核文件,并加载到内存中。管理员可以通过 /boot/grub2/grub.cfg 配置文件,设置系统启动选项。
Initramfs:Kernel 启动过程中,首先加载 /boot/initramfs-3.10.0-1160.83.1.el7.x86_64.img 镜像文件,这是 initramfs(initial RAM filesystem),作为临时文件系统用于进行基本的系统初始化工作。包括加载 /usr/lib/modules/3.10.0-1160.83.1.el7.x86_64/kernel/fs/xfs 驱动程序。有了 xfs 驱动程序之后,Kernel 才可以挂载 xfs 格式的 / 根分区并访问文件。
Init 系统:Kernel 挂载根分区后,开始运行 init 或 systemd 进程,这是第一个 User Process。init 进程会读取 /etc/inittab 配置文件,根据不同的运行级别,开始启动相应的各种程序和服务。包括:各种设备驱动程序、进程管理、内存管理等系统服务。
Init 系统的入口在 linux/init/main.c start_kernel(),相当于 Kernel 的 main 函数,是 Kernel 真正的初始化流程入口,start_kerenl() 将会调用一系列的初始化函数,包括:CPU 初始化,Main Memory 初始化,Interrupt 初始化,Process Scheduling 初始化,TCP/IP Stack 初始化等,目的是最终建立起基本完整的 Linux Kernel ENV。
2、内核协议栈初始化流程
start_kernel() 过程中调用 linux/net/socket.c sock_init() 进入协议栈初始化流程。
sock_init() Socket 初始化:使用 Slab 内存分配算法创建 sk_buff 的 Cache 空间,并注册 Socket filesystem。
proto_init() 协议栈初始化:在 /proc/net/ 目录下创建各类协议文件,注册相关的协议文件操作函数。
dev_init() 网络设备初始化:
在 /proc/sys/net/ 目录下创建 Ethernet Device 和 TCP/IP Protocols 相关的数据结构文件;
开启 Device 的 Hardware Rx/Tx Interrupt;
为每个 CPU 初始化一个 Rx Queues 并绑定硬中断号,同时注册接收报文的软中断回调函数;
注册 loopback 本地回环操作函数;
inet_proto_init INET Socket 初始化:注册 INET Socket 接口函数,例如:TCP、UDP、ICMP、IGMP 等协议类型的基本收包处理函数。
unix_proto_init UNIX Socket 初始化:注册 UNIX Socket 接口函数。
3、网卡驱动程序注册流程
Driver 会调用 module_init() 向 Kernel 注册 init() 函数,然后在 dev_init() 过程中初始化 Device 和 Driver 时,Kernel 就会调用它。以 Intel I350 网卡的 IGB Driver(Intel Gigabit Ethernet)为例,它的初始化函数为 linux/drivers/net/ethernet/intel/igb/igb_main.c igb_init_module()。
IGB Driver 初始化流程的核心是 pci_register_driver(),它维护了一个 pci_device_id 映射表,通过读取 Device PCI configuration space(如下图)中的 Vendor ID 和 Device ID 来并识别出 Device 具体的型号以及对应的驱动程序。
4、网卡驱动程序初始化流程
IGB Driver 的初始化流程从 linux/drivers/net/ethernet/intel/igb/igb_main.c igb_probe() 函数开始。
dma_set_mask() 申请 DMA 内存空间和 I/O 端口。
pci_request_selected_regions() 获取 PCIe 设备的 Resource,包括:Memory BAR、I/O BAR 和 MSI-X BAR 这 3 个 Regions,并通过这些 BARs 完成一系列访问和初始化,例如更新 Linux 文件系统 /sys/bus/pci/devices/{BDF}/。
alloc_etherdev_mq() => alloc_netdev_mq():
实例化 Kernel 的 net_device(网络设备管理,包含了 Device 的详细信息)结构体和 IGB 私有的 igb_adapter(包含了 IGB Driver 的特性信息)结构体。
实例化 Kernel 的 netdev_queue(网络设备队列管理)结构体,并关联到 net_device。
初始化 net_device 实例。
设置 net_device->netdev_ops 设备操作函数集(包含了 Device 的各种操作回调函数,例如:igb_open 设备启动函数、收/发包函数等)和 net_device->ethtool_ops ethtool 操作函数集。
igb_sw_init() => igb_init_interrupt_scheme():
igb_set_interrupt_capability():设置网卡的发送队列数量、接收队列数量、中断描述符数量,调用 pci_enable_msix() 获得网络的 MSIX 中断号。并将其保存到 pci_dev->msi_list 的每一项 msi_desc.irq 中。
igb_alloc_q_vectors():根据之前设置的中断描述符个数,初始化中断描述符 igb_q_vector,并加入到 igb_adapter->q_vector[] 列表中。同时初始化 igb_q_vector 中的 napi 结构体(注册 NAPI 收包机制所必须的 poll() 函数),然后将 napi 实例挂载到 net_device->napi_list 链表中。
igb_alloc_queues():根据之前设置的发送队列个数,实例化 igb_ring 结构体,然后添加到 igb_adapter->tx_ring[] 列表中。同样的,为接收队列实例化 igb_ring 结构体,并添加到 igb_adapter->rx_ring[] 列表。
igb_map_ring_to_vector():将 Rx Ring、Tx Ring 实例和 igb_q_vector 关联起来,即:igb_q_vector->tx_ring 和 igb_q_vector->rx_ring。
igb_init_hw_timer() 设置网卡硬件定时器。
igb_probe_vfs() 设置 SR-IOV 特性,如果没有开启则将 igb_adapter->vfs_allocated_count 设置为 0。
igb_irq_disable() 关闭网卡设备的中断。
设置网卡特性标志 net_device->features 和 net_device->vlan_features。
获取 Ethernet Ports 的 MAC 地址并保存到 net_device->dev_addr 中。
register_netdev() 将新建的 net_device 实例注册到 Kernel 中。
如此的,Kernel 就掌握了 PCIe Device 的详细信息以及各类操作函数入口,并以此完成对 Device 控制。
5、创建网络接口
在 igb_probe() 的后期调用了 linux/include/linux/netdevice.h register_netdev() 将 net_device 实例注册到 Kernel 中,并会创建对应的 Network Interface。然后我们在 Shell 中就可以看见对应的网卡设备了。
register_netdev() 读取 net_device 实例提供的信息,并根据 IGB Driver 设定的 Network interface name prefix(前缀),为其生成一个唯一的 Interface name。例如:ethX(Ethernet)。
ifconfig 指令
当我们执行指令 ifconfig eth0 时,就可以查看到 net_device 实例提供的 Name、MAC、Mask、MTU 等信息。这些信息。这实际上是 ifconfig 指令通过调用 Socket I/O SCI 来实现的。
RX errors:NIC 总的收包错误数量,包括 too-long-frames 错误,Rx Ring 溢出错误,CRC 校验错误,Frame 同步错误,FIFO Overruns 错误、Missed pkg 错误等。
RX dropped:NIC 总的丢包数量,通常是由于 skb_buffer 内存空间不足导致的,表示 CPU 处理能力低于 NIC 带宽。
RX overruns:NIC 总的 FIFO Overruns 错误数量,通常是由于 CPU 无法及时处理 NIC 发出的硬件中断导致的,表示硬件中断可能没有均衡的分布在多个 CPU Cores 上。
RX frame:表示 Misaligned 的 Frames。
ethtool 指令
也可以使用 ethtool 命令行工具用于查看并 net_device 结构体的配置信息。ethtool 指令则是通过调用 ioctl I/O SCI 与 Net device 注册的 ethtool 函数进行交互来实现的。
查看 NIC 的基础信息,包括 Supported ports(TP 电口、Fiber 光口)、Supported link modes、Speed(速率)、Duplex(双工)、Link detected 等。
下载脚本:点击下载
上传到目标Linux系统,并解压,其中一个目录如图所示的目录,还有一个目录是众多网卡驱动。
简单两步执行:
第一步:
sh update.sh
之后设备会重启。
第二步:
sh config.sh
之后设备会重启。
到这里就完成了,有线网卡和无线网卡的驱动都自动安装好了,系统也优化配置了,如果设备有 Wi-Fi 天线,会自动配置无线网卡驱动,并自动创建Wi-Fi出来。
手机搜索发现:
Wi-Fi 账号:mitu
Wi-Fi密码:12345678
这个信息可以在第二步之前进行配置,也就是hostapd.conf文件中进行配置。
需要注意的是,再执行上面两个步骤之前,需要确保设备有网。这里建议通过手机的USB网络共享,所有手机都支持这个功能,步骤如下:
1) 目标设备开机,首先手机通过USB数据线连接设备(有些手机必须先连接数据线,才有下面的这些选项和菜单;
2) 打开手机的“设置” 功能,如下图所示;
3) 选择“移动网络”,如下图所示;
4)选择”移动网络共享“,如下图所示;
5)打开“USB共享网络”,完成。
提供的软件包里面包含了众多网卡型号,弄懂了脚本的内容,上面方法实测可以驱动几乎所有的网卡型号,有不懂的可以把错误提出来进行留言。
相关文章:

linux中各种最新网卡2.5G网卡驱动,不同型号的网卡需要不同的驱动,整合各种网卡驱动,包括有线网卡、无线网卡、Wi-Fi热点
linux中各种最新网卡2.5G网卡驱动,不同型号的网卡需要不同的驱动,整合各种网卡驱动,包括有线网卡、无线网卡、自动安装Wi-Fi热点。 最近在做路由器二次开发,现在市面上卖的新设备,大多数都采用了2.5G网卡,…...

asp.net上传文件
第一种方法 前端: <div> 单文件上传 <form enctype"multipart/form-data" method"post" action"upload.aspx"> <input type"file" name"files" /> …...

JavaEE平台技术——预备知识(Web、Sevlet、Tomcat)
JavaEE平台技术——预备知识(Web、Sevlet、Tomcat) 1. Web基础知识2. Servlet3. Tomcat并发原理 1. Web基础知识 🆒🆒上个CSDN我们讲的是JavaEE的这个渊源,实际上讲了两个小时的历史课,给大家梳理了一下&a…...
基础课23——设计客服机器人
根据调查数据显示,使用纯机器人完全替代客服的情况并不常见,人机结合模式的使用更为普遍。在这两种模式中,不满意用户的占比都非常低,不到1%。然而,在满意用户方面,人机结合模式的用户满意度明显高于其他模…...

mybatis在springboot当中的使用
1.当使用Mybatis实现数据访问时,主要: - 编写数据访问的抽象方法 - 配置抽象方法对应的SQL语句 关于抽象方法: - 必须定义在某个接口中,这样的接口通常使用Mapper作为名称的后缀,例如AdminMapper - Mybatis框架底…...

如何处理前端本地存储和缓存
前端本地存储和缓存的处理是一种重要的技术,它可以帮助改善应用程序的性能和用户体验。下面是一些处理前端本地存储和缓存的常用方法: 1. 使用Web Storage API: 这是一种在浏览器中存储数据的方法,包括两种类型:loca…...

导轨式安装压力应变桥信号处理差分信号输入转换变送器0-10mV/0-20mV/0-±10mV/0-±20mV转0-5V/0-10V/4-20mA
主要特性 DIN11 IPO 压力应变桥信号处理系列隔离放大器是一种将差分输入信号隔离放大、转换成按比例输出的直流信号导轨安装变送模块。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等行业。此系列模块内部嵌入了一个高效微功率的电源,向输入端和输…...

人体姿态估计和手部姿态估计任务中神经网络的选择
一、人体姿态估计任务适合使用卷积神经网络(CNN)来解决。 人体姿态估计任务的目标是从给定的图像或视频中推断出人体的关节位置和姿势。这是一个具有挑战性的计算机视觉任务,而CNN在处理图像数据方面表现出色。 使用CNN进行人体姿态估计的一种…...

odoo16 one2many字段的 domain
最近在odoo project模块的基础上做二开,给task表加了一个版本字段version_id,然后重写了 project表的Task_ids, 并且增加了一个domain,结果折腾了大半天才搞定 写法1 这也是最初的写法: version_id fields.Many2one("hx.p…...

一份优秀测试用例的设计策略
日常工作中最为基础核心的内容就是设计测试用例,什么样的测试用例是好的测试用例?我们一般会认为数量越少、发现缺陷越多的用例就是好的用例。那么我们如何才能设计出好的测试用例呢?一份好的用例是设计出来的,是测试人员思路和方法的集合&a…...

自动驾驶行业观察之2023上海车展-----智驾供应链(3)
智驾解决方案商发展 华为:五项重磅技术更新,重点发布华为ADS 2.0和鸿蒙OS 3.0 1)产品方案:五大解决方案都有了全面的升级,分别推出了ADS 2.0、鸿蒙OS 3.0、iDVP智能汽车数字平台、智能车云服务和华为车载光最新 产品…...

倒计时丨3天后,我们直播间见!
倒计时3天,RestCloud 零代码集成自动化平台重磅发布 ⏰11 月 9 日 14:00,期待您的参与! 点击报名:http://c.nxw.so/dfaJ9...

c语言经典算法—二分查找,冒泡,选择,插入,归并,快排,堆排
一、二分查找 1、前提条件:数据有序,随机访问; 2、实现:递归实现,非递归实现 3、注意事项: 循环退出条件:low <high,low high.说明还有一个元素,该元素还要与key进行比较 mid的取值…...

网站SSL证书有什么用
在当今,网站安全对于企业和个人来说至关重要。其中,SSL证书在保护网站和用户数据方面发挥着关键作用。 1,数据加密保护:SSL证书通过使用加密技术,将网站与访问者之间的通信进行加密。这意味着通过SSL保护的网站上的数据…...

ubuntu 20.04 server安装
ubuntu 20.04 server安装 ubuntu-20.04.6-live-server-amd64.iso 安装 安装ubuntu20.04 TLS系统后,开机卡在“A start job is running for wait for network to be Configured”等待连接两分多钟。 cd /etc/systemd/system/network-online.target.wants/在[Servi…...

造数工具调研
开源项目 语言 地址 描述 备注 Faker Python https://github.com/joke2k/faker 一个Python库,可以生成各种各样的假数据,包括SQL语句。它支持多种数据库,包括MySQL、PostgreSQL、Oracle等。Faker可以生成各种类型的数据,如…...

Linux文件系统目录结构
典型的Linux文件系统目录结构的列表 典型的Linux文件系统目录结构的列表。每个目录都有其特定的用途: /bin: 存放系统引导和修复所需的二进制可执行文件,如ls,cp,mv等命令。 /boot: 存放操作系统引导文件,例如内核和…...

CANoe新建XML自动化Test Modules
文章目录 1.打开Test Modules2.新建Environment3.新建XML Test Modules4.新建.can文件5.打开XML Test Modules6.新建xml脚本并保存7.编译8.在.can文件写个测试用例9.修改报告格式为HTML10.运行查看报告后面介绍的文章会重复用到这部分,这里单独介绍下,后面不做重复介绍。 1.…...

国内某发动机制造工厂RFID智能制造应用解决方案
一、工厂布局和装备 国内某发动机制造工厂的装配车间布局合理,设备先进,在这个5万平方米的生产区域内,各个工位之间流程紧密,工厂采用了柔性设备,占比达到了67%,数控化率超过90%,自动化率达到了…...

【SpringCloud Alibaba -- Nacos】Linux 搭建 Nacos 集群
搭建 Nacos 集群 架构 centos安装docker https://docs.docker.com/engine/install/centos/ 详细配置过程 MySql8 mysql数据库配置 数据库脚本 nacos/conf/nacos-mysql.sql Nacos2 application.properties 修改为mysql spring.datasource.platformmysqldb.num1 db.url…...

程序员使用 ChatGPT的 10 种最佳方式
自2022年11月30日发布以来,ChatGPT持续爆火,它在各个方面都产生了巨大的影响力,在软件开发行业,ChatGPT 有潜力彻底改变我们思考和处理软件开发的方式。 ChatGPT 正在改变软件开发流程,它理解自然语言和生成类人文本的…...

各种各类好用热门API推荐
各种各类的好用API推荐,含免费次数~ 天气预报查询:查询全国以及全球多个城市的天气,包含15天天气预报查询。天气预警:可以获取指定城市当前生效中的各类天气预警,如寒潮蓝色预警信号,或一次性拉取全国所有…...

高速串行总线——SATA
SATA简介 SATA的全称是Serial Advanced Technology Attachment(串行高级技术附件,一种基于行业标准的串行硬件驱动器接口),它是一种电脑总线,主要功能是用作主板和大量存储设备(如硬盘及光盘驱动器)之间的数据传输 SA…...

不用流氓软件,如何在户外使用手机听下载到家中电脑里的音乐文件呢?
文章目录 本教程解决的问题是:按照本教程方法操作后,达到的效果是本教程使用环境:1 群晖系统安装audiostation套件2 下载移动端app3 内网穿透,映射至公网 很多老铁想在上班路上听点喜欢的歌或者相声解解闷儿,于是打开手…...

函数数组指针示例
函数数组指针是一个指向函数指针数组的指针。它用于存储一组函数指针,使您可以通过函数指针数组的索引来调用不同的函数。函数数组指针通常用于实现函数表或分发不同的操作或处理不同的事件。 以下是一个简单的示例,说明如何声明和使用函数数组指针&…...

万宾科技管网水位监测预警,管网水位的特点有哪些?
以往如果要了解城市地下排水管网的水位变化,需要依靠人工巡检或者排查的方式,这不仅加大了人员的工作量,而且也为市政府带来了更多的工作难题。比如人员监管监测不到位或无法远程监控等情况,都会降低市政府对排水管网的管理能力&a…...

vue element admin master 去掉登陆
vue element admin master 去掉登陆 修改/src/permission.js import router from ./router import store from ./store import { Message } from element-ui import NProgress from nprogress // progress bar import nprogress/nprogress.css // progress bar style import {…...

没有MES管理系统,先用数据采集设备能有用吗
在当前的数字化时代,企业纷纷意识到了数字化转型的重要性。数据被誉为新型生产要素,对于企业的运营和决策具有至关重要的作用。在数字化转型的过程中,许多企业面临着一个共同的问题:如何获取所需的数据? 有两家企业在…...

【JAVA学习笔记】61 - 线程入门、常用方法、同步机制,以及本章作业(难点)
项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter17/src/com/yinhai 线程 一、线程相关概念 1.程序 是为完成特定任务、用某种语言编写的一组指令的集合。简单的说:就是我们写的代码 2.进程 1)进程是指运行中的程序&#x…...

C#开发的OpenRA游戏之步兵射击(2)
C#开发的OpenRA游戏之步兵射击(2) 前面已经分析士兵射击的整个过程,理解它是怎么样根据武器来创建弹盒,然后加载子弹。现在来分析子弹是怎么伤害到对方的过程。 继续前面的分析,它创建了子弹类Bullet,在这个类里实现爆炸效果和伤害转化。类Bullet也是由它的信息类Bulle…...