背景
最近在做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