AndroidSDK开发常见问题解答

当前kernel和u-boot版本?

Android12.0 对应的kernel版本为:develop-5.10,u-boot的分支为next-dev分支

如何获取当前SDK对应的RK release版本

Rockchip Android12.0 SDK包括AOSP原始代码和RK修改的代码两部分,其中RK修改的仓库包含在.repo/manifests/include目录下面的xml中,AOSP默认的仓库在.repo/manifests/default.xml。

版本确认:

  • RK修改部分

vim .repo/manifests/include/rk_checkout_from_aosp.xml
<project groups="pdk" name="platform/build" path="build/make" remote="rk" revision="refs/tags/android-12.0-mid-rkr1">

说明RK的版本是android-12.0-mid-rkr1

  • AOSP部分

vim .repo/manifests/default.xml
<default revision="refs/tags/android-12.0.0_r2"...>

说明AOSP的版本是android-12.0.0_r2

当需要提供版本信息的时候提供以上两个版本信息即可。

单个仓库可以直接通过如下命令获取tag信息

kernel$ git tag
android-12.0-mid-rkr1
develop-4.4-20190201

RK的版本是以android-12.0-mid-rkrxx的格式递增的,所以当前的最新tag是android-12.0-mid-rkr1

关机充电和低电预充

关机充电和低电预充可以在dts中配置,具体如下:

charge-animation {
    compatible = "rockchip,uboot-charge";
    rockchip,uboot-charge-on = <1>;
    rockchip,android-charge-on = <0>;
    rockchip,uboot-low-power-voltage = <3400>;
    rockchip,screen-on-voltage = <3500>;
    status = "okay";
};

其中:

  • rockchip,uboot-charge-on:uboot关机充电,与android关机充电互斥

  • rockchip,android-charge-on:android关机充电,与uboot关机充电互斥

  • rockchip,uboot-low-power-voltage:配置低电预充到开机的电压,可以根据实际需求进行配置

  • rockchip,screen-on-voltage:配置低电预充到亮屏的电压,可以根据实际需求进行配置

Uboot阶段充电图片打包和替换

充电图片路径,可以直接替换同名文件,格式要求与原文件一样。

u-boot/tools/images/
├── battery_0.bmp
├── battery_1.bmp
├── battery_2.bmp
├── battery_3.bmp
├── battery_4.bmp
├── battery_5.bmp
└── battery_fail.bmp

如果打开uboot充电,但是没有显示充电图片,可能是图片没有打包到resource.img中,可以按如下命令打包

cd u-boot
./scripts/pack_resource.sh../kernel/resource.img
cp resource.img../kernel/resource.img

执行以上命令后uboot充电图片会打包到kernel目录的resource.img中,此时需要再将resource.img打包到boot.img中,可以在android根目录执行./mkiamge.sh,然后烧写rockdev/下面的boot.img即可。

HDMI IN配置

hdmi in功能SDK默认是关闭的,如需打开,按以下操作:

vim device/rockchip/rk3588/BoardConfig.mk
+BOARD_HDMI_IN_SUPPORT := true

RM310 4G配置

4G功能SDK默认是关闭的,如需打开,按以下操作:

vim device/rockchip/common/BoardConfig.mk
#for rk 4g modem
-BOARD_HAS_RK_4G_MODEM ?= false
+BOARD_HAS_RK_4G_MODEM ?= true

WIFI休眠策略配置

wifi默认休眠策略是休眠一直保持连接,如需休眠断开,按以下操作:

--- a/rk3566_rgo/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
+++ b/rk3566_rgo/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
@@ -24,5 +24,5 @@
         You can configure persist.wifi.sleep.delay.ms to delay closing wifi.
         The default is 15 minutes, 0 means that the wifi is turned off
         immediately after the screen is off. -->
-    <integer name="def_wifi_sleep_policy">2</integer>
+    <integer name="def_wifi_sleep_policy">0</integer>
 </resources>

Recovery旋转配置

支持Recovery旋转0/90/180/270度,默认不旋转(即旋转0度),旋转配置说明如下:

vim device/rockchip/common/BoardConfig.mk
#0:  ROTATION_NONE 旋转0度
#90: ROTATION_RIGHT 旋转90度
#180:ROTATION_DOWN 旋转180度
#270:ROTATION_LEFT 旋转270度
# For Recovery Rotation
TARGET_RECOVERY_DEFAULT_ROTATION ?= ROTATION_NONE

Android Surface旋转

Android系统显示旋转,可以修改如下配置,配置参数为0/90/180/270

# For Surface Flinger Rotation
SF_PRIMARY_DISPLAY_ORIENTATION ?= 0

替换 AOSP 部分源代码的 remote

客户下载RK的release代码时速度较慢,可以将AOSP的remote修改为国内镜像源,国外的客户可以修改为Google的镜像源。这样可以提高下载速度。具体操作方法如下:

执行repo init(或者解压base包)后,修改.repo/manifests/remote.xml,把其中的AOSP这个remote的fetch从

<remote name="aosp" fetch="./" review="https://10.10.10.29" />

改为

  • 国内客户: (国内以清华大学镜像源为例,可以根据需要修改为其他国内镜像源)

<remote name="aosp" fetch="https://aosp.tuna.tsinghua.edu.cn" />;
  • 国外的客户: (Google镜像源)

<remote name="aosp" fetch="https://android.googlesource.com" />

Data区读写速率的优化

userdata区文件系统换为EXT4

修改开关机动画和开关机铃声

APP设置性能模式

device/rockchip/rk3xxx/下配置文件: package_performance.xml,在其中的节点中加入需要使用性能模式的包名: (使用aapt dump badging (file_path.apk)获取包名)

<app package="包名" mode="是否启用加速,启用为 1,关闭为 0"/>

例如针对安兔兔的参考如下:

<app package="com.antutu.ABenchMark"mode="1"/>
<app package="com.antutu.benchmark.full"mode="1"/>
<app package="com.antutu.benchmark.full"mode="1"/>

编译时会将文件打包进固件。

GPU相关问题排查方法

参考下面文档,可以做初步的问题排查

RKDocs\android\Rockchip_User_Guide_Dr.G_CN&EN.pdf

OTP和efuse说明

OTP支持芯片

  • RK3326

  • PX30

  • RK3566

  • RK3568

  • RK3588

EFUSE支持芯片

  • RK3288

  • RK3368

  • RK3399

固件签名和otp/efuse烧写参考文档

RKDocs\common\security\Rockchip-Secure-Boot-Application-Note-V1.9.pdf

代码中如何判断设备的OTP/EFUSE是否已经烧写

OTP/EFUSE的状态会通过kernel的cmdline进行传递,cmdline中的fuse.programmed用来标识OTP/EFUSE状态,具体如下:

  • "fuse.programmed=1": 软件固件包已经进行了secure-boot签名,硬件设备的efuse/otp已经被烧写。

  • "fuse.programmed=0": 软件固件包已经进行了secure-boot签名,硬件设备的efuse/otp没有被烧写。

  • cmdline中没有fuse.programmed: 软件固件包没有进行secure-boot签名(Miniloader不传递),或者Miniloader太旧没有支持传递。

开关selinux

如下修改,false为关闭,true为打开

device/rockchip/common$
--- a/BoardConfig.mk
+++ b/BoardConfig.mk
@@ -67,7 +67,7 @@ endif

 # Enable android verified boot 2.0
 BOARD_AVB_ENABLE ?= false
-BOARD_SELINUX_ENFORCING ?= false
+BOARD_SELINUX_ENFORCING ?= true

开机弹出”Android系统出现问题”警告

出现警告框的原因有两种:

  1. 固件不匹配,system/boot/vendor三个fingerprint不一致,不是同一套固件。

  2. 机器打开支持了IO调试功能的config,编译时,使用文档前面所说的内核编译命令即可关闭。

  3. 对于需要使用IO调试功能的项目,可以直接不管上述两种原因,直接合入frameworks/base下的patch去掉弹窗:

diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
index 595c340..d4e495a 100644
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
@@ -6555,7 +6555,7 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
             } catch (RemoteException e) {
             }

-            if (!Build.isBuildConsistent()) {
+            if (0 &&!Build.isBuildConsistent()) {
                 Slog.e(TAG, "Build fingerprint is not consistent, warning user");

                 mUiHandler.post(() -> {
                     if (mShowDialogs) {

如何打开设置中以太网的设置项

系统设置中默认没有以太网设置的选项,如果项目中需要以太网可以按如下配置打开:

--- a/BoardConfig.mk
+++ b/BoardConfig.mk
@@ -146,3 +146,6 @@ endif
 ifeq ($(strip $(BOARD_USES_AB_IMAGE)), true)
 DEVICE_MANIFEST_FILE := device/rockchip/$(TARGET_BOARD_PLATFORM)/manifest_ab.xml
 endif

+# for ethernet
+BOARD_HS_ETHERNET := true

关于AVB和security boot的操作

AVB和security boot的操作参考文档:

RKDocs/common/security/RK356X_SecurityBoot_And_AVB_instructions_CN.pdf

IO命令无法使用

IO命令需要依赖DEVMEM,而DEVMEM默认是关闭的,所以导致IO默认无法使用,如果调试需要使用IO命令可以按如下修改:

对于非GO产品:

wlq@ubuntu:~/rk3588_android12.0/$ vim mkcombinedroot/configs/android-11.config

对于GO产品:

wlq@ubuntu:~/rk3588_android12.0$ vim mkcombinedroot/configs/android-11-go.config

删除掉下面这行:

# CONFIG_DEVMEM is not set

如果要编译Android,则还需要修改如下代码

cd rk3588_android12.0/kernel/configs
diff --git a/android-5.10/android-base.config b/android-5.10/android-base.config
index 5de76f0..6dcd86 100644
--- a/android-5.10/android-base.config
+++ b/android-5.10/android-base.config
@@ -2,7 +2,6 @@
 # CONFIG_ANDROID_LOW_MEMORY_KILLER is not set
 # CONFIG_ANDROID_PARANOID_NETWORK is not set
 # CONFIG_BPFILTER is not set
-# CONFIG_DEVEMEM is not set
 # CONFIG_FHANDLE is not set
 # CONFIG_FW_CACHE is not set
 # CONFIG_IP6_NF_NAT is not set
diff --git a/s/android-4.19/android-base-conditional.xml b/s/android-4.19/android-base-conditional.xml
index c7de80c..fba1afa 100644
--- a/s/android-4.19/android-base-conditional.xml
+++ b/s/android-4.19/android-base-conditional.xml
@@ -17,10 +17,6 @@
         <key>CONFIG_CPU_SW_DOMAIN_PAN</key>
         <value type="bool">y</value>
     </config>
-    <config>
-        <key>CONFIG_DEVKMEM</key>
-        <value type="bool">n</value>
-    </config>
     <config>
         <key>CONFIG_OABI_COMPAT</key>
         <value type="bool">n</value>
@@ -77,10 +73,6 @@
         <value type="bool">y</value>
     </config>
 </conditions>
-<config>
-    <key>CONFIG_DEVKMEM</key>
-    <value type="bool">n</value>
-</config>
 <config>
     <key>CONFIG_PAGE_TABLE_ISOLATION</key>
     <value type="bool">y</value>
diff --git a/s/android-4.19/android-base.config b/s/android-4.19/android-base.config
index d2bb2ad..8f23882 100644
--- a/s/android-4.19/android-base.config
+++ b/s/android-4.19/android-base.config
@@ -2,7 +2,6 @@
 # CONFIG_ANDROID_LOW_MEMORY_KILLER is not set
 # CONFIG_ANDROID_PARANOID_NETWORK is not set
 # CONFIG_BPFILTER is not set
-# CONFIG_DEVEMEM is not set
 # CONFIG_FHANDLE is not set
 # CONFIG_FW_CACHE is not set
 # CONFIG_IP6_NF_NAT is not set
diff --git a/s/android-5.10/android-base-conditional.xml b/s/android-5.10/android-base-conditional.xml
index aae1847..2dc3e25 100644
--- a/s/android-5.10/android-base-conditional.xml
+++ b/s/android-5.10/android-base-conditional.xml
@@ -17,10 +17,6 @@
         <key>CONFIG_CPU_SW_DOMAIN_PAN</key>
         <value type="bool">y</value>
     </config>
-    <config>
-        <key>CONFIG_DEVKMEM</key>
-        <value type="bool">n</value>
-    </config>
     <config>
         <key>CONFIG_OABI_COMPAT</key>
         <value type="bool">n</value>
@@ -101,10 +97,6 @@
         <value type="bool">y</value>
     </config>
 </conditions>
-<config>
-    <key>CONFIG_DEVKMEM</key>
-    <value type="bool">n</value>
-</config>
 <config>
     <key>CONFIG_KFENCE</key>
     <value type="bool">y</value>
diff --git a/s/android-5.10/android-base.config b/s/android-5.10/android-base.config
index d6e1f5a..d7078da 100644
--- a/s/android-5.10/android-base.config
+++ b/s/android-5.10/android-base.config
@@ -2,7 +2,6 @@
 # CONFIG_ANDROID_LOW_MEMORY_KILLER is not set
 # CONFIG_ANDROID_PARANOID_NETWORK is not set
 # CONFIG_BPFILTER is not set
-# CONFIG_DEVEMEM is not set
 # CONFIG_FHANDLE is not set
 # CONFIG_FW_CACHE is not set
 # CONFIG_IP6_NF_NAT is not set

SN号的命令规则

SN号必须以字母开头,长度14个字节以内。

Kernel编译报LZ4的错误

以下为根据图片内容整理的Markdown格式文档:


内核编译报错问题:LZ4版本不兼容

问题描述 编译内核时出现以下错误:

arch/arm/boot/compressed/Makefile:191: recipe for target 'arch/arm/boot/compressed/piggy_data' failed
make[2]: *** [arch/arm/boot/compressed/piggy_data] Error 1
arch/arm/boot/Makefile:7: recipe for target 'arch/arm/boot/compressed/vmlinux' failed
make[1]: *** [arch/arm/boot/compressed/vmlinux] Error 1
Makefile:138: recipe for target 'Image' failed
make: *** [Image] Error 2

关键报错信息

LZ4 command line interface 64-bits v1.8.3, by Yann Collet
refusing to read from a console

提示LZ4命令参数使用错误(要求1.8.3及以上版本)。


问题原因

系统自带的lz4版本过低

wlq@ubuntu:~$ lz4 -v
*** LZ4 command line interface 64-bits v1.8.3, by Yann Collet ***

实际系统版本为v1.8.3,但编译过程中仍报版本不兼容,推测路径优先级问题导致未正确调用高版本


解决方法

使用Android编译生成的高版本lz4覆盖系统默认版本:

# 替换系统lz4
sudo cp out/host/linux-x86/bin/lz4 /usr/bin/lz4

# 验证版本
lz4 -v  # 应显示Android编译的高版本(如v1.9.2+)

操作要点

  1. 路径修正:确保out/host/linux-x86/bin/lz4路径存在(原图路径linux - x86含空格,需修正为linux-x86)。

  2. 权限问题:使用sudo覆盖系统文件。

  3. 版本验证:覆盖后通过lz4 -v确认版本已更新。


注:原图存在部分文字识别错误(如boat应为boot1z4应为lz4),已修正为正确命令和路径。

Android Samba功能

参考文档:

RKDocs/android/Rockchip_Introduction_Android_Samba_CN.pdf

NFS启动

参考文档及补丁:

RKDocs/android/patches/customized_functions/nfs_boot_patch_v1.1.0.zip

多屏异显异触

参考文档:

RKDocs\android\patches\customized_functions\Android11异显开发说明.zip

多屏异声

参考文档:

RKDocs/android/patches/customized_functions/Dual_Audio_v1.0.zip