嵌入式Linux子系统之网络子系统网卡驱动分析

2023-11-09

嵌入式Linux子系统之网络子系统网卡驱动分析

这里写图片描述

【重要数据结构】

  1. struct net_device :描述网卡驱动的结构
  2. struct net_device_ops:设备操作统一接口操作集
  3. struct sk_buff :网络数据包描述结构,一般命名为skb

网卡驱动架构分析

《cs89x0.c》网卡驱动分析,早期使用的网卡芯片

1. 初始化分析

模块初始化入口:int __init init_module(void)函数

	//---------------------- 1. 分配net_device结构 -------------------//
	struct net_device *dev = alloc_etherdev(sizeof(struct net_local));


	//--------------------------- 2. 初始化部分成员 -------------------//
	dev->irq = irq;// 2.1 初始化中断号
	dev->base_addr = io;// 2.2 初始化基地址





//----------------------------- 更进一步初始化 -----------------------------------//
	ret = cs89x0_probe1(dev, io, 1);

//  进入`cs89x0_probe1` 函数,查看更进一步的初始化:
/**
 * 1. 初始化MAC
 * 2. 初始化netdev_ops  dev->netdev_ops	= &net_ops;
 * 3. 硬件初始化
 * 4. 注册网卡驱动:retval = register_netdev(dev);
 * 

2.数据发送分析

函数:net_send_packet分析

  1. netif_stop_queue(dev); //通知上层协议,暂停向网卡传送数据
  2. 对寄存器操作,将skb中的数据写入寄存器,让网卡发走
  3. 释放skb结构空间,dev_kfree_skb (skb);
  4. 发送完之后,会产生中断(在中断函数中(net_interrupt)的netif_wake_queue),以此通知上层协议可以再次向网卡传送数据了。

3.数据接收分析

中断处理函数:net_interrupt->net_rx函数

  1. 读取接收状态
  2. 读取接收到的数据长度
    这里写图片描述
  3. 分配skb结构:
    这里写图片描述
  4. 读取寄存器中的数据放到skb中
    这里写图片描述
  5. 将数据包向上丢给协议栈处理
    这里写图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式Linux子系统之网络子系统网卡驱动分析 的相关文章

  • 从 C、GCC(裸机)调用 ARM 汇编

    我正在尝试使用 GCC 在 ARM 中进行一些裸机编程并在 QEMU 上进行测试 每当我从 C 调用 ARM 标签时 我的程序就会挂起 我有一个简单的代码示例 显示了问题https gist github com 1654392 https
  • 使用 NEON 对 ARM 汇编中的四字向量中的所有元素求和

    我对组装相当陌生 尽管手臂信息中心通常很有帮助 但有时这些说明可能会让新手感到有点困惑 基本上我需要做的就是对四字寄存器中的 4 个浮点值求和 并将结果存储在单个精度寄存器中 我认为 VPADD 指令可以满足我的需要 但我不太确定 你可以尝
  • Pandaboard 交叉编译 Qt

    我花了几周的时间尝试为我的 Panda 板交叉编译 Qt 但没办法 我无法通过 configure 如果有人能给我帮助 我将不胜感激 我的主机系统是Ubuntu 13 04 86 64位 在Virtualbox中运行 我的目标系统是 Pan
  • PWM DMA 到整个 GPIO

    我有一个 STM32F4 我想对一个已与掩码进行 或 运算的 GPIO 端口进行 PWM 处理 所以 也许我们想要 PWM0b00100010一段时间为 200khz 但随后 10khz 后 我们现在想要 PWM0b00010001 然后
  • armv8 NEON if 条件

    我想了解armv8 NEON内联汇编代码中的if条件 在armv7中 这可以通过检查溢出位来实现 如下所示 VMRS r4 FPSCR BIC r4 r4 1 lt lt 27 VMSR FPSCR r4 vtst 16 d30 d30 d
  • 我们可以优化代码来降低功耗吗?

    有没有什么技术可以优化代码以确保更低的功耗 架构是ARM 语言是C 来自 ARM 技术参考网站 ARM11 MPCore 的特性 提高能源效率的处理器 效率包括 准确的分支和子程序返回预测 减少数量 错误的指令获取和 解码操作 使用物理寻址
  • ARM NEON:如何实现 256 字节查找表

    我正在使用内联汇编将我编写的一些代码移植到 NEON 我需要的一件事是将范围 0 128 的字节值转换为表中采用完整范围 0 255 的其他字节值 该表很短 但其背后的数学并不容易 因此我认为不值得每次 即时 计算它 所以我想尝试查找表 我
  • 多核ARM cpu上的中断如何工作

    这个问题已经针对 x86 得到了解答 但是 我找不到太多关于 ARM MP cpu 如 Cortex A9 Cortex A15 等 的信息 更重要的是我想知道是否可以在非主CPU上引发中断而无需任何配置等 我正在开发一款仅处理主 cpu
  • 手臂 g++ 中缺少一些东西

    我安装了 CodeSourcery g 工具链并尝试编译一个简单的 hello world 程序 include
  • 如何在 ARM 架构上从 RAM 运行代码

    我正在对 ARM Cortex R4 进行编程 并且有一些二进制文件 我想从 TCRAM 执行它们 只是为了看看性能的提升是否足够好 我知道我必须编写一个函数来将二进制文件复制到 RAM 这可以通过链接器脚本来完成 并且知道二进制文件的大小
  • 如何修改内核DTB文件

    Summary 我目前正在为定制板编译 Linux 内核 内核 模块和 DTB 以及一些定制驱动程序 有时 我会编译内核并意识到 DTB 文件中的兼容性字符串不是自定义驱动程序正在寻找的内容 现在 我可以解决此问题的唯一方法是修改 DTS
  • 将结构体偏移属性赋予汇编器

    如何将 C 结构体的偏移量发送到汇编代码 例如 在我的 C 代码中 typedef struct unsigned int a unsigned int b CMyStruct 我向 ASM 函数发送一个 CMyStruct 结构的指针 假
  • ARM架构中不同处理器模式下如何使用内核堆栈?

    据我了解 每个进程都有一个用户堆栈和内核堆栈 除此之外 ARM 架构中的每种模式都有一个堆栈 所以我想知道不同的堆栈和堆栈指针在 ARM 模式下如何工作 另外 何时会使用与进程关联的内核堆栈 何时会使用与进程关联的内核堆栈 当您进行系统调用
  • DSP 库 - RFFT - 奇怪的结果

    最近我一直在尝试在我的STM32F4 Discovery评估板上进行FFT计算 然后将其发送到PC 我已经调查了我的问题 我认为我对制造商提供的 FFT 函数做错了 我正在使用 CMSIS DSP 库 现在我一直在用代码生成样本 如果工作正
  • Linux malloc() 在 ARM 和 x86 上的行为是否不同?

    这个网站上有很多关于内存分配的问题 但是我 找不到专门解决我的问题的人 这 问题 https stackoverflow com questions 19148296 linux memory overcommit details似乎最接近
  • 可以使用Visual Studio 2012构建ARM桌面程序吗?

    我正在使用 Visual Studio 2012 beta 我的桌面 win32 程序在 ARM 架构中编译得很好 升级到 Visual Studio 2012 RC 后 编译器无法工作并出现以下错误 不支持为 ARM 平台编译桌面应用程序
  • 分析 Cortex-M7 (stm32f7) 上的 memcpy 性能

    简洁版本 从 GNU ARM 工具链中提取的 memcpy 的性能指标在 ARM Cortex M7 上对于不同的副本大小似乎差异很大 即使复制数据的代码始终保持不变 这可能是什么原因造成的 长版 我是使用 GNU Arm 工具链 11 2
  • DS-5:什么是 FVP、RTSM、基础模型、AEM 模型、快速模型、CADI?

    DS 5 模拟器使用了很多术语 如 FVP RTSM 快速模型 基础模型 AEM 模型 CADI Arm的文档中提供的解释不是很清楚 这些术语的含义是什么 作为 DS 5 的最终用户我应该关心哪些术语 Model 软件模拟的行业术语 就 A
  • gdb 不会从外部架构读取核心文件

    我正在尝试在 Linux 桌面上读取 ARM 核心文件 但似乎无法找出我的核心文件 有什么方法可以指示 gdb 我的核心文件是什么类型吗 file daemon daemon ELF 32 bit LSB executable ARM ve
  • saber sd 如何在没有 SPL 的情况下直接从 uboot 启动

    sabre sd 基于 imx 6 最大内部 RAM 约为 150Kb 然而 uboot 足够大 可以容纳在这个空间中 在这个场景中事情是如何进行的 https community freescale com docs DOC 95015

随机推荐

  • 异常检测的总结性介绍

    1 异常检测 1 1 什么是异常值 在机器学习中 异常检测和处理是一个比较小的分支 或者说 是机器学习的一个副产物 因为在一般的预测问题中 模型通常是对整体样本数据结构的一种表达方式 这种表达方式通常抓住的是整体样本一般性的性质 而那些在这
  • 练习四、把数组扁平;获取页面所用标签,并去重

    功能描述 题目一 将多层嵌套数组降低层级 比如 1 2 3 0 4 5 10 200 3 扁平到 1 2 3 0 4 5 10 200 3 题目二 获取页面所用标签 比如应含有html多种标签 并且去重 主要考点 题目一 判断是否为数组的方
  • Activity启动流程详解

    普通Activity创建也就是平常我们在代码中采用startActivity Intent intent 方法来创建Activity的方式 总体流程如下图 启动过程设计到两个进程 本地进程和系统服务进程 本地进程也就是我们的应用所在进程 系
  • 蓝桥 小明的游戏 反nim 博弈论

    题目描述 蓝桥公司给他们的员工准备了丰厚的奖金 公司主管小明并不希望发太多的奖金 他想把奖金留给智慧的人 于是他决定跟每一个员工玩一个游戏 规则如下 桌面上一共有 n 堆一元钱 双方轮流行动 由小明先行动 每次行动从某一堆钱中拿走若干元 至
  • 刷脸支付服务商的到来彻底将其颠覆

    互联网技术的发展 人工智能的不断升级 人们的生活正在变得越来越便捷 刷脸支付的优势就是体验度较好 用户较易接受 由于人脸识别根据摄像头的提高而提高 而且算法的改进会让刷脸核验在极短时间内完成 让用户觉得这技术很很便捷 而指纹 虹膜由于更多地
  • 活动回顾|多模态 AI 开发者的线下聚会@深圳站(内含福利)

    回顾来了 4 月 22 日 由 Jina AI 和 OpenMMLab 联合主办的 多模态 AI Office Hours 深圳站圆满结束 迎来了将近 60 位开发者的热情参与 现场不仅有别开生面的 开发者集市 供大家打卡赢取好礼 更有四场
  • 2023华为OD机试Python【最接近中位数的索引】

    前言 本题使用Python解答 如果需要Java版本答案 请参考以下链接 点击此处跳转 题目 假设我们有一个数组X和正整数K 满足以下表达式 X i x i 1 X i K 1 结果最接近于数组中位数的下标i 如果有多个i满足条件 请返回最
  • SuspendThread 造成程序死锁的一个例子

    msdn对SuspendThread 的说明 This function is primarily designed for use by debuggers It is not intended to be used for thread
  • 从零开始学GitHub【第三篇】

    GitHub 需要搭梯子么 印象中 GitHub 之前确实总是断断续续的访问不了 不过在13年初的时候有段时间最严重 一度被封了 当时李开复老师再也忍无可忍 公开发了一条抗议 GitHub 被封的微博 这事我印象很深 因为我是12年底加入的
  • Qt关于lineEdit的输入格式设置

    设置提示文字 ui gt lineEdit gt setPlaceholderText 联机游戏欢乐多 仅能输入整数 无限制 ui gt lineEdit gt setValidator 0 仅能输入整数 ui gt lineEdit gt
  • 移动端页面适配

    目录 一 移动端页面适配 1 什么是移动端页面适配 2 移动端页面适配的设计方向 二 0 适配 1 简介 2 缺陷 三 等比缩放 1 viewport 缩放方案 2 动态 REM 方案 3 VW 适配方案 4 适配方案对比 四 相对单位 e
  • 零基础想转行Python?新手应该注重学习哪方面的技术?

    大家都用Python做什么 做网站后台 有大量的成熟的框架 如django flask bottle tornado 写网络爬虫 Python写爬虫很简单 库很健全 科学计算 参加数学建模大赛 完全可以替代r语言和MATLAB 数据挖掘 机
  • mybatis sql xml文件读取源码分析

    在执行一个自定义sql语句时 dao对应的代理对象时如何找到sql 也就是dao的代理对象和sql之间的关联关系是如何建立的 在mybatis中的MybatisPlusAutoConfiguration类被 Configuration注解
  • 《DeblurGAN: Blind Motion Deblurring Using Conditional Adversarial Networks》论文阅读之DeblurGAN

    前言 现实生活中 大多数图片是模糊不清的 试想一下 追剧时视频不清晰 看着都很捉急 何况现实中好端端的一幅美景 美女也可以 被抓拍得不忍直视 瞬间暴躁 拍照时手抖 或者画面中的物体运动都会让画面模糊 女友辛辛苦苦摆好的各种Pose也将淹没在
  • uniapp设置动态背景图片

    ps 小程序在运行时 背景图片使用本地路径 在开发工具中可以正常显示 但是在真机调试时无法显示 解决 使用远程路径的方式
  • ros学习中遇到**[ERROR] [1552999261.807795886, 0.001000000]:**

    在ROS中学习SLAM及NAVIGATION时遇到以下问题 ERROR 1552999261 807795886 0 001000000 GazeboRosControlPlugin missing while using DefaultR
  • git开发必备命令

    使用git进行代码管理时 虽现有的开发工具对git的集成程度都比较高 但是会使用git命令行 在很多时候也能派上用场 况且技多不压身 以下是目前作为git项目开发者必备的命令 拉项目 开发一个项目 首先需要拉取该项目在本地 再切到本地开发分
  • TDP真的不是功耗?讲解“睿频”技术发展史

    在睿频2 0中有四个功耗限制等级 PL1 默频 可以长时间工作 此时的值就是TDP 注意红圈 PL2 可以以高于默认频率较长时间工作 有时间限制并不是无限的 PL3 偶尔可以超过的值 不过超过了会马上强制缩回 也就是功率处于跳动状态 PL4
  • 二十个经典的问题(一)

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 问题一 在多线程环境中使用HashMap会有什么问题 在什么情况下使用get 方法会产生无限循环 HashMap本身没有什么问题 有没有问题取决于你是如何使用它的 比如 你
  • 嵌入式Linux子系统之网络子系统网卡驱动分析

    嵌入式Linux子系统之网络子系统网卡驱动分析 重要数据结构 struct net device 描述网卡驱动的结构 struct net device ops 设备操作统一接口操作集 struct sk buff 网络数据包描述结构 一般