全志A133 android10 支持AVB

一,AVB简介

Android Verified Boot (AVB) 是一种用于确保Android设备软件完整性和安全性的机制。它通过在设备启动时验证操作系统及其组件的完整性,来防止恶意软件或未经授权的软件篡改。AVB在引导过程中依次验证每个分区,确保其未被篡改。以下是AVB机制的详细介绍:

1. AVB工作原理

a.引导加载程序阶段:
Bootloader:设备启动时,首先由引导加载程序(bootloader)运行。bootloader是设备上最早运行的软件,它负责加载并启动操作系统。AVB集成在bootloader中,bootloader在启动时会首先检查设备的完整性。
阶段1验证:bootloader验证自身的完整性,确保自己未被篡改。
阶段2验证:bootloader验证下一个要加载的组件,如boot分区、recovery分区等。验证通过后,才会继续引导。

b.分区验证:
分区签名:每个被保护的分区都包含一个签名。签名是由设备制造商使用私钥对分区内容进行签名生成的,只有拥有对应公钥的设备才能验证签名。
验证步骤:bootloader读取要加载分区的内容,并使用嵌入的公钥验证其签名。验证通过,则认为分区未被篡改,继续引导。验证失败,则引导过程终止或进入恢复模式。

c.公钥和证书:
公钥嵌入:AVB机制需要使用公钥验证分区的签名,这些公钥通常嵌入在bootloader中或存储在设备的安全存储区域。
证书链:AVB支持使用证书链来管理公钥,允许设备制造商定期更新密钥和证书。

2.AVB的实现

dm-verity:AVB常结合dm-verity(device-mapper verity)使用,dm-verity是Linux内核模块,通过在块设备层面提供只读透明的校验来保护文件系统。

3. AVB版本:

AVB 1.0:提供基本的分区验证功能。
AVB 2.0:引入更多特性和改进,包括动态分区支持和增强的错误处理。

4. AVB的优势

防篡改:通过验证引导和分区的完整性,防止未经授权的修改和恶意软件的安装。
增强安全性:确保设备上运行的软件都是经过设备制造商认证的版本,提升设备的整体安全性。
保护用户数据:结合dm-verity,确保用户数据所在分区的完整性和不可篡改性。


二,AVB配置步骤

1. 内核打开avb配置

源码路径:longan/kernel/linux-4.9/arch/arm64/configs/sun50iw10p1smp_a100_android_defconfig

CONFIG_DM_VERITY_AVB=y
CONFIG_DM_ANDROID_VERITY_AT_MOST_ONCE_DEFAULT_ENABLED=y

2. dts去掉super和recovery

源码路径:longan/kernel/linux-4.9/arch/arm64/boot/dts/sunxi/sun50iw10p1.dtsi

diff --git a/longan/kernel/linux-4.9/arch/arm64/boot/dts/sunxi/sun50iw10p1.dtsi b/longan/kernel/linux-4.9/arch/arm64/boot/dts/sunxi/sun50iw10p1.dtsi
index ef4cbbac3a..a4b994aacb 100755
--- a/longan/kernel/linux-4.9/arch/arm64/boot/dts/sunxi/sun50iw10p1.dtsi
+++ b/longan/kernel/linux-4.9/arch/arm64/boot/dts/sunxi/sun50iw10p1.dtsi
@@ -113,7 +113,7 @@


                        vbmeta {
                                compatible = "android,vbmeta";
-                               parts = "vbmeta,vbmeta_system,vbmeta_vendor,boot,super,recovery";
+                               parts = "vbmeta,vbmeta_system,vbmeta_vendor,boot";
                        };
                };
                optee {

3. 安卓方案fstab文件中添加avb配置

源码路径:android/devicesoftwinner/ceres-b6/fstab.sun50iw10p1

diff --git a/fstab.sun50iw9p1 b/fstab.sun50iw9p1
index 62f40bb..95bb2b0 100755
--- a/fstab.sun50iw10p1
+++ b/fstab.sun50iw10p1
@@ -2,7 +2,7 @@
# The filesystem that contains the filesystem checker binary (typically /system) cannot
# specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK
#<src>                                                 <mnt_point>  <type>   <mnt_flags and options>      <fs_mgr_flags>
-system                                                 /system      ext4     ro,barrier=1                 wait,first_stage_mount,logical,slotselect
+system                                                 /system      ext4     ro,barrier=1                 wait,first_stage_mount,logical,slotselect,avb=vbmeta,avb_keys=/avb/q-gsi.avbpubkey:/avb/r-gsi.avbpubkey:/avb/s-gsi.avbpubkey
vendor                                                 /vendor      ext4     ro,barrier=1                 wait,first_stage_mount,logical,slotselect
product                                                /product     ext4     ro,barrier=1                 wait,first_stage_mount,logical,slotselect
/dev/block/by-name/UDISK                               /data        f2fs     noatime,nosuid,nodev,discard wait,check,formattable,quota,reservedsize=33554432

4. 验证信息

开启后编译烧录固件,可在debug串口看见uboot阶段打印如下:
在这里插入图片描述

<think>好的,我现在需要帮助用户解决全志A133芯片在Android 10系统上横屏显示的问题。首先,我需要回忆之前学过的相关知识,特别是关于全志平台屏幕配置的方法。 用户提到了几个引用,其中引用[1]是关于适配触摸屏的,引用[2]提到了修改sys_config.fex文件,引用[3]是关于屏幕旋转的build.prop配置。我需要把这些信息结合起来。 首先,横屏显示通常涉及显示方向和触摸校准两个方面。根据全志平台的常见配置方法,sys_config.fex文件中的屏幕参数设置是关键。用户提供的引用[2]提到了这个文件的路径,可能需要修改screen_width和screen_height的值,或者调整旋转参数如lcd_rotation。例如,将分辨率从1366x768改为768x1366可能适用于横屏,但需要确认硬件支持。 接下来,引用[3]中提到在build.prop中加入ro.sf.hwrotation属性,比如设置为90度旋转。这应该也是必要的一步,但需要确保系统服务支持这个属性,并且可能影响应用程序的布局。 另外,触摸屏的校准也很重要,引用[1]是关于触摸屏驱动的适配,可能需要检查触摸屏的坐标是否与旋转后的屏幕匹配。可能需要调整触摸驱动参数或使用工具校准。 可能的步骤是: 1. 修改sys_config.fex中的屏幕分辨率和旋转参数。 2. 更新build.prop中的旋转属性。 3. 校准触摸屏,确保触摸输入与显示方向一致。 还需要注意不同版本SDK路径的差异,用户需要根据实际路径调整。此外,可能需要重新编译系统镜像并刷机测试,这会有一定的风险,建议用户备份数据。 用户的问题可能涉及这些步骤中的遗漏或错误配置,需要逐一检查。例如,是否修改了正确的配置文件,参数是否正确,以及是否重新打包和烧录了固件。同时,不同硬件版本可能有不同的配置方式,需要参考具体的文档或社区经验。</think>针对全志A133 Android 10横屏显示问题,需通过系统参数调整和固件配置实现。以下是具体操作步骤: ### 一、屏幕方向基础配置 1. **修改sys_config.fex显示参数** - 路径:`/lichee/tools/pack/chips/sun8iw5p1/configs/vstar/sys_config.fex` - 关键参数调整: ```ini [lcd0_para] lcd_x = 768 # 原1366调整为物理横屏宽度 lcd_y = 1366 # 原768调整为物理竖屏高度 lcd_rotation = 0 # 可选0/90/180/270,需配合硬件排线方向[^2] ``` - 注意:若硬件排线已固定方向,需优先设置`lcd_rotation`参数 2. **Android层强制旋转** - 修改`system/build.prop`文件: ```properties ro.sf.hwrotation=90 # 可设置0/90/180/270度系统级旋转[^3] ``` ### 二、触摸屏校准(必选步骤) ```diff # 修改触摸驱动参数 [ctp_para] ctp_screen_max_x = 1366 # 保持与逻辑分辨率一致 ctp_screen_max_y = 768 # 实际显示方向改变时需交换数值 ctp_revert_x_flag = 1 # X轴镜像翻转 ctp_revert_y_flag = 1 # Y轴镜像翻转 ``` 需通过`getevent`工具验证触摸坐标与显示区域的映射关系[^1] ### 三、系统服务适配 1. 在`frameworks/base/services/core/java/com/android/server/wm/DisplayRotation.java`中检查方向锁定逻辑: ```java // 确保未设置强制竖屏标志 Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.USER_ROTATION_LOCKED, 0) == 0; ``` 2. SurfaceFlinger配置检查: ```shell adb shell dumpsys SurfaceFlinger | grep "Display orientation" ``` ### 四、固件更新流程 1. 修改后执行打包命令: ```bash cd /lichee && ./build.sh -p sun8iw5p1_android -b vstar pack ``` 2. 使用PhoenixSuit工具烧录新固件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值