怎么去建一个网站,赣州企业网站建设公司,顺义公司网站建设,怎么在网站上做游戏代练一.GKI简介
GKI#xff1a;Generic Kernel Image 通用内核映像。 Android13 GMS和EDLA认证的一个难点是google强制要求要支持GKI。GKI通用内核映像#xff0c;是google为了解决内核碎片化的问题#xff0c;而设计的通过提供统一核心内核并将SoC和板级驱动从核心内核移至可加…一.GKI简介
GKIGeneric Kernel Image 通用内核映像。 Android13 GMS和EDLA认证的一个难点是google强制要求要支持GKI。GKI通用内核映像是google为了解决内核碎片化的问题而设计的通过提供统一核心内核并将SoC和板级驱动从核心内核移至可加载模块中。核心内核为驱动模块提供了稳定的内核模块接口模块驱动和核心内核可以独立进行更新。内核接口可以通过upstream的方式进行扩展。 Soc和板级厂商在驱动开发时需要使用已经定义的内核接口如果要新加核心内核接口需要提交给google这个周期会比较长所以要提前做好开发准备。 二.什么产品需要使用GKI
使用Android13且需要过GMS认证和EDLA认证的产品。
使用Android12 的RK3588和RK3588S的需要过GMS认证和EDLA认证的产品。
不过GMS认证和EDLA认证的产品不强制要求使用GKI。 三.碎片化的代价
1.安全更新需要耗费大量人力:
Android 安全公告 (ASB) 中引用的安全补丁程序必须向后移植到每个设备内核中。但是由于存在内核碎片化问题向正常使用的 Android 设备传播安全修复的代价非常之高。
2.很难合并长期支持的更新:
长期支持 (LTS) 版本包含安全修复和其他重大问题修复。事实证明使用最新的 LTS 版本是提供安全修复的最有效方式。我们发现ASB 报告的内核安全问题中有 90% 都已在保持最新状态的 Pixel 设备上得到修复。
3.妨碍 Android 平台进行版本升级
由于碎片化问题很难向正常使用的设备添加需要更改内核的 Android 新功能。Android 框架代码必须假设支持的内核版本多达 5 个并且没有针对新的平台版本进行任何内核更改Android 10 支持内核版本 3.18、4.4、4.9、4.14 和 4.19在某些情况下这些版本自 2017 年 Android 8 发布以来还未添加新功能。
4.很难将内核更改贡献回上游 Linux
对内核进行完所有更改后大多数旗舰设备附带的内核版本已经至少存在 18 个月了。例如kernel.org 于 2017 年 11 月发布了 4.14 版内核而首批使用 4.14 版内核的 Android 手机于 2019 年春季才发布。
上游内核发布与产品发布之间的这种长时间延迟导致 Android 社区很难将所需的功能和驱动程序馈送到上游内核中因此解决碎片化问题并非易事。 四.GKI和非GKI的差别
通用内核boot.img:
GKI非GKI由google定期发布boot.img代码不能自己修改由RK提供内核源码编译可以自由修改
驱动模块:
GKI非GKI以KO的形式加载调用的内核接口必需是google发布的boot.img里面包含的内嵌在boot中由RK提供内核源码编译可以自由修改和添加内核接口
kernel代码:
GKI非GKIRK发布的kernel源码仅用于编译驱动模块的KORK发布的kernel源码用于完整的内核和模块驱动的编译模块以.o的形式内嵌编译 五.Rockchip GKI编译
uboot需要打开AB配置:
~/a2_Android13_sdk/u-boot$ git diff
diff --git a/configs/rk3568_defconfig b/configs/rk3568_defconfig
index fbd9820acc..e23e438792 100644
--- a/configs/rk3588_defconfigb/configs/rk3588_defconfig-207,6 207,7 CONFIG_RSA_N_SIZE0x200
CONFIG_RSA_E_SIZE0x10
CONFIG_RSA_C_SIZE0x20
CONFIG_SHA512y
CONFIG_LZ4y
CONFIG_LZMAy
CONFIG_SPL_GZIPy-220,3 221,4 CONFIG_RK_AVB_LIBAVB_USERy
CONFIG_OPTEE_CLIENTy
CONFIG_OPTEE_V2y
CONFIG_OPTEE_ALWAYS_USE_SECURITY_PARTITIONy
CONFIG_ANDROID_ABy增加板级的KO load文件 Rockchip的GKI框架里面加载KO的load文件有区分芯片平台驱动和板级驱动所以在开发新产品的时候需要增加板级驱动的KO load文件load文件以device下面产品目录中定义PRODUCT_KERNEL_DTS的dts的名字命名并且保存在mkcombinedroot/res/board/下面如
wlqsys2_206:~/a0_Android13_gki$ tree mkcombinedroot/res/board/
mkcombinedroot/res/board/
├── px30-mini-evb-ddr3-v11-avb.load
├── rk3326-863-lp3-v10-rkisp1.load
├── rk3326-evb-lp3-v10-avb.load
├── rk3399-evb-ind-lpddr4-android-avb.load
├── rk3399-evb-ind-lpddr4-v13-android-avb.load
├── rk3562-evb1-lp4x-v10.load
├── rk3562-rk817-tablet-v10.load
├── rk3566-evb2-lp4x-v10.load
├── rk3566-rk817-tablet.load
├── rk3568-evb1-ddr4-v10.load
├── rk3588-evb1-lp4-v10.load
├── rk3588-evb7-lp4-v10.load
└── rk3588s-tablet-v10.load板级的KO load文件里面放的是板级的驱动模块如触摸屏、camera、sensor等芯片平台以为的驱动模块如
wlqsys2_206:~/a0_Android13_gki$ cat mkcombinedroot/res/board/rk3588-evb1-lp4-v10.load
cw2015_battery.ko
imx415.ko
ov50c40.ko
ov13855.ko
gt1x-ts.ko
snd-soc-es8323.koAndroid的device产品目录下配置GKI选项:
~/a2_Android13_sdk/device/rockchip/rk3588$ git diff
diff --git a/rk3588_t/BoardConfig.mk b/rk3588_t/BoardConfig.mk
old mode 100644
new mode 100755
index 50da541..06da5f3
--- a/rk3588_t/BoardConfig.mkb/rk3588_t/BoardConfig.mk-15,10 15,21 #include device/rockchip/rk3588/BoardConfig.mkBUILD_WITH_GO_OPT : false
BOARD_BUILD_GKI : true-# AB image definition
-BOARD_USES_AB_IMAGE : false
-BOARD_ROCKCHIP_VIRTUAL_AB_ENABLE : false
ifeq ($(strip $(BOARD_BUILD_GKI)), true)#for gki# AB image definitionBOARD_USES_AB_IMAGE : trueBOARD_ROCKCHIP_VIRTUAL_AB_ENABLE : truePRODUCT_KERNEL_CONFIG : gki_defconfig rockchip_gki.config
elseBOARD_ROCKCHIP_VIRTUAL_AB_ENABLE : falseBOARD_USES_AB_IMAGE : falsePRODUCT_KERNEL_CONFIG : rockchip_defconfig android-13.config
endifBOARD_GRAVITY_SENSOR_SUPPORT : trueBOARD_COMPASS_SENSOR_SUPPORT : true-26,14 37,21 BOARD_SENSOR_COMPASS_AK8963-64 : trueBOARD_GYROSCOPE_SENSOR_SUPPORT : trueBOARD_PROXIMITY_SENSOR_SUPPORT : trueBOARD_LIGHT_SENSOR_SUPPORT : trueifeq ($(strip $(BOARD_USES_AB_IMAGE)), true)include device/rockchip/common/BoardConfig_AB.mkTARGET_RECOVERY_FSTAB : device/rockchip/rk3588/rk3588_t/recovery.fstab_ABendif
-
ifeq ($(strip $(BOARD_BUILD_GKI)), true)#for gkiBOARD_SUPER_PARTITION_SIZE : 4294967296BOARD_ROCKCHIP_DYNAMIC_PARTITIONS_SIZE : $(shell expr $(BOARD_SUPER_PARTITION_SIZE) - 4194304)
endifPRODUCT_UBOOT_CONFIG : rk3588PRODUCT_KERNEL_DTS : rk3588-evb1-lp4-v10BOARD_GSENSOR_MXC6655XA_SUPPORT : trueBOARD_CAMERA_SUPPORT_EXT : true完整编译方式与非GKI的一样:
source build/envsetup.sh
lunch rk3588_t-userdebug
./build.sh -ACUKup