首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Linux BSP实战课(网络篇):数据包的发送过程

本文将介绍在Linux系统中,以一个UDP包的接收过程作为示例,介绍数据包是如何一步一步从应用程序到网卡并最终发送出去的。 socket层 socket(...)...然后调用dev_queue_xmit发送数据包 neigh_resolve_output:该函数里面会发送arp请求,得到下一跳的mac地址,然后将mac地址填到skb中并调用dev_queue_xmit netdevice...,这里不做详细介绍,其大概流程如下: 将skb放入网卡自己的发送队列 通知网卡发送数据包 网卡发送完成后发送中断给CPU 收到中断后进行skb的清理工作 在网卡驱动发送数据包过程中,会有一些地方需要和netdevice...从sendto函数的帮助文件里面看到这样一句话:(Normally, this does not occur in Linux....txqueuelen: 很多地方都说这个是控制qdisc里queue的长度的,但貌似只是部分类型的qdisc用了该配置,如linux默认的pfifo_fast。

41220

linux内核调试工具-addr2line和gdb定位问题

(Nzcv daif -PAN -UAO) [ 2.578370] pc : ethtool_check_ops+0x18/0x38 [ 2.582596] lr : register_netdevice...我用的编译链是aarch64-linux-gnu-,所以addr2line前面也要加这个前缀,这里一开始有个问题,我使用addr2line的时候没有输出代码行号,只输出两个"??"...,后来查了资料才知道内核配置项CONFIG_DEBUG_INFO没有勾选,勾选之后重新编译,发现vmlinux这个文件变得很大了,有260M左右了,重新输入以下命令输出以下信息 linux# aarch64...-linux-gnu-addr2line -e vmlinux FFFF800011AD4328 net/ethtool/common.c:346 定位问题代码在net/ethtool/common.c...2.通过gdb定位 使用 aarch64-linux-gnu-gdb vmlinux 命令进入gdb调试行,输入以下命令 (gdb) b*(0xFFFF800011AD4328) Breakpoint

1.3K10

Linux Device Drivers》 第十七章 网络驱动程序——note

基本介绍 第三类是标准的网络接口Linux设备,本章介绍的内核,其余的交互网络接口描述 网络接口,必须使用特定的内核数据结构本身注册,与外部分组交换数据线打电话时准备 经常使用的文件上的网络接口操作是没有意义的.../netdevice.h> struct net_device struct net_device *alloc_netdev(int sizeof_priv, const char *name, void...alloc_fddidev() 令牌环设备使用alloc_trdev() register_netdev函数 初始化每一个设备...该结构定义在中 传递经全hard_start_xmit的套接字缓冲区包括了物理数据包,并拥有完整的传输层数据包头 该传输函数仅仅运行了对数据包的一致性检查。.../netdevice.h> struct dev_mc_list struct dev_mc_list *next __u8 dmi_addr[MAX_ADDR_LEN]; unsigned char

69240
领券