我正在研究android内核(jelly bean)。
我专注于/net/mac80211/scan.c
模块和扫描行为,以了解PS_mode
到底是如何工作的。无论如何,我找不到任何系统调用在更高级别调用内核的ieee80211_scan_work
函数(其中调用ieee80211_start_scan()
func)。
我想知道这个函数是否被API调用,是否有人知道它,如果确实如此,syscall
是否会升级?
答案 0 :(得分:0)
请参阅我的回复以获得mac80211的一般概述: How to learn the structure of Linux wireless drivers (mac80211)?
来自用户空间的接口不是基于系统调用,而是使用netlink API。 通过发送NL80211_CMD_TRIGGER_SCAN命令完成扫描。在您获得扫描完成的NL80211_CMD_NEW_SCAN_RESULTS事件后,您发出NL80211_CMD_GET_SCAN以获取扫描结果。 要查看wpa_supplicant代码的示例。
你看不到任何人调用ieee80211_scan_work,因为它是一个workqueue处理程序。如果你不熟悉workqueue,你可以拿一本内核书来解释它们。 这项工作在ieee80211_alloc_hw()中初始化为local-> scan_work的处理程序。
“获得此运行”的代码位于ieee80211_start_sw_scan()中,它实际上将scan_work排队。请注意,scan_work仅用于SW扫描,这意味着mac80211管理扫描(即,它保留定时器以切换通道并调用较低的HW驱动程序以将HW设置为特定通道)。这仅取决于您的硬件功能。对于某些硬件,扫描完全由HW驱动程序完成,甚至在固件中完成。 如果您的硬件驱动程序实现了硬件扫描,它将实现hw_scan mac80211回调。