rk3368 用Chip ID生成Wi-Fi或者以太网MAC地址

sdio wifi 移植 介绍 简单来说,sdio起源自sd标准,顾名思义就是sd的IO接口(interface)的意思,更具体的说明,sd本来是记忆卡的标准,但是现在也可以把SD卡拿来插上一些外围设备接口使用,这个就是就叫做sdio。 而且sdio本身是一种相当单纯的技术,通过sd的IO引脚来连接外部外围,并且通过sd的IO数据接位与外围传输数据,而且sd协会也推出很完整的sdio stack 驱动程序,使得sdio外围得开发与应用变得非常热门 这里我们要移植的是RTL8822cs的sdio WiFi 模块,将其移植到rk3 阅读详情

Platform: RK3368

OS: Android 6.0

Kernel: 3.10.0


rk3368的Chip ID是从芯片eFuse中读取出来的。然后赋值给system_serial_low和system_serial_high.
/proc/cpuinfo中的Serial字段就是用的这两个值。

arch/arm64/boot/dts/rk3368.dtsi

	efuse_256@ffb00000 {
		compatible = "rockchip,rk3368-efuse-256";
		reg = <0x0 0xffb00000 0x0 0x8>;
	};

arch/arm/mach-rockchip/efuse.c

static void __init rk3288_efuse_init(void)
{
	int ret;
	pr_err("%s\n", __func__);

	ret = rk3288_efuse_readregs(0, 32, efuse_buf);
	if (ret == 32) {
		if (efuse_buf[2] == 0x33 && efuse_buf[3] == 0x86)
			efuse.get_leakage = rk3368_get_leakage;
		else
			efuse.get_leakage = rk3288_get_leakage;
		efuse.efuse_version = rk3288_get_efuse_version();
		efuse.process_version = rk3288_get_process_version();
		rockchip_set_cpu_version((efuse_buf[6] >> 4) & 3);
		rk3288_set_system_serial();
	} else {
		pr_err("failed to read eFuse, return %d\n", ret);
	}
}

static void __init rk3288_set_system_serial(void)
{
	int i;
	u8 buf[16];

	for (i = 0; i < 8; i++) {
		buf[i] = efuse_buf[8 + (i << 1)];
		buf[i + 8] = efuse_buf[7 + (i << 1)];
	}

	system_serial_low = crc32(0, buf, 8);
	system_serial_high = crc32(system_serial_low, buf + 8, 8);
}

所以可以用Chip ID来生成wifi或者以太网的mac地址:

Wi-Fi:
net/rfkill/rfkill-wlan.c

static int create_wifi_addr_from_system_serial()
{
	if (system_serial_low != 0 && system_serial_high != 0) {
		wifi_custom_mac_addr[0] = (system_serial_high >> 8) & 0xfe;/* clear multicast bit */
		wifi_custom_mac_addr[1] = system_serial_high | 0x02;/* set local assignment bit (IEEE802) */
		wifi_custom_mac_addr[2] = system_serial_low >> 24;
		wifi_custom_mac_addr[3] = system_serial_low >> 16;
		wifi_custom_mac_addr[4] = system_serial_low >> 8;
		wifi_custom_mac_addr[5] = system_serial_low;
	}
	return 0;
}

 int rockchip_wifi_mac_addr(unsigned char *buf)
 {
     char mac_buf[20] = {0};
@@ -620,6 +635,11 @@ int rockchip_wifi_mac_addr(unsigned char *buf)
     wifi_custom_mac_addr[2],wifi_custom_mac_addr[3],wifi_custom_mac_addr[4],wifi_custom_mac_addr[5]);
     LOG("falsh wifi_custom_mac_addr=[%s]\n", mac_buf);
 
+       // from the system serial number
+       if (!is_valid_ether_addr(wifi_custom_mac_addr)) {
+               create_wifi_mac_from_system_serial(wifi_custom_mac_addr);
+       }
+
 #ifdef ENABLE_WIFI_RAND_MAC

以太网:
drivers/net/ethernet/rockchip/eth_mac.c

int eth_mac_from_system_serial(u8 *addr)
{
	if (system_serial_low != 0 && system_serial_high != 0) {
		pr_info("[eth]Create an address from the system serial number.\n");
		addr[0] = (system_serial_high >> 24) & 0xfe;/* clear multicast bit */
		addr[1] = (system_serial_high >> 16) | 0x02;/* set local assignment bit (IEEE802) */
		addr[2] = system_serial_low >> 24;
		addr[3] = system_serial_low >> 16;
		addr[4] = system_serial_low >> 8;
		addr[5] = system_serial_low;
	}
	return 0;
}
+++ b/drivers/net/ethernet/rockchip/gmac/stmmac_main.c
@@ -1691,6 +1691,8 @@ static void stmmac_check_ether_addr(struct stmmac_priv *priv)
                if (!is_valid_ether_addr(priv->dev->dev_addr))
                        eth_mac_idb(priv->dev->dev_addr);
                if (!is_valid_ether_addr(priv->dev->dev_addr))
+                       eth_mac_from_system_serial(priv->dev->dev_addr);
+               if (!is_valid_ether_addr(priv->dev->dev_addr))
                        eth_hw_addr_random(priv->dev);
        }

Rockchip Android13 x3588蓝牙wifi/bt调试心得 wifi/bt总结 阅读详情

相关推荐

RK平台AP WIFI自定义MAC地址1

RK 平台 AP MAC 地址自定义1、修改 Makefile-DKEEP_ALIVE -DPKT_FILTER_SUPPORT -DPNO_SUPPORT -

RK WiFi驱动层初始化分析

RK3368 默认支持的WiFi芯片为AP6XXX系列,此芯片还默认支持BT。 可以先看看原理图里面的的情况,方便我们理解其在代码里面的配置情况 WiFi 设备配置: ./rockchip/rk3368/*/rk3368-p9.dts 此配置为WiFi kernel驱动在初始化时使用,包括芯片类型,ref voltage为1800mv, wake up irq为GPIO_ACTIVE_HIGH device/rockchip/rk3368/*/rockchip_defconfig .

b178903294的博客 5177

gcc/g++ 链接库的编译与链接

gcc/g++ 链接库的编译与链接 surgewong@gmail.com http://blog.youkuaiyun.com/surgewong       程序编译一般需要经预处理、编译、汇编和链接几个步骤。在实际应用中,有些公共代码需要反复使用,就把这些代码编译成为“库”文件。在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中,这种库称为静态(链接)库,其特点是可

Surge 4万+

Linux内核(六)[ RK3568 ] 手动/自动调整千兆网口延时TX RX

文章目录背景手动测试RX TX的延时值节点确认使用方法扫描delayline窗口效果图代码解析设备树配置相关结构体自动扫描延时驱动代码解析扫描函数解析 背景 最近在调试RK系列的网口,出现网口丢包很严重,或者获取不到IP(手动获取ip也无法ping通外网和内网)等。出现这类问题很大可能是MAC或PHY的延时出现问题,造成收发数据丢包。这时手动调整PHY芯片寄存器收发延时值或者MAC延时值(设备树节点里TX/RX值)很麻烦。我在测试过程中出现由于PCB的原因造成每块板子的延时值不同,需要按照每块板子进行网口延

weixin_43564241的博客 1万+

西门子PLC与汇川SV660P伺服速度模式配置实战指南

本文详细介绍了西门子S7-1200 PLC与汇川SV660P伺服驱动器在速度模式下的配置实战指南。从硬件接线、伺服参数配置到TIA Portal软件组态和PLC程序编写,提供了全面的操作步骤和实用技巧,帮助工程师快速解决伺服系统调试中的常见问题,确保系统稳定运行。

weixin_30316097的博客 500

跨域问题 - 其他 method 都没有跨域问题,只有delete有跨域的问题

跨域的配置等一切正常,GETPOSTPUTOPTIONS都可以正常访问, 唯独有一个DELETE有跨域的问题, 经过排查发现这个DELETE请求有body, 经过一系列排查, 发现头部有一个不太正常的值是为了避免浏览器的影响, 直接在 postman 中新建一个请求, 竟然也有跨域的问题, 后来把的值改成了请求就可以正常调用了.

galoiszhou的博客 527

rk3399_android7.1关于secureboot操作说明

首先确保硬件上有接efuse的相关部分电路,给efuse供电: 1、使用SecureBootTool.exe工具生成 RSA KEY(privateKey.bin和publicKey.bin文件),这里rk3399使用的是SecureBootTool v1.85版本,每款机器只生成一次,因此要特别注意保存好,以后签名都只用这对 KEY,建议最好再备份一次,避免丢失,目前做法是保存在SDK代码dev...

Android/Linux驱动开发传帮带学习,让驱动入门门槛更低! 6771

大模型的安全发展与安全治理

2022 年底,OpenAI 推出的 ChatGPT 在文本生成领域实现了重大突破,引领了大模型技术的发展方向,推动了各式各样的基座大模型及行业大模型的发展,并逐步向多模态和具身化方向迅速演进。显然,大模型展现出的强大能力为人工智能通用化揭开了序幕。然而,大模型技术的安全性也面临着生成内容的安全性、伦理道德等重大挑战。只有积极确保大模型的安全性,才能更有效地推动其持续发展,进而更好地应对大模型技术变革所带来的机遇与挑战。

qq_41432686的博客 2583

RK3399教程:wifi驱动调试技巧

疑问点? Android hal层需要配置那些东西? rk3399的wifi模组自适应支持多款wifi是什么技术原理? wpa_supplicant需要配置那些东西? 回答上面的问题我们需要一步一步往下看。 什么是VID和PID? 答:VID为厂商,PID为产品ID。 硬件接口 单wifi硬件接口 在嵌入式中wifi功能在SOC中有两种方式,一种是集成在SOC当中,芯片代表有MTK和高通的芯片,因为这两家芯片厂商的通讯技术都比较厉害所以一般都会在他们自己的SOC中添加WIFI的模块,从而降低成本和降低板子的

qq_27809619的博客 1万+

机床联网系列总结

总结机床联网专栏,两个好用的工具介绍,以及后续提升的方法和建议。

若云流风的专栏 933

beegfs源码分析

BeeGFS的客户端是由一个内核模块和两个系统服务组成的,这里咱们主要分析内核模块。由于BeeGFS的目录树解析,是在父目录DEntry里找子目录或文件DEntry,逐级迭代完成的,所以在Mount文件系统时,须要从管理节点获取根元数据节点的ID,而后再向根元数据节点查询根目录的DEntry的信息,为后续的目录解析打下基础。获取类似/data/beeond/data/dentries/38/51/root/#fSiDs#/文件fileId的父路径。1.1 FileID的生成。Session网络消息。

wfzy的博客 1913

RK芯片-根据SN码选择dtb启动

通常硬件设计会经常更新版本和⼀些元器件,⽐如:屏幕、wifi 模组等。如果每⼀个硬件版本都要对应⼀套软件,维护起来就⽐较⿇烦。所以需要 HW_ID 功能实现⼀套软件可以适配不同版本的硬件。针对不同硬件版本,软件上需要提供对应的 dtb ⽂件,同时还要提供 ADC/GPIO 硬件唯⼀值⽤于表征当前硬件版本(⽐如:固定的 adc 值、固定的某 GPIO 电平)。

Yongheng6的博客 1165

AMD机密计算虚拟机介绍

AMD机密计算虚拟机介绍

木简熙的博客 524

Rockchip RK3288型号获取

Platform:Android 5.1 Rockchip RK3288系列也分了好几个型号,这里主要区分:RK3288和RK3288W 本文主要介绍两者之间型号的获取与区分,通过以下方式: 封装丝印 代码 adb或串口 封装丝印 RK3288和RK3288W的封装丝印是有区别的,主要通过丝印后缀来判断。 RK3288 RK3288封装丝印 RK3288W ...

HelloBirthday的博客 8248

C++(Qt)软件调试---静态分析工具clang-tidy(18)

现在很多人在开发中完全忽略了编译器、IDE的警告提示,这怎么可能写出稳定的程序。 clang-tidy是一个由LLVM项目提供的开源工具,是一个静态分析工具,用于进行静态代码分析和代码质量改进。

mahuifa的博客 5080

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

关于Secureboot的简单介绍[结合rk平台]

secure boot目的 secure boot方案对系统软件采用签名认证的方式,在设备出厂前对设备操作系统的Image文件进行签名认证,并将公钥的Hash值写入芯片的一次性可编程模块。由于不同文件计算得到的Hash值不同,采用secure boot方案的设备每次启动时都会先校验系统的Hash值,即和芯片内的Hash值进行比较,然后对签名images的一级一级校验,实现从设备芯片到系统软件的链式...

Android/Linux驱动开发传帮带学习,让驱动入门门槛更低! 2万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

rk3568 安卓11 修改android id

android id跟着IMEI变化。系统应用获取的android id。android id跟着sn变化。

一个不知名的Android工程师 920

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Rockchip 以太网配置

通常,每个以太网设备只有唯一的 MAC 地址,所以需要有一个地方用来存储这个唯一的地址, 同时在打开以太网时读取出这个地址,并写入。其次 EEPROM 的驱动见 drivers/staging/rk29/eeprom,根据不同型号请自行作相应修改。分区的一个文件中,以太网打开时,读取该文件中的地址。控制,若使用其中一种,则屏蔽另外一种。已打开,其次要使用烧写工具将地址写入,烧写工具在 SDK。地址必须是唯一的,所以请考虑使用这种方法的风险性。地址必须是唯一的,所以请考虑使用这种方法的风险性。

leikko的博客 2736

RK3568 Android12 RK628编译报错问题

解决一个RK628编译时的报错问题

Terry的笔记本 5123

RK3399 探索之旅 / 设备树速读 / Soc 基础设施

哈喽,老吴又来分享学习心得啦。目前,我已经从 hardware enable 工程师升级为 dts 工程师了。1. 简介思考一下,bringup 一款 Soc 的最小操作包括哪些?添加 ...

嵌入式Hacker 2238

迅为瑞芯微itop3399开发板Android8系统wifi移植

1 WiFi 基础知识 WiFi 是当今使用最广泛的一种无线网络技术之一,广泛应用与广告机,投影仪,智能家居,智能门禁,智能音箱,智能手机等智能联网设备之中,为了加速产品设计,大部分都是以 wifi 模块来应用的。市场上WiFi 模块的型号很多,不同的应用场景对 wifi 模块的功能要求不同,有的只需要点对点数据传输,有的需要在线播放视频,音乐,在线互动,所以通常会从功能上将 wifi 模块分为俩大类:通用型WIFI模块,透传型 WIFI 模块。如下图所示: 通用型 wifi 模块:比如手机,笔..

mucheni的博客 4284

[RK3288][Android6.0] WiFi的驱动初始化过程小结

Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 用的是AP6335, SDIO接口。 电源相关部分: rfkill_wlan_init -> rfkill-waln.c   platform_driver_register -> //platform_driver是rfkill_wlan_driver, name是wlan-

Kris Fei's blog 7212

Firefly RK3399 - WIFI AP6356驱动

之前,我成功地为RK3399移植了U-Boot 2023.07、Linux 5.2.8内核以及Ubuntu 20.04.4的根文件系统。为了开发板的网络连接能力,本文章移植WIFI模块AP6356的驱动程序。在此,我将记录下整个学习和移植过程,以便于日后回顾和复习。同时,我也希望这些记录能够为其他正在进行类似工作的学习者提供一定的参考和帮助。

weixin_62772433的博客 3349

20230129在AIO-3568J开发板在原厂Android11下跑通6275s

lrwxrwxrwx 1 rootroot rootroot 50 1月 12 08:40 non_debuggable.config -> ../../configs/r/android-4.19/non_debuggable.config。lrwxrwxrwx 1 rootroot rootroot 43 1月 12 08:40 android-11-go.config -> ../../configs/rockchip/android-11-go.config。

南岭笑笑生之家 2776

RK3399调试支持以太网

以太网支持

xierong1的博客 2640

RK3288 Android5.1 RTL8723DS WIFI/BT模块移植 以及AP6XXX模块与RTL8723DS模块做兼容

瑞芯微对RK3288Android7.1的SDK已经集成了RTL8723DS的模块并做了wifi模块的兼容,但是android5.1并没有集成8723ds的模块,所以介绍下rtl8723ds在rk3288android5.1上的移植步骤。 1.打上如下patch diff --git a/device/common/bluetooth/libbt_rtk8723bs/src/hardware.c b/device/common/bluetooth/libbt_rtk8723bs/src/hardw..

Mrdeath的博客 5964
上一篇: 跳转到设置子项,并显示返回按钮
下一篇: recovery升级系统时挂载cache分区失败
D00PING
博客等级 码龄12年 96粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值