mmc rescan简析

mmc rescan是mmc host的detect work的功能函数,该函数用于探测目标卡的类型并且根据mmc/sd/sdio协议进行comm的初始化。

void mmc_rescan(struct work_struct *work)
{
	static const unsigned freqs[] = { 400000, 300000, 200000, 100000 };
	struct mmc_host *host =
		container_of(work, struct mmc_host, detect.work);
	int i;
	bool extend_wakelock = false;

	if (host->rescan_disable)
		return;

	mmc_bus_get(host);

	/*
	 * if there is a _removable_ card registered, check whether it is
	 * still present
	 */
	if (host->bus_ops && host->bus_ops->detect && !host->bus_dead
	    && !(host->caps & MMC_CAP_NONREMOVABLE))
		host->bus_ops->detect(host);//这里所做的事情:当我们进入delay work时,我们首先要检查一下,目标卡是否依然存在,如果仍然存在而且目标卡是可插拔的,那么我们需要先将该卡在内核留下的一些痕迹清除,重新探测该卡。所以一般如果是目标卡复位的话,一般是调用内核提供的专用的复位接口(如sdio_reset_comm等),而不是调度host的这个delay work,

	host->detect_change = 0;

	/* If the card was removed the bus will be marked
	 * as dead - extend the wakelock so userspace
	 * can respond */
	if (host->bus_dead)
		extend_wakelock = 1;

	/*
	 * Let mmc_bus_put() free the bus/bus_ops if we've found that
	 * the card is no longer present.
	 */
	mmc_bus_put(host);
	mmc_bus_get(host);

	/* if there still is a card present, stop here */
	if (host->bus_ops != NULL) { //判断是否bus的引用计数是否为0,如果不为0 ,说明bus仍然被引用,不能再继续下面的探测了。
		mmc_bus_put(host);
		goto out;
	}

	/*
	 * Only we can add a new handler, so it's safe to
	 * release the lock here.
	 */
	mmc_bus_put(host);

	if (host->ops->get_cd && host->ops->get_cd(host) == 0)
		goto out;

	mmc_claim_host(host);
	for (i = 0; i < ARRAY_SIZE(freqs); i++) {
		if (!mmc_rescan_try_freq(host, max(freqs[i], host->f_min))) {
			extend_wakelock = true;
			break;
		}
		if (freqs[i] <= host->f_min)
			break;
	}
	mmc_release_host(host);

 out:
	if (extend_wakelock)
		wake_lock_timeout(&host->detect_wake_lock, HZ / 2);
	else
		wake_unlock(&host->detect_wake_lock);
	if (host->caps & MMC_CAP_NEEDS_POLL) {
		wake_lock(&host->detect_wake_lock);
		mmc_schedule_delayed_work(&host->detect, HZ);
	}
}


<think>首先,用户的问题是:“我想了解如何使用nmcli命令重新扫描WiFi网络请问nmcliwifirescan使用方法及功能”。用户想知道如何使用nmcli命令重新扫描Wi-Fi网络,具体是nmcliwifirescan的使用方法和功能。回顾系统级指令:-所有行内数学表达式使用$...$格式。-独立公式使用$$...$$格式并单独成段。-LaTeX语法正确。-使用中文回答。-生成相关问题。-回答中引用的段落末尾自然地添加引用标识。-回答结构清晰,帮助用户逐步解决问题,尽量保证回答真实可靠。参考站内引用:-引用[1]:提到使用nmclidevicewifirescan来扫描可用Wi-Fi,然后连接到Wi-Fi。-引用[2]:提到Wi-Fi管理,包括nmclidevicewifilist,connect,rescan命令。-引用[3]:提到使用iw命令扫描Wi-Fi。-引用[4]:比较了nmcli和iw命令,包括扫描Wi-Fi带信号强度。这些引用都涉及Wi-Fi扫描和nmcli命令的使用。用户的问题聚焦在nmcliwifirescan上。我需要构建一个清晰、结构化的回答:1.**解释功能**:先解释nmcliwifirescan的功能是什么。2.**使用方法**:给出具体的命令语法和示例。3.**相关上下文**:可能提到为什么需要重新扫描,以及与其他命令的关联。4.**生成相关问题**:在回答后添加相关问题。使用中文回答。结构化回答:-**引言**:简要介绍nmcli命令。-**功能解释**:解释rescan的功能。-**使用方法**:给出命令格式和示例。-**注意事项**:如果需要,添加任何注意事项。-**相关问题**:最后生成相关问题。引用处理:-在回答中,如果引用信息,在段落末尾添加引用标识。-例如,基于引用[1]和[2],提到rescan命令。具体回答内容:-nmcli是NetworkManager的命令行工具,用于管理网络。-nmclidevicewifirescan:重新扫描可用的Wi-Fi网络。-功能:更新可用的Wi-Fi网络列表,这在网络环境变化时很有用。-使用方法:直接运行命令,不需要额外参数。-示例:sudonmclidevicewifirescan-之后,可以使用nmclidevicewifilist来列出扫描到的网络。在引用中,是nmclidevicewifirescan,而不是nmcliwifirescan。用户说“nmcliwifirescan”,但根据引用,应该是devicewifirescan。检查引用:-引用[1]:"nmclidevicewifirescan"-引用[2]:"nmclidevicewifirescan"-引用[4]:也使用nmclidevwifi,其中dev是device的缩写。所以,正确命令是nmclidevicewifirescan或nmclidevwifirescan。用户说“nmcliwifirescan”,这可能是个小错误。在回答中,我应该使用正确的命令。回答结构:1.**解释命令功能**:nmclidevicewifirescan命令用于重新扫描环境中可用的Wi-Fi网络,更新网络列表。2.**使用方法**:直接在终端运行该命令。通常需要sudo权限。3.**示例**:给出一个示例命令。4.**为什么需要重新扫描**:解释当新的Wi-Fi网络出现或网络状态变化时,需要重新扫描以获取最新信息。5.**相关命令**:提到如nmclidevicewifilist来查看扫描结果。6.**引用**:自然地添加引用标识。生成相关问题:在最后添加几个相关问题,如:-如何列出扫描到的Wi-Fi网络?-nmcli的其他Wi-Fi管理功能是什么?-如何连接到Wi-Fi网络?确保回答真实可靠:基于Linux和nmcli的文档。最终回答:-开头:直接回答用户问题。-主体:逐步解释。-结束:相关问题。</think>### 使用 nmcli 命令重新扫描 WiFi 网络 用户的问题聚焦于 `nmcli wifi rescan` 的使用方法和功能。但需注意,在 Linux 系统中,`nmcli` 命令的正确语法通常是 `nmcli device wifi rescan` 或缩写为 `nmcli dev wifi rescan`(`dev` 是 `device` 的缩写)。`nmcli` 是 NetworkManager 的命令行工具,用于管理网络连接,包括 Wi-Fi。下面我将逐步解释其功能和使用方法,确保内容真实可靠,基于标准 Linux 文档和常见实践[^1][^2]。 #### 1. **功能解释** - `nmcli device wifi rescan` 命令用于**重新扫描环境中可用的 Wi-Fi 网络**。它的核心功能是更新 NetworkManager 的 Wi-Fi 网络列表,这在以下场景中非常有用: - 当环境中新增 Wi-Fi 热点(如新路由器开启)时。 - 当 Wi-Fi 信号状态变化(如信号强度波动或网络消失)时。 - 在首次扫描后,需要刷新列表以获取最新网络信息。 - 重新扫描后,您可以使用其他命令(如 `nmcli device wifi list`)查看更新后的网络列表,包括 SSID、信号强度、加密方式等[^2][^4]。 - **为什么需要这个命令?** 默认情况下,NetworkManager 不会实时更新 Wi-Fi 列表;手动调用 `rescan` 可确保数据及时更新,避免连接过时或不可用的网络。 #### 2. **使用方法** - **基本语法**:在终端中运行以下命令。由于涉及网络硬件操作,通常需要 `sudo` 权限。 ```bash sudo nmcli device wifi rescan ``` - `device wifi`:指定操作对象为 Wi-Fi 设备。 - `rescan`:执行重新扫描动作。 - 命令执行后,不会直接输出结果;它只在后台更新网络列表。您需要结合其他命令验证效果。 - **完整示例步骤**: 1. **打开终端**:在 Linux 系统中启动命令行界面。 2. **执行重新扫描**: ```bash sudo nmcli device wifi rescan ``` - 如果成功,终端通常无输出(静默执行)。若有错误(如权限不足或 Wi-Fi 硬件未启用),会显示错误信息。 3. **验证扫描结果**:使用 `nmcli device wifi list` 查看更新后的网络列表: ```bash sudo nmcli device wifi list ``` - 输出示例: ``` IN-USE SSID MODE CHAN RATE SIGNAL BARS SECURITY MyWiFi Infra 6 130 Mbit/s 75 ▂▄▆_ WPA2 GuestNetwork Infra 11 270 Mbit/s 50 ▂▄__ WPA2 ``` - 这里会显示 SSID、信号强度(SIGNAL)、加密方式(SECURITY)等信息[^4]。 - **注意事项**: - **权限要求**:大多数 Linux 发行版需要 `sudo` 执行该命令,否则可能报错 “权限被拒绝”。 - **设备名称**:如果系统有多个 Wi-Fi 设备,需指定设备名(如 `wlan0`)。先用 `nmcli device status` 查看设备列表。 - **频率限制**:过于频繁的扫描可能影响网络性能;建议在必要时使用(如网络环境变化后)。 - **替代命令**:类似功能可通过 `iw` 命令实现(如 `iw dev wlan0 scan`),但 `nmcli` 更易用且与 NetworkManager 集成更好[^3][^4]。 #### 3. **常见问题与解决** - **扫描无效果?** 确保 Wi-Fi 硬件已启用(运行 `nmcli radio wifi on`)。如果问题持续,尝试重启 NetworkManager 服务:`sudo systemctl restart NetworkManager`。 - **与其他命令配合**:`rescan` 常作为连接 Wi-Fi 的第一步: - 扫描后,使用 `nmcli device wifi connect <SSID> password <密码>` 连接网络[^1]。 - **信号强度优化**:如果需要更详细的信号数据(如 dBm 值),可结合 `iw` 命令(如 `iw wlan0 scan | grep SSID`)[^3][^4]。 通过以上步骤,您可以高效使用 `nmcli device wifi rescan` 管理 Wi-Fi 网络。此命令是 Linux 网络管理的基础工具,适合日常维护和故障排查[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值