1.设备树篇-----openwifi学习
2.one man army(孤胆英雄)1 - WiFi固件
3.openwifi 从CSI到CSI
设备树篇-----openwifi学习
设备树描述硬件参数,源码是驱动学习Openwifi项目中的关键。Openwifi使用了ADI的源码射频芯片、Xilinx的驱动FPGA以及ARM的SoC平台。ADI提供了硬件评估板和软件资源,源码包括无操作系统和带Linux操作系统的驱动网页ico源码资源。使用Linux内核版本_r2,源码需要制作启动SD卡文件,驱动包含uImage、源码BOOT.bin、驱动devicetree.dtb。源码devicetree.dtb文件是驱动设备树的基础,用于描述硬件信息。源码设备树文件中,驱动根节点包含各种硬件节点,源码如USB、共享屏幕源码I2C、SPI、UART等,每个节点可以包含更详细的下级节点。
设备树节点的使用示例中,iic设备树节点包含compatible属性,用于匹配Linux驱动,内核中可搜索到匹配代码。节点之间可以互相引用,如Openwifi接收部分的IP核需要一个DMA,因此引用了DMA节点。dts文件与dtsi文件类比C语言中的头文件,用于描述硬件配置。
在使用官方板子的情况下,设备树配置基本无忧。openjdk 源码安装然而,理解设备树文件和其作用对于开发软件定义无线电系统至关重要。在设备树中添加节点可以描述FPGA下的IP核,如Openwifi的接收部分使用了ADI的DMA。在FPGA工程中删掉dma时,需要在设备树中相应节点中注释掉引用,否则系统可能会崩溃。
Soc的节点相对固定,用于传递硬件参数,如描述CPU、USB、I2C、以太网等。Openwifi的节点则包含了其使用方法,如使用两个dma,waids源码分析共有4个通道,被不同的节点引用。在查找节点时,Linux内核提供了一系列的of系列函数,如通过名字、路径或compatible属性查找。获取资源时,Linux也提供了相应的函数,如获取中断号、寄存器资源等。
设备树编译工具为dtc,可以将devicetree.dts文件编译为dtb文件,也可以将dtb文件反编译为dts文件。在基于Zynq的平台下,通过分析ADI提供的blue explorer 源码设备树文件,可以得到自己的设备树文件,并在内核中执行编译。
总的来说,设备树在硬件描述方面提供了简洁而智能的设计,为硬件与操作系统之间的交互提供了一种一劳永逸的解决方案。然而,在自定义节点时,需要深入考虑硬件描述、连接情况以及编写驱动,这属于硬件平台(bsp)工程师的工作范畴。
one man army(孤胆英雄)1 - WiFi固件
在探索openwifi开源芯片的FPGA低级MAC状态机时,我遇到了复杂性挑战,这促使我思考重构的可能性。尽管重构风险不低,但其带来的创新诱惑难以抵挡,尽管只是想象中的构思(YY),却激发了新的视角。
FPGA状态机在实时性能上有着显著优势,能在极短的0.us时间内精准执行,但其维护性、易读性和调试性却成为短板。理想的low MAC设计应由实时软件驱动,既能保证实时性,又能兼顾代码的可维护性。如今的许多高级WiFi芯片采用内部MCU,运行定制的软件,这种架构显然更高效。
这些芯片内部的固件,如Linux加载网卡驱动时的binary image,通常是厂商提供的非开源blob形式。Linux生态在驱动这些非开源硬件时面临挑战,需要深入理解芯片固件的功能,甚至进行补丁开发或优化驱动。进一步进入芯片固件层面,难度成倍增加,需要解析CPU架构、外设、寄存器和通信协议等复杂信息,这通常通过反向工程进行研究。
幸运的是,对于一些WiFi芯片,如ARM架构的,已有人开始探索并修改其内部CPU程序,甚至实现自定义信号发射,如seemoo-lab/nexmon项目所示。然而,这条路仍有许多未知和挑战,但黑客社区通过反向工程的努力正在逐步揭开这些神秘面纱。
openwifi 从CSI到CSI
在openwifi平台上,一项突破性进展实现了实时获取信道状态信息(CSI)的便捷性! 对于openwifi,它是一个还未投入生产,但基于FPGA的开源WiFi芯片。想要了解更多,可以阅读这篇详细介绍: 开源Wi-Fi芯片/FPGA设计及其背后的开发者故事。 在WiFi研究中,CSI指的是Channel State Information,通过解析接收到的信号,可以洞察信号传播的特性,甚至能揭示诸如人体动作、心跳和敲击等细节,潜力无限。 由于openwifi芯片的开源特性,它提供了前所未有的信息获取机会,例如每个WiFi包的频偏、均衡星座图和时间标签,这使得“从CSI到CSI”的转变更为深入,即从Channel State Information转变为Chip State Information。 实现这一实时导出的关键在于,通过在FPGA与Linux系统之间建立侧通道,将芯片内部的信道响应、频偏等信息实时传输。具体的技术细节可在openwifi GitHub上的说明文档中找到: 链接。 尽管这个功能看似基础,但实现起来却涉及多个层面:FPGA内需配置逻辑捕获信息,通过DMA通道传递给ARM,Linux内核需要相应的驱动接收,用户空间程序负责配置和过滤规则,最终通过以太网将数据传输到外部电脑。整个过程涉及全栈技术的综合运用。