获取处理器硬件信息

تم الإنشاء في: ٦ ديسمبر ٢٠٢٤

تمت الإجابة باستخدام O1 بواسطة Chat01

سؤال

Android 13如何获取 处理器硬件信息,如三星note10的硬件名universal9825 是如何从系统中获取的

الفكرة

Gathering processor data

I’m gathering info on Android 13 to pinpoint processor hardware details like the Samsung Note 10's universal9825. This includes checking /proc/cpuinfo, vendor keys, and sysfs, and considering methods like 'adb shell getprop ro.hardware'.

Exploring chip identification

I’m detailing how Samsung devices might identify the universal chip, often found in ro.chipname or ro.board.platform. This includes examining /proc/device-tree/compatible, /sys/firmware/devicetree/base/compatible, and custom properties.

Thought about 获取Android硬件信息 for 5 seconds

الإجابة

在 Android 13 以及现代 Android 设备上,获取底层处理器硬件名称(如三星 Note10 的 Exynos "universal9825")的方式与过去(如 Android 7/8)相比有了较大改变。传统上读取 /proc/cpuinfo 文件或许可以直接看到 "Hardware: universalXXXX" 这种标识,但近些年的变化(特别是 Treble 架构、权限和隔离策略的加强)导致许多直接从 /proc/sys 文件系统读取的老方法受限,或者信息不再明显提供。

以下是几种可尝试的方法和信息来源:

1. 通过系统属性(System Properties)

许多设备厂商会将 SoC 的名称、平台信息存放在系统属性中。你可以在已解锁调试的设备上通过 ADB 来查看相关属性。例如:

text
adb shell getprop | grep -i "soc" adb shell getprop | grep -i "chip" adb shell getprop | grep -i "platform"

在三星设备上,一些常见属性键值可能为:

  • ro.chipname
  • ro.soc.name
  • ro.vendor.soc.name
  • ro.board.platform

这些属性中有可能包含类似 "universal9825" 的字样。

2. 访问 /proc/cpuinfo 与 /sys 目录

在较新的 Android 版本中,/proc/cpuinfo 中的 Hardware 字段可能被隐藏或移除。如果你的设备仍然能在 /proc/cpuinfo 中看到硬件信息,可通过以下命令查看:

adb shell cat /proc/cpuinfo

寻找 "Hardware" 字段。但在许多 Android 10+ 的设备中,该字段可能只显示通用信息(如 "aarch64"),不再提供 SoC 具体型号。

有时,厂商定制信息可能出现在 /sys 下的某些特定节点,比如:

text
adb shell ls /sys/devices/soc0 adb shell cat /sys/devices/soc0/family adb shell cat /sys/devices/soc0/machine adb shell cat /sys/devices/soc0/platform_subtype_id adb shell cat /sys/devices/soc0/hardware_version

不同设备可能存在不同的节点,需要一定程度的探索。

3. 使用厂商定制的库或属性

某些 OEM(如三星)可能会在其定制的框架、HAL 层或 Vendor 分区中提供特定接口或属性文件来描述当前的 SoC 型号。如果是对 ROM 进行研究或逆向工程,则可在 /vendor/build.prop 或相关 vendor 属性文件(/vendor/default.prop/odm/build.prop)查找包含 "universal9825" 字样的属性。例如:

adb shell cat /vendor/build.prop | grep universal

4. 使用专用 API(Android 13+)

在较新的 Android 版本中,Google 对硬件信息获取限制更多是出于安全与隐私考虑。在原生 API 中,Build.SOC_MODELBuild.SOC_MANUFACTURER(仅在高 API level 的设备存在)等字段有可能提供有限的官方信息。

示例(Java/Kotlin 代码片段):

java
if (android.os.Build.VERSION.SDK_INT >= 31) { // Android 12及以上 String socManufacturer = Build.SOC_MANUFACTURER; String socModel = Build.SOC_MODEL; // 可能会返回类似 "Samsung" 以及 "Exynos 9825" 之类的字符串 }

注意,这些字段在不同设备和厂商定制ROM上表现不一,可能为空或通用值。

总结

  • 最直接方法:查看 getprop 中相关属性(如 ro.soc.name)。
  • 辅助方法:在受限情况下尝试 /proc、/sys 下的文件,但在 Android 13上往往信息不直观。
  • 原生API(Build常量):在更高等级的 Android API 中可能提供一定的帮助。

在实际设备(如三星 Note10)上,通常可以通过 getprop 命令快速找到包含 "universal9825" 的属性值。

سؤال

用哪些方法可以获取note10中 “Samsung Galaxy Note10” 的设备名

الفكرة

Finding device name

I'm gathering info to pinpoint "Samsung Galaxy Note10" on Android devices. This involves fetching system properties like ro.product.model or ro.product.marketname using ADB commands or Build properties.

Thought about retrieving device name in Note10 for a few seconds

الإجابة

要在 Samsung Galaxy Note10 上获取类似于 "Samsung Galaxy Note10" 的设备市场名称(marketing name),可以尝试以下几种方法:

方法一:查看系统属性(System Properties)

从 Android 11 开始,Google 引入了 ro.product.marketname 属性,用于标识设备的市场名称。对于三星设备,常常也会有 ro.config.marketing_name 这一属性。你可以通过 ADB 命令获取这些属性。

bash
adb shell getprop ro.product.marketname adb shell getprop ro.config.marketing_name

如果上述命令返回了 "Samsung Galaxy Note10" 或类似的字符串,即可得到设备的市场名称。

其他可能的属性还包括:

bash
adb shell getprop ro.product.model adb shell getprop ro.product.brand adb shell getprop ro.product.vendor.marketname

虽然 modelbrand 通常返回的是机型代码(如 "SM-N970F")和品牌名称("samsung"),但不会直接给出类似 "Galaxy Note10" 的友好名称。

方法二:Java/Kotlin 代码调用

在应用中,你可以使用 Build 类读取相关字段。当然,Build.MODEL 常常只能得到类似 "SM-N970F" 的型号代码,而非完整的市场名称。但在新的设备和定制 ROM 上,Build.MODEL 有时可能直接返回产品名称。

java
String model = Build.MODEL; // 通常为 "SM-N970F"

同时,设备供应商可能在系统属性中存有市场名称,可通过 Android 原生的 System Properties API(仅限有访问权限的场景)获取,如:

java
// 需要使用反射或特定权限来调用android.os.SystemProperties String marketName = SystemProperties.get("ro.product.marketname"); String marketingName = SystemProperties.get("ro.config.marketing_name");

方法三:查看 /vendor 或 /system 中的属性文件

在一些设备上,/system/build.prop/vendor/build.propadb shell cat /vendor/build.prop | grep marketing_name 中可能存有 ro.config.marketing_name 属性,可以通过上述方法间接获得。


总结
在三星 Galaxy Note10 上最为直接的方法是使用 ADB 命令查询 ro.product.marketnamero.config.marketing_name 系统属性,通常就能直接得到 "Samsung Galaxy Note10" 这种完整的市场名称。

مشاركة هذا السؤال والجواب