- 博客(93)
- 资源 (5)
- 收藏
- 关注
原创 Linux wifi driver 注册和设备探测流程
ath9k_htc_init(void) //驱动初始化→ ath9k_hif_usb_init(void) //驱动注册→ ath9k_hif_usb_probe() //设备探测→ ath9k_hif_request_firmware() //请求加载固件→ ath9k_hif_usb_firmware_cb() //固件加载完成后的回调。
2025-03-24 21:41:30
959
原创 linux wifi driver深度实践之内核编译加载
ath9k_htc驱动可能依赖于ath9k_common和ath9k_hw提供的公共代码或硬件抽象层。如果这些依赖模块没有正确加载或版本不兼容,就会导致主驱动无法正常工作,甚至出现参数无效的错误。Ubuntu 提供了内核源码包,可以通过以下命令安装,源码包会下载到 /usr/src/ 目录,解压后即可查看驱动源码。因为拉取代码和修改编译时一个庞大的工程,所以我并没有拉取对应linux内核版本的驱动源码。一定程度说明驱动加载后的功能没问题,但是还是要做功能性验证。编译问题解决后,替换库里的驱动。
2025-03-10 18:12:29
765
原创 Linux wifi driver 之深度实践 ap热点创建
Linux 系统中还是使用 TP-Link TL-WN722N v1 创建热点(AP 模式),需要借助工具如 hostapd(创建热点)和 dnsmasq(提供 DHCP 服务)插入网卡,linux NetworkManager自动加载,先使用iw list查看是否支持ap模式或者使用iw list | grep “Supported interface modes” -A 8安装依赖工具遇到的问题:更新失败域名无法解析,定位是dns的问题保存并重启网络配置sudo systemctl
2025-02-25 14:58:43
907
原创 ath9k(Atheros芯片)开源驱动之wifi连接
先让一个开源驱动在你的硬件上跑起来,再逐步修改,这就是学习的基本思路。我希望能用这款驱动,开启我们自己的篇章
2025-02-22 23:11:12
632
原创 Kernel之Tcpdump和Netfilter
Netfilter 是 Linux 内核中的一个框架,用于对网络数据包进行过滤、修改和重定向。它提供了多个钩子点(hook points),允许用户在不同的网络层插入自定义逻辑。它可以用于捕获不同 ISO模型中的多个层次的数据包,具体取决于过滤条件和抓包配置。验证成功(无法连接)
2025-02-13 16:27:00
1018
1
原创 Linux内核发送网络数据
我们开始今天对 Linux 内核⽹络发送过程的深度剖析。还是按照我们之前的传统,先从⼀段代码作为切⼊。上述代码中,调⽤ send 之后内核是怎么样把数据包发送出去的。本⽂基于Linux 3.10,⽹卡驱动采⽤Intel的igb举例。
2024-05-14 21:12:24
1206
原创 内核是如何接收⽹络包的
⽹络模块是 Linux 内核中最复杂的模块了,看起来⼀个简简单单的收包过程就涉及到许多内核组件之间的交互,如⽹卡驱动、协议栈,内核ksoftirqd 线程等。
2024-04-15 15:17:20
1519
2
原创 linux GDB and GDB Sever
GDB(GNU Debugger)是一个用于调试程序的强大工具。它是GNU项目的一部分,支持多种编程语言,包括C、C++等。GDB 提供了一组命令和功能,允许跟踪检查程序的内部状态,跟踪代码的执行过程,以及定位和修复程序中的错误。:set follow-fork-mode parent 是 GDB 的一个命令,用于在多进程调试时控制在 fork() 调用之后 GDB 应该跟踪哪个进程。问题出在:函数accessInvalidMemory,代码的第五行。前面是单子进程的调试。
2024-01-13 16:04:54
1283
原创 linux线程与进程
在Linux系统中,进程(Process)和线程(Thread)是操作系统中两个重要的概念,它们都是用于执行程序的执行单元,但有一些关键的区别。
2024-01-01 13:36:00
1117
原创 进程间通信
进程间通信(Inter-Process Communication,IPC)是指在操作系统中,两个或多个独立的进程之间进行数据交换和信息共享的机制。
2023-12-22 16:27:47
218
原创 基于ubuntu tun虚拟网卡设备完成ping的发送与模拟接收
前面我们初步认识了什么是tun设备及基础的工作原理与接收文件的设备文件(节点)、虚拟网卡的启动、添加路由表等操作,为什么进一步理解tun设备与协议栈的通信理解,这次我们将应用层控制tun设备发送ping,通过read读取到,后经过手动组装icmp网络包write到协议栈,模拟远程主机回复给我们的 icmp reply,顺便熟悉下icmp 网络包的协议。
2023-09-06 17:15:25
1224
原创 Linux tun虚拟网卡通信初识
Linux TUN 设备是一种虚拟网络设备,用于在用户空间和内核空间之间建立数据通道,使用户空间程序可以通过这个设备与内核网络栈进行交互。TUN 设备是一种通用的网络隧道设备,常用于实现虚拟专用网络(VPN)和其他网络隧道技术。
2023-08-08 20:13:52
3093
原创 成为wifi驱动工程师应该从什么开始学习
写了这么多文章,都很零散,这次收集整理了下我们应该学习的大概框架和思路,希望大家喜欢,如果有其他的想要学习的或者思考的想法可以在评论区发言哦,我会尽量出一些实践的小原理的文章分享出来,谢谢!作为初学者想成为驱动工程师,首先需要打下坚实的计算机基础,然后逐步学习与驱动开发相关的知识和技能。以下是初学者成为驱动工程师的建议学习路径:参考书籍和在线资源:阅读与驱动开发相关的书籍和在线资源,这将帮助你加深对驱动开发的理解。成为WiFi驱动工程师是一个专业性较高的领域,需要对计算机网络、操作系统、无线通信以及硬件驱动
2023-07-22 12:19:37
948
1
原创 IP地址转换函数
在Unix网络编程中,我们常用到地址转换函数,它将ASCII字符串(如"206.62.226.33")与网络字节序的二进制值(这个值保存在套接口地址结构中)间进行地址的转换。当然也包含主机字节序与网络字节序的转换结构体熟悉// ip地址的网络字节序 };上述结构体为 struct sockaddr_in 中的参数 3 struct sockaddr_in {// 地址簇 in_port_t sin_port;// 端口的网络字节序 struct in_addr sin_addr;概念熟悉。
2023-07-21 12:57:29
348
原创 Ioctl()方式实现与驱动交互简洁框架
ioctl是linux中一种除read和write之外的数据传递机制以上函数参数的含义如下。inode和fp用来确定被操作的设备。request就是用户程序下发的命令。args就是用户程序在必要时传递的参数。在2.6.36以后ioctl函数已经不存在了,用unlocked_ioctl和compat_ioctl两个函数代替。参数去除了原来ioctl中的structinode参数,返回值也发生了改变。新的代码。
2023-06-14 10:58:06
1791
原创 实现ifconfig配置功能基础框架
因为要实现类似ifconfig工具的作用,所以我们先要了解下argc和argv,接触linux系统,我们往往就需要用命令行的方式来编译和执行程序。那么在命令行方式下,此时这两个参数就很有作用了,能够非常方便地帮助我们实现一些功能。
2023-05-31 23:34:20
702
原创 linux ioctl 理解
在计算机中,ioctl(input/output control)是一个专用于设备输入输出操作的系统调用,该调用传入一个跟设备有关的请求码,系统调用的功能完全取决于请求码。ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制ioctl函数其中fd就是用户程序打开设备时使用open函数返回的文件描述符,cmd就是用户程序对设备的控制命令,至于后面的省略号,那是一些补充参数,一般最多一个,有或没有是和cmd的意义相关的。
2023-05-22 21:07:59
985
1
原创 Linux socket
套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。应用程序也可以用IP+端口号进行唯一标识。那么这个程序的入口就被称作Socket。建立连接发送数据接收数据。我们可以把Socket编程理解为对TCP协议的具体实现。
2023-05-10 16:07:04
1552
原创 Linux字符设备驱动
代码结构简单,旨在用最简单的原理理解最主要的框架逻辑,细节需要自行延伸。-----------------学习的基础底层逻辑。
2023-05-01 23:20:17
945
原创 字符、块、网络设备
网络设备是特殊设备的驱动,它负责接收和发送帧数据,可能是物理帧,也可能是ip数据包,这些特性都有网络驱动决定。一个字节一个字节读写的设备,读取数据需要按照先后顺序读取,常见的字符设备有鼠标、键盘、串口、控制台和LED设备,每个字符设备在/dev目录下对应一个设备文件,linux用户程序通过设备文件(或称设备节点)来使用驱动程序操作字符设备。这些设备文件和普通文件之间的唯一差别在于对普通文件的访问可以前后移动访问位置,而大多数字符设备是一个只能顺序访问的数据通道。,设备驱动的代码量占了大部分内核程序。
2023-04-30 22:23:00
1490
原创 钩子函数理解
某些情况下,对于需求不明朗,可能还不知道它会完成什么功能,这时候留下函数指针作为接口,可以挂上不同的函数完成不同的功能,究竟执行什么功能由钩子函数的编写者完成。在的代码中,常常把挂钩子的过程叫做注册,会提供一个注册函数,让使用者把自己编写的钩子函数挂在已经声明的函数指针上,这个注册函数的参数就是我们的函数指针了。max,min函数就是钩子函数了,把函数指针g_pFun指向函数Max,Min的过程,就是“挂钩子”的过程,把钩子函数“挂”到函数指针上,很形象。是通过函数指针来实现的。
2023-04-25 00:25:46
787
原创 基于LINUX实现ping发送与接收
由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全0或全1(具体看实现了,本质一样)如果结果不是全0或全1,那么表示数据错误。注意一下上面说到的ICMP报文格式中的“类型”字段,我们在组包的时候可以向该字段填写不同的值来标定该ICMP报文的类型。Linux ping 命令用于检测主机:执行 ping 会使用 ICMP 传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
2023-04-19 00:06:59
1195
原创 基于linux 实现DNS Client请求
属于应用层的编程,对于我i们后续的协议理解是很有帮助的。上面提供的所有代码可以直接编译运行,执行的时候请检查电脑是否有网络,否则无法正常执行。
2023-03-05 14:41:58
679
原创 无线网络概论_4
对于由客户端送至服务器的帧而言,发送端就是客户端这边的接入点,而接收端就是服务器这边的接入点将来源地与传送端分开的好处是,当服务器这边的接入点送出必要的802.11响应给对方的接入点时,不会干扰到有线链路层。在infrastructure(基础结构型)网络中,发送端地址即为接入点(AP)上无线接口的地址,同时也是 BSSID最后,该会记载的来源MAC地址。在基础结构型网络里,接入点会以其无线接口的地址创建相应的BSS,这就是为什么接收端地址 (Address 1) 会被设定为 BSSID 的原因。
2023-01-29 11:42:44
1035
1
原创 了解Wi-fi频段概念
信道带宽,应该了解wi-fi频段,这样才能分析有多少信道带宽可用,以及如何在没有任何干扰(失真)的情况下有效地使用它。2.4 GHz Wi-Fi频段:在2.4 GHz频段,可用带宽为100 MHz,范围为2.4-2.5 GHz(2400-2500MHz)。因此,总可用带宽为100MHz,因此也相应地分配了信道宽度,使得信道之间没有重叠。就像如果我们分配20 MHz信道,那么我们只能分配4个信道,如果我们分配了4个以上的信道,那么信道之间会有重叠,并且在传输干扰发生时。5GHz Wi-fi频段:5GHz频段
2022-12-05 11:20:18
10968
原创 A-MSDU、A-MPDU、PLCP、MSDU、MPDU、PPDU
A-MPDU:针对MPDU的聚合,将多个MSDUs聚合在一起形成AMSDU,AMSDU+MACheadr之后形成MPDU发送到PHY层。A-MSDU报文是由若干个A-MSDU Subframe组成的,每个Subframe均是由Subframe header (Ethernet Header)、一个MSDU和0-3字节的填充组成。帧聚合技术又包含针对MSDU的聚合(A-MSDU)和针对MPDU的聚合(A-MPDU)。
2022-11-02 14:09:32
4798
原创 无线网络概论_3
整个事务就分为两个步骤,分别由两个工作站控制,在事务过程中,两个station必须相互合作,依次取得网络媒介的控制权以便进行传输操作。图3-5,一开始,原子操作和一般传送并无差别,在可以开始传送之前,原子操作同样必须等候一段时间间隔(DIFS),不过气候的步骤使用SIFS,而非DIFS。利用帧的分段,无线局域网工作站可以让干扰只影响较小的帧片段,而非较大的帧。当上层封包的大小超过网络管理人员所设定的分段阈值,就会进行帧的分段,每个帧片段都有相同的帧序号,以及一个递增的帧片段号以便重组。
2022-09-26 19:13:18
989
原创 无线网络概论_2
每个接入点的硬件设备可以创建两组BSS,其中一组可供客户访问,称之为guest,另外一组则宫内部使用,称之为internal。举个例子,各机构会有访客,其中很多人就有80211设备,而且需要于因特网连接,这些方可并非可信的用户,为了满足要求,将会在相同的实体上另辟两个扩展服务集。和移动电话一样,允许基本服务区域相互重叠,不仅可以让工作站与基本服务区域之间的转换的成功率提高,又可以提高最高层次的网络覆盖。概念上,帧的传递是根据MAC地址,但是帧的传递时不可靠的。
2022-09-12 20:02:52
387
原创 android wifi 抓sniffer log
空口 WiFi log无线产品如蓝牙、zigbee开发过程中,由于没有直接连接,通常开发中都要用到一个dongle用于抓取空中数据包,然后分析定位网络、通讯问题。Wi-Fi开发中同样需要空中抓包,Wi-Fi用于抓包的设备不叫dongle,通常叫sniffer。 无论有线以太网还是无线Wi-Fi,在正常工作模式下,mac层只处理广播包或者发给自己的数据包,目标地址与自己mac地址不符的数据包都将会被丢弃。sniffer其实是将Wi-Fi芯片设置为混杂模式,该模式下Wi-Fi芯片将会把收到的所有数据都传到
2021-10-08 21:21:16
4081
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人