RK3326[Android 8.1],获取BT、WIFI地址

在RK3326 Android 8.1平台上,作者遇到SN、WiFi和蓝牙地址无法正确写入及生效的问题。通过分析,确定数据存储在vendor storage,并在kernel和HAL层分别获取WiFi和蓝牙地址。解决方法涉及修改驱动和系统配置,确保模块正确加载与地址读取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

  
最近在做RK平台的项目,遇到了写号的问题;最开始是SN、wifi地址、bt地址无法写到机器里面去;更新了写号工具之后,可以写入机器,但是并没有使用到写号工具写入的数据,即写入的数据并没有生效。

平台:RK3326,Android 8.1;
工具:RKDevInfoWriteTool_Setup_V1.0.4_0422

出现问题

  
最开始是SN、wifi地址、bt地址无法写到机器里面去;更新了写号工具之后,可以写入机器,但是并没有使用到我们使用写号工具写入的信息,即写入的数据并没有生效。

分析问题

  
我觉得想要解决这个问题,需要弄清楚2个问题:

1、工具写入的数据是存放在哪里的?
2、蓝牙和wifi分别是在哪里去获取工具写入的数据?

解决问题

存放位置

  根据RK文档可得知:vendor storage,用于存储SN, MAC, LAN,BT等数据,主要特性是不会丢失以及系统启动各个阶段都可以访问,包括uboot, kernel, linux用户空间以及pc端。

获取地址

1、WIFI Mac

WIFI Mac是在wifi驱动里面去获取的;

路径:
kernel/drivers/net/wireless/rockchip_wlan/rtlxxxx/core/rtw_ieee80211.c

在函数rtw_macaddr_cfg()中,添加如下:

void rtw_macaddr_cfg(u8 *out, const u8 *hw_mac_addr)
{
    
    …………
    
err_chk:

    /*添加代码 start*/
    if (!rockchip_wifi_mac_addr(mac)) {
        RTW_ERR("get mac address from flash=[%02x:%02x:%02x:%02x:%02x:%02x]\n", mac[0], mac[1],
        mac[2], mac[3], mac[4], mac[5]);
    }
    
/*添加代码 end*/

    if (rtw_check_invalid_mac_address(mac, _TRUE) == _TRUE) {

  简单的去跟踪一下rockchip_wifi_mac_addr()函数,可以发现是从vendor分区里面把数据读出来的,其实有一个值得注意得地方,如下:

int rockchip_wifi_mac_addr(unsign
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值