RM_Chapter7:Interrupts

Chapter 7:Interrupts

7.1 Environment

在这里插入图片描述
本章描述了系统级中断环境和中断控制器的功能(见图7-1)。PS基于ARM架构,使用两个Cortex-A9处理器(CPU)和GIC PL390中断控制器。中断结构与CPU和接受来自I/O外围设备(IOP)和可编程逻辑(PL)的中断。本章包括以下关键主题:

  • 私有、共享和软件中断
  • GIC功能
  • 中断优先级和处理

7.1.1 Private, Shared and Software Interrupts在这里插入图片描述

每个CPU都有一组专用外围设备中断(PPI),它们使用banked 寄存器进行专用访问。PPI包括全局计时器、专用看门狗计时器、专用计时器和来自PL的FIQ/IRQ。软件生成的中断(SGI)被路由到一个或两个CPU。SGI通过写入ICDSGIR寄存器生成。共享外围设备中断(SPI)由PS和PL中的各种I/O和内存控制器生成。它们被路由到任一个或两个CPU。来自PS外围设备的SPI中断也被路由到PL

7.1.2 Generic Interrupt Controller (GIC)

在这里插入图片描述

  • 通用中断控制器(GIC)是用于管理从PS和PL发送到CPU的中断的集中资源。控制器启用、禁用、屏蔽和优先处理中断源,并在CPU接口接受下一个中断时以编程方式将它们发送到选定的CPU(或CPU)。此外,控制器支持实现安全感知系统的安全扩展
  • 控制器基于ARM通用中断控制器架构版本1.0(GIC v1),非矢量化
  • 寄存器通过CPU专用总线访问,通过避免互连中的临时阻塞或其他瓶颈,实现快速读/写响应
  • 中断分发服务器将所有中断源集中起来,然后用最高的单个CPU的优先级。硬件确保针对多个CPU的中断只能一次被一个CPU占用。所有中断源都由唯一的中断ID号标识。所有中断源都有自己的可配置优先级和目标CPU列表

7.1.3 Resets and Clocks

在这里插入图片描述

  • 中断控制器由重置子系统通过写入SLCR中的A9_CPU_rst_ctrl寄存器。同样的重置信号也会重置CPU专用定时器和专用看门狗定时器(awdt)
  • 中断控制器使用CPU_3x2x时钟(CPU频率的一半)工作

7.1.4 Block Diagram

在这里插入图片描述
共享外设中断是由各种系统子系统生成的,这些子系统包括PS中的I/O外设和PL中的逻辑。中断源如图7-2所示
在这里插入图片描述

7.2 Functional Description

7.2.1 Software Generated Interrupts (SGI)

在这里插入图片描述

  • 每个CPU可以使用软件生成的中断(SGI)中断自身、另一个CPU或两个CPU。有16个软件生成的中断(见表7-1)。SGI中断是通过写入到ICDSGIR寄存器并指定目标CPU的SGI中断号。此写入发生通过CPU自己的专用总线。每个CPU都有自己的一组SGI寄存器来生成一个或多个16个软件产生中断。CPU可以中断自身、另一个CPU或两个CPU。这个通过读取ICCIAR(中断确认)寄存器或将1写入ICDICPR(中断清除挂起)寄存器的相应位来清除中断
  • 所有SGI都是边缘触发的。SGIS的敏感度类型是固定的,不能更改;ICDICFR0寄存器是只读的

7.2.2 CPU Private Peripheral Interrupts (PPI)

在这里插入图片描述

  • 每个CPU连接到一个由五个共享外围设备中断组成的私有集。PPI见表7-2
  • 所有中断敏感度类型都是固定的,不能更改。请注意,来自PL的快速中断(FIQ)信号和中断(IRQ)信号是反向的,然后发送到中断控制器。因此,尽管ICDICFR1寄存器将它们反映为低灵敏度的活动寄存器,但它们在PS-PL接口处处于高激活状态

在这里插入图片描述
在这里插入图片描述

7.2.3 Shared Peripheral Interrupts (SPI)

  • 一组来自不同模块的大约60个中断可以路由到CPU或PL。中断控制器管理这些中断的优先级和接收,对于CPU
  • 所有SPI中断类型的重置默认值都是活动的高级别。但是,软件需要使用ICDICFR2和ICDICFR5寄存器将中断32、33和92编程为上升沿灵敏度。SPI中断如表7-3所示
    在这里插入图片描述
    在这里插入图片描述

7.2.4 Wait for Interrupt Event Signal (WFI)

CPU可以进入等待状态,等待生成中断(或事件)信号。
发送到pl的等待中断信号在第3章,应用处理单元中描述

7.3 Register Overview

ICC和ICD寄存器是PL390 GIC寄存器集的一部分。有60个SPI中断。这远低于PL390所能支持的,因此ICD中的中断启用、状态、优先级和处理器目标寄存器比PL390所能支持的要少得多。表7-4列出了ICC和ICD寄存器的摘要
在这里插入图片描述

7.3.1 Write Protection Lock Down

在这里插入图片描述

  • 中断控制器提供防止对关键配置进行写访问的功能寄存器。这是通过将一个写入apu ctrl[cfgsdisable]位来完成的。APU控制寄存器是EPP系统级控制寄存器集SLCR的一部分。这控制安全中断控制寄存器的写入行为
  • 如果用户想要设置cfgsdisable位,建议在用户软件配置中断控制器后发生的软件引导过程寄存器。cfgsdisable位只能在cfgsdisable位已设置,它将受保护的寄存器位更改为只读,因此即使在安全域中存在执行的恶意代码,也无法更改这些安全中断的行为

7.4 Programming Model

7.4.1 Interrupt Prioritization

在这里插入图片描述

  • 所有中断请求(PPI、SGI和SPI)都被分配一个唯一的ID号。
    控制器使用ID号进行仲裁。中断分发服务器保存每个CPU的挂起中断列表,然后在将其发送到CPU接口之前选择最高优先级的中断。通过选择最低的ID来解决等优先级的中断
  • 优先级逻辑在物理上是重复的,以便能够同时选择
    每个CPU的优先级中断。中断分发服务器保存中断、处理器和激活信息的中心列表,并负责将软件中断触发到CPU
  • SGI和PPI分发寄存器被存入bank,以便为每个连接的处理器提供单独的副本。硬件确保针对多个CPU的中断一次只能由一个CPU占用
  • 中断分配器向CPU接口发送最高的挂起中断。它接收返回已确认中断的信息,然后可以更改相应的中断。只有确认中断的CPU才能结束该中断

7.4.2 Interrupt Handling

在这里插入图片描述

  • 当在ARM中描述IRQ线路取消断言时,GIC对挂起中断的响应。文件:ihi0048b_gic_architecture_specification.pdf(见附录A,附加资源)。见第1.4.2节中的注释以及第3.2.4节中的附加信息
  • 如果中断在gic中挂起并且irq被取消断言,gic中的中断将变为非活动状态(并且CPU从未看到它)
    在这里插入图片描述
  • 如果中断在gic中处于活动状态(因为CPU接口已确认中断),则软件ISR首先检查gic寄存器,然后轮询I/O外围设备中断状态寄存器,确定原因

7.4.3 ARM Programming Topics

在这里插入图片描述
ARM GIC体系结构规范包括以下编程主题:

  • GIC寄存器访问
  • 分发服务器和CPU接口
  • GIC安全扩展的影响
  • PU接口寄存器
  • 保留和恢复控制器状态

7.4.4 Legacy Interrupts and Security Extensions

在这里插入图片描述

  • 当传统的中断(IRQ, FIQ) 是用来处理一个中断,中断和访问的安全模式(fiqs ackctl iccicr [路径] = 1),偶尔会发生竞态条件,当读取中断IDs时。在IRQ处理程序中还存在看到FIQ ID的风险,因为GIC只知道处理程序正在读取的安全状态,而不知道处理程序的类型

有两种可行的解决方案:

  • 仅向可重入IRQ处理程序发送IRQ信号,并使用GIC中的抢占功能。
  • 将FIQ和IRQ与ICICR[ackctl]=0一起使用,并使用TLB表处理非安全的IRQ模式,并在安全模式下处理FIQ
<think>我们正在分析WiFiAP模式下连接超时无法连接的问题。用户提供的日志片段显示了一系列atbm_log记录,包括认证延迟、信道变更、STA添加、密钥设置和删除等过程。同时,参考引用[1]中给出了连接成功的日志作为对比。需要结合这些信息分析连接失败的原因并提出解决方案。首先,我们回顾用户提供的日志:-日志开始显示认证延迟(authen,delaysuspend)和信道变更(changeds_paramschannel6)-接着是STA添加(staadd)和EAP速率调整(down_eap_rate)-然后有密钥设置(SET_KEY)和AMPDU(帧聚合)相关操作-关键异常点:很快出现了密钥禁用(DISABLE_KEY)和STA移除(staremove)-最后再次出现信道变更对比引用[1]中的成功日志:-成功日志包含完整的802.1X认证和WPA握手完成记录-而问题日志中缺少关键的握手完成记录根据以上差异,我们重点分析以下可能的故障点:1.**认证阶段失败(AuthenDelay)**:初始日志立即提到"authen,delaysuspend",表明认证过程被延迟或挂起。可能原因包括:-加密协议不匹配(如AP配置为WPA3而客户端只支持WPA2)-EAP(可扩展认证协议)参数配置错误2.**密钥生命周期异常**:-日志中先出现`SET_KEY`操作(索引1,密钥类型5),但很快又出现`DISABLE_KEY`(相同索引)-密钥类型5通常表示成对临时密钥(PTK),用于WPA2-PSK等加密-这种快速设置后立即删除的现象表明密钥协商可能失败3.**AMPDU(帧聚合)兼容性问题**:-日志中记录了`ieee80211_process_addba_request`(添加块确认请求)-但后续的AMPDU操作显示action[0](添加)和action[1](删除)连续发生-表明帧聚合功能被启用后立即禁用,可能与驱动或硬件兼容性有关4.**底层信道参数变更**:-日志前后两次出现"changeds_paramschannel6",中间夹着STA添加和移除-这种信道重置行为可能是由连接失败触发的,但也可能是连接失败的原因(如非法信道)结合引用[1]的成功案例,我们注意到正常流程应包含:-802.1X认证通过-WPA四次握手完成(pairwisekeyhandshakecompleted)-没有意外的密钥删除操作因此,当前问题可归结为:**认证阶段未完成导致连接中断**。具体可能原因包括:a)**驱动资源不足**:内存泄漏等问题导致无法分配认证所需资源(参见历史回答提到的驱动问题)b)**加密协议冲突**:AP与客户端支持的加密方式不匹配c)**监管区域限制**:信道6在某些地区不可用(如日本禁止信道6)d)**WPA握手超时**:默认超时时间为10秒,若超时则中断连接**解决方案分步实施:**###步骤1:调整加密配置编辑hostapd配置文件(通常为`/etc/hostapd.conf`),将加密方式改为WPA2-PSK基础模式:```bashwpa=2#仅启用WPA2wpa_key_mgmt=WPA-PSK#使用预共享密钥管理wpa_pairwise=CCMP#强制使用AES加密(CCMP)rsn_pairwise=CCMP#RSN协议同样使用CCMP```修改后重启服务:`systemctlrestarthostapd`###步骤2:设置合规监管域检查当前监管域设置:```bashiwregget```若返回`country00`(不可用)或非目标国家代码,则强制设置为中国(CN):```bashiwregsetCN```并在配置文件中永久生效(如有必要):```bashecho'optionscfg80211ieee80211_regdom=CN'>/etc/modprobe.d/cfg80211.conf```###步骤3:监控驱动内存使用运行内存监控脚本(每5秒采样):```bashwatch-n5"grep-E'MemFree|Slab'/proc/meminfo"```同时触发连接尝试,观察:-`MemFree`(空闲内存)是否持续下降-`Slab`(内核缓存)中是否存在异常增长若存在泄漏现象,需更新或回滚驱动版本。###步骤4:临时禁用AMPDU通过debug接口临时关闭帧聚合:```bashecho0>/sys/kernel/debug/ieee80211/phy0/atbm/ampdu_enable```测试连接是否恢复稳定。若有效,则需在驱动配置中永久禁用或等待厂商修复。###关键日志比对下表对比了失败日志与成功日志的关键差异:|**阶段**|**失败日志特征**|**成功日志特征[^1]**||-------------------|-------------------------------------------------|-------------------------------------------------||初始认证|`authen,delaysuspend`|无延迟记录||STA状态变更|添加后立即移除(`staadd`→`staremove`)|稳定添加后进入认证||密钥操作|`SET_KEY`后紧跟`DISABLE_KEY`|密钥设置成功后无删除操作||握手完成|无|`WPA:pairwisekeyhandshakecompleted`||数据聚合|AMPDU添加后立即删除|无异常操作记录|此对比进一步验证了**认证中断**是核心问题。###最终优化建议若上述步骤仍不生效,需收集完整日志:```bashdmesg-w|grepatbm>atbm_full.log```并重点检查:1.是否有`Timeoutwaitingforhandshake`(握手超时)2.`ieee80211_process_addba_request`的调用上下文3.EAP相关错误码(如`eap_rate`过低导致的超时)---§§相关问题§§1.WiFi驱动内存泄漏有哪些常见检测工具?2.如何解读WPA四次握手过程中的错误代码?3.不同国家/地区的WiFi信道限制有何差异?4.如何修改hostapd的认证超时时间?</think> ### WiFi AP模式连接超时无法连接的原因及解决方案(基于`atbm_log`日志分析) --- #### 🔍 故障原因分析(关键日志解读) 1. **认证阶段失败** ```log [atbm_log]:[TX]:authen, delay suspend ``` - **原因**:认证过程被挂起(delay suspend),表明客户端与AP的认证流程未完成 - **根因**: - 加密协议不匹配(如AP配置WPA3而客户端仅支持WPA2) - PSK预共享密钥错误或认证超时(默认10秒) - 硬件资源不足导致EAP(可扩展认证协议)处理中断[^1] 2. **信道与频宽异常** ```log [atbm_log]:change ds_params channel 6 [atbm_log]:[3c:13:5a:09:91:9d]:20M channel ``` - **原因**:客户端被强制限制在20MHz窄频宽 - **根因**: - 监管域设置错误(如 `country_code=00` 无效值) - 信道6在5GHz设备上非法(需核查 `iw list` 支持频段) - 驱动`ds_params`参数冲突导致硬件降级 3. **密钥协商中断** ```log [atbm_log]:<3>SET_KEY:idx(1),if_id(0) ... [atbm_log]:<3>DISABLE_KEY:idx(1),key_type(5),if_id(0) ``` - **原因**:成对临时密钥(PTK)安装后被立即禁用 - **根因**: - WPA四次握手失败(对比[^1]成功日志中的 `pairwise key handshake completed`) - 驱动密钥索引冲突(`idx=1` 被重复使用) - 硬件加速模块故障(`key_type=5` 对应AES-CCMP异常) 4. **AMPDU帧聚合失效** ```log [atbm_log]:AMPDU[wlan0]:action[0],tid[0],ssn[16],buff_size[0] [atbm_log]:AMPDU[wlan0]:action[1],tid[0],ssn[0],buff_size[0] ``` - **原因**:块确认协议(ADDBA)协商后立即终止(action 0=添加, 1=删除) - **根因**: - 内存不足导致帧聚合缓冲区分配失败(`buff_size=0`) - 序列号混乱(`ssn`从16突变到0)表明硬件DMA传输错误 --- #### 🛠️ 解决方案(逐步操作) ```bash # 步骤1:修复加密配置(关键) sudo nano /etc/hostapd.conf # 修改为兼容配置: wpa=2 # 仅启用WPA2 wpa_key_mgmt=WPA-PSK # 禁用WPA3-PTK/SAE wpa_pairwise=CCMP # 强制AES加密 rsn_pairwise=CCMP ``` ```bash # 步骤2:校准监管域与信道 sudo iw reg set CN # 设置中国监管域 sudo iw dev wlan0 set channel 6 HT40+ # 启用40MHz频宽(需硬件支持) ``` ```bash # 步骤3:禁用问题模块(临时) echo 0 | sudo tee /sys/kernel/debug/ieee80211/phy0/atbm/ampdu_enable # 关闭AMPDU echo 1 | sudo tee /proc/irq/$(grep atbm /proc/interrupts | cut -d: -f1)/smp_affinity # 绑定CPU中断 ``` ```bash # 步骤4:驱动资源监控 watch -n 1 "grep -E 'MemFree|Slab' /proc/meminfo" # 实时内存检测 dmesg -T | grep -E 'atbm|ieee80211' # 过滤驱动日志 ``` --- #### 📊 故障诊断矩阵 | 现象 | 检测命令 | 修复方案 | |------|----------|----------| | 认证超时 | `sudo hostapd_cli -i wlan0 sta 3c:13:5a:09:91:9d` | 降低加密强度:`wpa_group_rekey=0` | | 信道降级 | `iw dev wlan0 info \| grep channel` | 更新监管域:`crda` | | 密钥冲突 | `sudo cat /sys/kernel/debug/ieee80211/phy0/keys` | 清除密钥:`sudo iw dev wlan0 del key idx=1` | | 内存泄漏 | `sudo slabtop -o \| grep atbm` | 重启驱动:`rmmod atbmwifi; modprobe atbmwifi` | > **注**:若操作后仍出现 `authen, delay suspend`,需检查硬件中断风暴: > ```bash > watch -n 1 "cat /proc/interrupts | grep atbm" > ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值