Android10 WIFI MAC地址获取流程

本文详细介绍了在QCS8250平台上,Android10系统中Wi-Fi MAC地址的获取流程,主要包括从平台驱动、wlan_mac.bin文件以及根据serialno生成MAC地址三个步骤。在hdd_initialize_mac_address接口中,优先级依次为:平台驱动、wlan_mac.bin文件和serialno生成的02开头MAC地址。当无法从前两者获取时,系统将自动生成MAC地址。

这里以QCS8250平台为例。
Wi-Fi MAC地址的获取流程位于:vendor/qcom/opensource/wlan/qcacld-3.0/core/hdd/src/wlan_hdd_main.c文件的hdd_initialize_mac_address接口。
从平台驱动程序或wlan_mac.bin获取MAC地址。如果平台驱动程序提供了mac地址,驱动程序使用它,否则它将使用wlan_mac.bin更新HW mac地址。

static int hdd_initialize_mac_address(struct hdd_context *hdd_ctx)
{
   
   
	bool update_mac_addr_to_fw = true;
	ret = hdd_platform_wlan_mac(hdd_ctx);	------①从平台驱动获取
	status = hdd_update_mac_config(hdd_ctx);		------②从wlan_mac.bin获取
	if (hdd_generate_macaddr_auto(hdd_ctx) != 0)		------③根据serialno生成MAC地址
	if (update_mac_addr_to_fw) {
   
   	//释放需要将MAC地址更新到固件中
		ret = hdd_update_mac_addr_to_fw(hdd_ctx);
	}
}
static int hdd_update_mac_addr_to_fw(struct hdd_context *hdd_ctx)
{
   
   
	if (hdd_ctx->num_provisioned_addr)
		qdf_mem_copy(&custom_mac_addr, &hdd_ctx->provisioned_mac_addr[0].bytes[0], sizeof(tSirMacAddr));
	else
		qdf_mem_copy(&custom_mac_addr, &hdd_ctx->derived_mac_addr[0].bytes[0], sizeof(tSirMacAddr));
	status = sme_set_custom_mac_addr(custom_mac_addr);
}

其中,Wi-Fi MAC地址获取优先级如下:
①从平台驱动获取
②从wlan_mac.bin获取
③根据serialno生成一个02开头的MAC地址
最终生成的MAC地址会写回到FW固件中。

1 从平台驱动获取MAC地址

vendor/qcom/opensource/wlan/qcacld-3.0/core/hdd/src/wlan_hdd_main.c

static int hdd_platform_wlan_mac(struct hdd_context *hdd_ctx)
{
   
   
	uint32_t no_of_mac_addr, iter;
	uint32_t max_mac_addr = QDF_MAX_CONCURRENCY_PERSONA;
	uint32_t mac_addr_size = QDF_MAC_ADDR_SIZE;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值