完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
Platform:Android 5.1
Rockchip RK3288系列也分了好几个型号,这里主要区分:RK3288和RK3288W 本文主要介绍两者之间型号的获取与区分,通过以下方式:
封装丝印 RK3288和RK3288W的封装丝印是有区别的,主要通过丝印后缀来判断。 RK3288 RK3288封装丝印 RK3288W RK3288W封装丝印 两者区别在Subcontractor Code末尾有无W。有W的就是RK3288W。 代码 RK提供了API判断当前SoC型号,API如下: bool soc_is_rk3288(void) bool soc_is_rk3288w(void) 其原型位于include/linux/rockchip/cpu.h中,如下: #ifdef CONFIG_ARM #define ROCKCHIP_SOC(id, ID) static inline bool soc_is_rk##id(void) { return (rockchip_soc_id & ROCKCHIP_SOC_MASK) == ROCKCHIP_SOC_RK ##ID; } #else #define ROCKCHIP_SOC(id, ID) static inline bool soc_is_rk##id(void) { return false; } #endif ROCKCHIP_SOC(2926, 2926) ROCKCHIP_SOC(2928g, 2928G) ROCKCHIP_SOC(2928l, 2928L) ROCKCHIP_SOC(3028a, 3028A) ROCKCHIP_SOC(3026, 3026) ROCKCHIP_SOC(3126, 3126) ROCKCHIP_SOC(3126b, 3126B) ROCKCHIP_SOC(3128, 3128) ROCKCHIP_SOC(3036, 3036) ROCKCHIP_SOC(3000, 3000) ROCKCHIP_SOC(3066, 3066) ROCKCHIP_SOC(3068, 3068) ROCKCHIP_SOC(3066b, 3066B) ROCKCHIP_SOC(3168, 3168) ROCKCHIP_SOC(3028, 3028) ROCKCHIP_SOC(3188, 3188) ROCKCHIP_SOC(3188plus, 3188PLUS) ROCKCHIP_SOC(3190, 3190) ROCKCHIP_SOC(3288, 3288) ROCKCHIP_SOC(3288w, 3288W) 这里有个宏ROCKCHIP_SOC,一个经典用法预处理宏##的拼接。 例如ROCKCHIP_SOC(3288w, 3288W),会将第一个参数3288w拼接到函数末尾soc_is_rk3288w,在其返回函数中,将第二个参数拼接,拼接为ROCKCHIP_SOC_RK3288W,一个完整的示例: static inline bool soc_is_rk3288w(void) { return (rockchip_soc_id & ROCKCHIP_SOC_MASK) == ROCKCHIP_SOC_RK3288W; } rockchip_soc_id:芯片ID。在kernel启动时I/O静态映射过程中指定,RK3288系列首先赋值为ROCKCHIP_SOC_RK3288,然后会读取HDMI Revision是否是0x1A,是的话将该值赋值为ROCKCHIP_SOC_RK3288W #define ROCKCHIP_SOC_RK3288W (ROCKCHIP_CPU_RK3288 | 0x01) #define ROCKCHIP_CPU_RK3288 0x32880000 ROCKCHIP_SOC_MASK: #define ROCKCHIP_SOC_MASK (ROCKCHIP_CPU_MASK | 0xff) #define ROCKCHIP_CPU_MASK 0xffff0000 总结 调用soc_is_rk3288(),返回true表示该soc是RK3288,返回false表示该soc不是RK3288。 调用soc_is_rk3288w(),返回true表示该soc是RK3288W,返回false表示该soc不是RK3288W。 adb或串口 RK提供了sys文件接口来获取soc型号,接口是: /sys/devices/system/cpu/soc 在串口控制台或adb环境下cat该文件即可得到soc型号,例如返回”RK3288”,即表示该SoC是RK3288 该sys接口的实现位于arch/arm/mach-rockchip/cpu.c中: static ssize_t soc_show(struct device *dev, struct device_attribute *attr, char *buf) { const char *soc; if (soc_is_rk3288()) soc = "rk3288"; else if (soc_is_rk3288w()) soc = "rk3288w"; else if (soc_is_rk3190()) soc = "rk3190"; else if (soc_is_rk3188plus()) soc = "rk3188+"; else if (soc_is_rk3188()) soc = "rk3188"; else if (soc_is_rk3168()) soc = "rk3168"; else if (soc_is_rk3028()) soc = "rk3028"; else if (soc_is_rk3066b()) soc = "rk3066b"; else if (soc_is_rk3028a()) soc = "rk3028a"; else if (soc_is_rk3026()) soc = "rk3026"; else if (soc_is_rk2928g()) soc = "rk2928g"; else if (soc_is_rk2928l()) soc = "rk2928l"; else if (soc_is_rk2926()) soc = "rk2926"; else if (soc_is_rk3066()) soc = "rk3066"; else if (soc_is_rk3068()) soc = "rk3068"; else if (soc_is_rk3000()) soc = "rk3000"; else if (soc_is_rk3126() || soc_is_rk3126b()) soc = "rk3126"; else if (soc_is_rk3128()) soc = "rk3128"; else soc = ""; return sprintf(buf, "%sn", soc); } 该函数中共提供了两个功能:SoC和Type,且只提供了show方法。 SoC即为具体的芯片型号,而Type表示芯片系列。 比如在我的平台上分别获取SoC和Type,结果如下: cat /sys/devices/system/cpu/soc rk3288w cat /sys/devices/system/cpu/type rk3288 更新 rk也提供了prop来获取CPU型号,可读取ro.rk.soc,如下: getprop | grep soc [ro.rk.soc]: [rk3288w] 总结 通过这几种方式都可以获取主控型号,在驱动处理或者打补丁时可做区分。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
rk1126实现BT601输入,输入不带IIC接口的驱动程序
1196 浏览 0 评论
1203 浏览 1 评论
2296 浏览 3 评论
RK3568 Android11让系统ntp校准时间生效,需要设置些什么
3058 浏览 1 评论
5061 浏览 2 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-16 22:46 , Processed in 0.465874 second(s), Total 44, Slave 36 queries .
Powered by 电子发烧友网
© 2015 www.ws-dc.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号