0

我正在研究 android 内核(果冻豆)。

我专注于/net/mac80211/scan.c模块和扫描行为,以了解它的PS_mode工作原理。无论如何,我找不到任何系统调用在更高级别调用内核的ieee80211_scan_work函数(调用函数的位置)。ieee80211_start_scan()

我想知道这个函数是否甚至被 API 调用,有没有人知道它,如果知道,它syscall是上升的?

4

1 回答 1

0

在这里查看我的回复以获得对 mac80211 的总体概述: 如何学习 Linux 无线驱动程序(mac80211)的结构?

来自用户空间的接口不是基于系统调用,而是使用 netlink API。通过发送 NL80211_CMD_TRIGGER_SCAN 命令完成扫描。在您收到扫描已完成的 NL80211_CMD_NEW_SCAN_RESULTS 事件后,您发出 NL80211_CMD_GET_SCAN 以获取扫描结果。要查看此示例,请查看 wpa_supplicant 代码。

您看不到任何人调用 ieee80211_scan_work,因为它是一个工作队列处理程序。如果您不熟悉工作队列,您可以选择一本内核书籍来解释它们。这项工作在 ieee80211_alloc_hw() 中被初始化为 local->scan_work 的处理程序。

“让它运行”的代码在 ieee80211_start_sw_scan() 中,它实际上对 scan_work 进行排队。请注意,scan_work 仅用于 SW 扫描,这意味着 mac80211 管理扫描(即它保持一个定时器来切换通道并调用较低的 HW 驱动程序将 HW 设置为特定通道)。这仅取决于您的硬件功能。对于某些硬件,扫描完全由硬件驱动程序甚至固件完成。如果您的硬件驱动程序实现了硬件扫描,它将实现 hw_scan mac80211 回调。

于 2013-08-02T22:10:28.140 回答