1 分钟阅读 次阅读

概要:本文记录了在 Android 11(RK3568)平台上,由于 data 分区文件系统从 f2fs 修改为 ext4,导致系统启动卡在 Android logo 的问题。通过分析 logcat 报错信息和对比 fstab 配置文件的修改,最终定位并解决问题的方法是修改当前编译版型对应的 recovery.fstab 文件。

1. 环境

  • Android 版本:11
  • 芯片平台:RK3568

2. 问题背景

应用 commit f5b127(将 data 分区从 f2fs 修改为 ext4)后,发现系统启动卡在 Android logo 动画界面。

查看 logcat,发现如下关键错误信息:

Abort message: 'Check failed: chdir(data_dir.c_str()) != -1 chdir: /data/misc/credstore: No such file or directory'

错误信息提示找不到 /data/misc/credstore 目录。


3. 解决过程

推测该问题与修改 data 分区文件系统有关。具体修改内容如下:

git --no-pager diff 7d5b55 f5b127
diff --git a/device/rockchip/common/scripts/fstab_tools/fstab.in b/device/rockchip/common/scripts/fstab_tools/fstab.in
index 04e3c9493b..2f3c58d025 100755
--- a/device/rockchip/common/scripts/fstab_tools/fstab.in
+++ b/device/rockchip/common/scripts/fstab_tools/fstab.in
@@ -23,11 +23,12 @@ ${_block_prefix}system_ext /system_ext  ext4 ro,barrier=1 ${_flags},first_stage_
 /devices/platform/${_sdmmc_device}/mmc_host*        auto  auto    defaults        voldmanaged=sdcard1:auto
 #  Full disk encryption has less effect on rk3326, so default to enable this.
 #/dev/block/by-name/userdata /data f2fs noatime,nosuid,nodev${_sync_flags},discard,reserve_root=32768,resgid=1065 latemount,wait,check,keydirectory=/metadata/vold/metadata_encryption,quota,formattable,reservedsize=128M,checkpoint=fs
-/dev/block/by-name/userdata /data f2fs noatime,nosuid,nodev,discard,reserve_root=32768,resgid=1065,fsync_mode=nobarrier latemount,wait,check,fileencryption=aes-256-xts:aes-256-cts:v2+inlinecrypt_optimized,keydirectory=/metadata/vold/metadata_encryption,quota,formattable,reservedsize=128M,checkpoint=fs
+#/dev/block/by-name/userdata /data f2fs noatime,nosuid,nodev,discard,reserve_root=32768,resgid=1065,fsync_mode=nobarrier latemount,wait,check,quota,formattable,reservedsize=128M,checkpoint=fs
 
 # for ext4
 #/dev/block/by-name/userdata /data ext4 discard,noatime,nosuid,nodev${_sync_flags},noauto_da_alloc,data=ordered,user_xattr,barrier=1    latemount,wait,formattable,check,quota,reservedsize=128M,checkpoint=block
 #/dev/block/by-name/userdata    /data      ext4    discard,noatime,nosuid,nodev${_sync_flags},noauto_da_alloc,data=ordered,user_xattr,barrier=1    latemount,wait,formattable,check,quota,reservedsize=128M,checkpoint=block
+/dev/block/by-name/userdata    /data      ext4    discard,noatime,nosuid,nodev${_sync_flags},noauto_da_alloc,data=ordered,user_xattr,barrier=1    latemount,wait,formattable,check,quota,reservedsize=128M,checkpoint=block
 
 
 #nklogo
diff --git a/device/rockchip/common/scripts/fstab_tools/fstab_go.in b/device/rockchip/common/scripts/fstab_tools/fstab_go.in
index ef331a21da..7d518b29ac 100755
--- a/device/rockchip/common/scripts/fstab_tools/fstab_go.in
+++ b/device/rockchip/common/scripts/fstab_tools/fstab_go.in
@@ -17,10 +17,11 @@ ${_block_prefix}system_ext  /system_ext ext4 ro,barrier=1 ${_flags},first_stage_
 /devices/platform/${_sdmmc_device}/mmc_host*        auto  auto    defaults        voldmanaged=sdcard1:auto
 #  Full disk encryption has less effect on rk3326, so default to enable this.
 #/dev/block/by-name/userdata /data f2fs noatime,nosuid,nodev,discard${_sync_flags},reserve_root=32768,resgid=1065 latemount,wait,check,fileencryption=aes-256-xts:aes-256-cts:v2+inlinecrypt_optimized,keydirectory=/metadata/vold/metadata_encryption,quota,formattable,reservedsize=128M,checkpoint=fs
-/dev/block/by-name/userdata /data f2fs noatime,nosuid,nodev,discard,reserve_root=32768,resgid=1065i,fsync_mode=nobarrier latemount,wait,check,fileencryption=aes-256-xts:aes-256-cts:v2+inlinecrypt_optimized,keydirectory=/metadata/vold/metadata_encryption,quota,formattable,reservedsize=128M,checkpoint=fs
+#/dev/block/by-name/userdata /data f2fs noatime,nosuid,nodev,discard,reserve_root=32768,resgid=1065i,fsync_mode=nobarrier latemount,wait,check,fileencryption=aes-256-xts:aes-256-cts:v2+inlinecrypt_optimized,keydirectory=/metadata/vold/metadata_encryption,quota,formattable,reservedsize=128M,checkpoint=fs
+
 
 # for ext4
-#/dev/block/by-name/userdata    /data      ext4    discard,noatime,nosuid,nodev,noauto_da_alloc${_sync_flags},data=ordered,user_xattr,barrier=1    latemount,wait,formattable,check,fileencryption=software,quota,reservedsize=128M,checkpoint=block
+/dev/block/by-name/userdata    /data      ext4    discard,noatime,nosuid,nodev,noauto_da_alloc${_sync_flags},data=ordered,user_xattr,barrier=1    latemount,wait,formattable,check,quota,reservedsize=128M,checkpoint=block
 
 #nklogo
 /dev/block/by-name/NKLogo    /NKLogo   ext4    discard,noatime,nosuid,nodev,noauto_da_alloc,data=ordered,user_xattr,barrier=1 latemount,wait,formattable,check,fileencryption=software,quota,reservedsize=128M,checkpoint=block
diff --git a/device/rockchip/rk356x/rk3568_HW/recovery.fstab b/device/rockchip/rk356x/rk3568_HW/recovery.fstab
index b83c0ae0a8..a1de5b9d91 100644
--- a/device/rockchip/rk356x/rk3568_HW/recovery.fstab
+++ b/device/rockchip/rk356x/rk3568_HW/recovery.fstab
@@ -9,7 +9,7 @@
 /dev/block/by-name/system_ext            /system_ext          ext4             defaults                  defaults
 /dev/block/by-name/cache                 /cache               ext4             defaults                  defaults
 /dev/block/by-name/metadata              /metadata            ext4             defaults                  defaults
-/dev/block/by-name/userdata              /data                f2fs             defaults                  defaults
+/dev/block/by-name/userdata              /data                ext4             defaults                  defaults
 /dev/block/by-name/cust                  /cust                ext4             defaults                  defaults
 /dev/block/by-name/custom                /custom              ext4             defaults                  defaults
 /dev/block/by-name/radical_update        /radical_update      ext4             defaults                  defaults

可以看到,最后一个修改的文件 device/rockchip/rk356x/rk3568_HW/recovery.fstab 与具体编译版型有关。

如果当前编译使用的版型与该文件不一致,将不会应用该修改,可能导致系统出错。


4. 解决方法

修改当前编译版型所对应的 recovery.fstab 文件,使其 data 分区配置为 ext4,问题即可解决。

参考 commit:

  • 83487e(fix: 提交“data 分区修改为 ext4”导致的卡在 Android logo 问题)

留下评论