当前位置: 首页 > news >正文

海东营销网站建设公司优化大师班级优化大师

海东营销网站建设公司,优化大师班级优化大师,凡科怎么样,做的网站上传到服务器Rockchip Android13 GKI开发指南 文章目录Rockchip Android13 GKI开发指南GKI介绍Google upstream kernel下载及编译Rockchip SDK中GKI相关目录介绍Rockchip GKI编译代码修改编译固件烧写KO编译及修改添加新的模块驱动的方法调试ko方法开机log确认uboot阶段Android阶段KO加载KO…Rockchip Android13 GKI开发指南 文章目录Rockchip Android13 GKI开发指南GKI介绍Google upstream kernel下载及编译Rockchip SDK中GKI相关目录介绍Rockchip GKI编译代码修改编译固件烧写KO编译及修改添加新的模块驱动的方法调试ko方法开机log确认uboot阶段Android阶段KO加载KO加载报错调试技巧打印更多KO加载的log在RK的kernel打包中编译GKI使用的boot.img查看google发布的内核接口如何提交内核接口到upstreamGKI介绍 Android13 GMS和EDLA认证的一个难点是google强制要求要支持GKI。GKI通用内核映像是google为了解决内核碎片化的问题而设计的通过提供统一核心内核并将SoC和板级驱动从核心内核移至可加载模块中。核心内核为驱动模块提供了稳定的内核模块接口模块驱动和核心内核可以独立进行更新。内核接口可以通过upstream的方式进行扩展。 Soc和板级厂商在驱动开发时需要使用已经定义的内核接口如果要新加核心内核接口需要提交给google这个周期会比较长所以要提前做好开发准备。 Google upstream kernel下载及编译 Google的boot.img是定期发布时间间隔比较长。 我们可以下载google的upstream的kernel源码自己编译boot.img进行验证和debug。 Google Upstream kernel下载链接 repo init -u https://android.googlesource.com/kernel/manifest -b common-android13-5.10需要翻墙下载 编译 tools/bazel run --configfast //common:kernel_aarch64_dist -- --dist_dir./out生成boot.img out/boot.imgRockchip SDK中GKI相关目录介绍 kernel KO文件路径 mkcombinedroot/vendor_ramdisk/lib/modules/Google boot.img路径 mkcombinedroot/prebuilts/boot-5.10.imgKO文件加载顺序配置文件 mkcombinedroot/res/vendor_ramdisk_modules.loadGPU mali库的路径 GPU的mali库是单独编译在vendor.img中源文件路径在 RK3588 vendor/rockchip/common/gpu/MaliG610/lib/modules/bifrost_kbase.ko RK356X vendor/rockchip/common/gpu/MaliG52/lib/modules/bifrost_kbase.ko RK3326 vendor/rockchip/common/gpu/MaliTDVx/lib/modules/mali_kbase.ko Rockchip GKI编译 代码修改 GKI需要打开AB系统才能使用具体代码修改如下 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_AByAndroid的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 : true#PRODUCT_KERNEL_CONFIG : rockchip_defconfig android-13.configPRODUCT_KERNEL_CONFIG : gki_defconfig rockchip_gki.configBOARD_BOOT_HEADER_VERSION : 4 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注意这里编译的kernel只是为了编译出resource.imgkernel源码部分都是使用mkcombinedroot/vendor_ramdisk/lib/modules/下的ko文件直接打包成vendor_boot.img。内核部分使用的是google发布的boot.img具体路径在mkcombinedroot/prebuilts/boot-5.10.img 编译完可以直接烧写 rockdev/Image-rk3588_t/update.img 在调试阶段也支持单独编译vendor_boot.img 编译命令 make installclean;make vendorbootimage -j12编译完可以直接烧写 out/target/product/rk3588_t/vendor_boot.img固件烧写 固件烧写分2中方式 完整包update.img 固件路径 rockdev/Image-rk3588_t/update.img可以通过瑞芯微开发工具烧写 散包烧写 首先导入配置文件方法是在工具 空白处右键-导入配置-选择导入txt文件-选择parameter.txt 然后依次选择rockdev/Image-rk3588_t/下对应的img文件进行烧写分区A和B导入的固件是同一个 rockdev/Image-rk3588_t ├── baseparameter.img ├── boot.img ├── dtbo.img ├── init_boot.img ├── MiniLoaderAll.bin ├── misc.img ├── parameter.txt ├── resource.img ├── super.img ├── uboot.img ├── update.img ├── vbmeta.img └── vendor_boot.imgKO编译及修改 添加新的模块驱动的方法 将驱动代码放到kernel-5.10对应的目录下这里以新加触摸屏驱动gt1x为例进行说明。 将gt1x的驱动放在drivers/input/touchscreen/下面并添加对应的Makefile和Kconfig这里按kernel的标准方式进行操作增加一个自己的config文件 在arch/arm64/configs/下新建一个xxx_gki.config并将CONFIG_TOUCHSCREEN_GT1Xm (m表示编译为ko)添加到xxx_gki.config中将ko文件名添加到load文件中 load文件在SDK的mkcombinedroot/res/目录下如下 |.load文件名称| 对应分区 | makefile解析 |加载时间| | - | - | - | | vendor_ramdisk_modules.load | vendor_boot | vendor_ramdisk_gki.mk |ramdisk init阶段| | vendor_modules.load | vendor | vendor_gki.mk |android启动时| | recovery_modules.load | recovery | recovery_gki.mk |recovery阶段| 触摸屏驱动要在init阶段加载所以加到vendor_ramdisk_modules.load中 echo gt1x-ts.ko res/vendor_ramdisk_modules.load触摸屏驱动要在init阶段加载所以加到vendor_ramdisk_modules.load中 同时要将也要在res/debug_list.load中添加作为调试用在这里面加编译的时候才会从kernel中更新对应的ko到vendor_boot.img中。 注意 res/debug_list.load仅做调试用不需要提交到服务器上。 echo gt1x-ts.ko res/debug_list.load注意 1.load文件关乎驱动的加载顺序请不要修改原有顺序仅在需要时添加自己的驱动名称否则可能会导致系统无法启动 注意 2如果使用A/B系统请务必保证vendor_ramdisk_modules.load和recovery_modules.load文件内容一致否则会导致无法启动代码默认使用软链接将二者链接起来请不要自己修改 注意 3如果是在android启动的时候加载的ko可以放在vendor_modules.load中但需要注意vendor下的ko不会被系统主动加载如果仅需要在开机阶段自动加载可以使用Rockchip提供的默认加载脚本init.insmod.sh该脚本会自动加载device/rockchip/common/rootdir/init.insmod.cfg配置中的所有ko。 编译 进到kernel-5.10目录下进行ko文件编译 配置clang编译链编译链版本请参考build.sh中的配置 export PATH../prebuilts/clang/host/linux-x86/clang-r450784d/bin:$PATHmake CROSS_COMPILEaarch64-linux-gnu- LLVM1 LLVM_IAS1 ARCHarm64 gki_defconfig rockchip_gki.config xxx_gki.config make CROSS_COMPILEaarch64-linux-gnu- LLVM1 LLVM_IAS1 ARCHarm64 rk3588s-evb8-lp4x-v10.img -j32拷贝KO文件到mkcombinedroot/vendor_ramdisk/lib/modules/ KO编完后进到mkcombinedroot/下执行mkgki4.sh脚本自动从kernel-5.10下面拷贝 也可以手动进行拷贝 cd ../mkcombinedroot/ ./mkgki4.sh编译vendor_boot.img 在工程根目录下编译vendor_boot.img命令如下。 这一步是将KO文件打包到vendor_boot.img在降vendor_boot.img烧写到机器中。 make installclean;make vendorbootimage -j12验证 烧写out/target/product/rk3588_t/vendor_boot.img文件到机器中开机验证 如果是放在vendor分区的ko可以在系统起来后直接push到机器内的vendor分区中手动挂载进行验证 如果有涉及到dts的修改需要烧写kernel-5.10下的resource.img 附AOSP定义的各类ko加载阶段 Boot modeStorageDisplayKeypadBatteryPMICTPNFC/Wi-Fi/BTSensorsCameraRecoveryYYYYYNNNNChargerYYYYYNNNNAndroidYYYYYYYYY 调试ko方法 在kernel-5.10目录下修改对应ko的驱动源码 使用如下命令进行ko编译 配置clang编译链编译链版本请参考build.sh中的配置export PATH../prebuilts/clang/host/linux-x86/clang-r450784d/bin:$PATH编译komake CROSS_COMPILEaarch64-linux-gnu- LLVM1 LLVM_IAS1 ARCHarm64 gki_defconfig rockchip_gki.config xxx_gki.config make CROSS_COMPILEaarch64-linux-gnu- LLVM1 LLVM_IAS1 ARCHarm64 rk3588s-evb8-lp4x-v10.img -j32进到mkcombinedroot目录。将需要更新的ko文件名添加到res/debug_list.load中 进到mkcombinedroot目录配置dtb执行./mkgki4.sh将ko文件打包到vender_boot.img中 cd ../mkcombinedroot/ export MY_DTBrk3588s-evb8-lp4x-v10 ./mkgki4.sh拷贝KO文件到mkcombinedroot/vendor_ramdisk/lib/modules/ KO编完后进到mkcombinedroot/下执行mkgki4.sh脚本自动从kernel-5.10下面拷贝 也可以手动进行拷贝 cd ../mkcombinedroot/ ./mkgki4.sh编译vendor_boot.img 在工程根目录下编译vendor_boot.img命令如下。 这一步是将KO文件打包到vendor_boot.img在降vendor_boot.img烧写到机器中。 make installclean;make vendorbootimage -j12验证 烧写out/target/product/rk3588_t/vendor_boot.img文件到机器中开机验证如果是放在vendor分区的ko可以在系统起来后直接push到机器内的vendor分区中手动挂载进行验证如果有涉及到dts的修改需要烧写kernel-5.10下的resource.img 调试完成后将vendor_ramdisk/lib/modules的ko文件被脚本自动拷贝进行提交 有关打包工具的详细说明请参考mkcombinedroot/README 注意kernel编译ko的时候如果有修改了config则编译中间会卡住很长一段时间这是在做编译优化根据编译服务器硬件配置不同优化的速度也不同即卡住的时间也不同。 所以这个卡住是正常现象。 开机log确认 uboot阶段 内容header版本vendor_ramdisk(v-ramdisk)V3bootconfigV4 ## Booting Android Image at 0x003ff000 ... Kernel: 0x00400000 - 0x03088ffc (45604 KiB) v-ramdisk: 0x0a200000 - 0x0a6944c8 (4690 KiB) ramdisk: 0x0a6944c8 - 0x0a7e54df (1349 KiB) bootconfig: 0x0a7e54df - 0x0a7e559c (1 KiB) bootparams: 0x0a7e559c - 0x0a7e759cAndroid阶段 GKI版本 Linux version 5.10.117-android13-9-00037-gbc08447eb7bd [ 0.000000][ T0] Booting Linux on physical CPU 0x0000000000 [0x412fd050] [ 0.000000][ T0] Linux version 5.10.117-android12-9-00037-gbc08447eb7bd (build-userbuild-host) (Android (7284624, based on r416183b) clang version 12.0.5 (https://android.googlesource.com/toolchain/llvm-project c935d99d7cf2016289302412d708641d52d2f7ee), LLD 12.0.5 (/buildbot/src/android/llvm-toolchai n/out/llvm-project/lld c935d99d7cf2016289302412d708641d52d2f7ee)) #1 SMP PREEMPT Thu Aug 25 15:24:20 UTC 2022Kernel command line Header V4中不能存在androidboot.xxx这一类的命令行参数这类参数全部在bootconfig中。此类参数可以通过cat /proc/bootconfig确认。 [ 0.000000][ T0] Kernel command line: stack_depot_disableon kasan.stacktraceoff kvm-arm.modeprotected cgroup_disablepressure cgroup.memorynokme m storagemediaemmc consolettyFIQ0 firmware_class.path/vendor/etc/firmware init/init rootwait ro loop.max_part7 bootconfig buildvariantuserdebug earl yconuart8250,mmio32,0xfeb50000 irqchip.gicv3_pseudo_nmi0 KO加载 开始加载ko可以看到log [ 1.034730][ T1] Run /init as init process [ 1.036190][ T1] init: init first stage started! [ 1.040534][ T1] init: Loading module /lib/modules/io-domain.ko with args [ 1.042038][ T1] init: Loaded kernel module /lib/modules/io-domain.koKO加载报错 使用了未导出的符号报错重启 [ 0.805736][ T1] cryptodev: Unknown symbol crypto_ahash_final (err -2) [ 0.806383][ T1] cryptodev: Unknown symbol sg_nents (err -2) [ 0.806972][ T1] cryptodev: Unknown symbol crypto_alloc_akcipher (err -2) [ 0.819768][ T1] Kernel panic - not syncing: Attempted to kill init! exitcode0x00007f00注 正常不会出现此问题参考 名词解释阶段——ABI进行处理 调试技巧 打印更多KO加载的log 修改ratelimit的值可以打印更多init的log方便查问题init信息太少会把ko加载的报错信息隐藏掉。 xxxsys2_206:~/a2_Android13_29_sdk/kernel-5.10$ git diff diff --git a/include/linux/ratelimit_types.h b/include/linux/ratelimit_types.h index b676aa419eef..db7eb5be2d8b 100644 --- a/include/linux/ratelimit_types.hb/include/linux/ratelimit_types.h-7,7 7,7 #include linux/spinlock_types.h #define DEFAULT_RATELIMIT_INTERVAL (5 * HZ) -#define DEFAULT_RATELIMIT_BURST 10 #define DEFAULT_RATELIMIT_BURST 1000在RK的kernel打包中编译GKI使用的boot.img 先按正常编译步骤编译kernel生成arch/arm64/boot/Image 用如下命令打包boot.img mkbootimg --kernel arch/arm64/boot/Image --header_version 4 --output …/mkcombinedroot/prebuilts/boot-5.10.img 查看google发布的内核接口 标准的内核接口定义在android目录下 :~/a5_google_kenrel/common$ tree a android/ arch/ wlqsys2_206:~/a5_google_kenrel/common$ tree android/ android/ ├── abi_gki_aarch64 ├── abi_gki_aarch64_core ├── abi_gki_aarch64_db845c ├── abi_gki_aarch64_exynos ├── abi_gki_aarch64_fips140 ├── abi_gki_aarch64_galaxy ├── abi_gki_aarch64_generic ├── abi_gki_aarch64_hikey960 ├── abi_gki_aarch64_rockchip ├── abi_gki_aarch64_type_visibility ├── abi_gki_aarch64_virtual_device ├── abi_gki_aarch64.xml ├── abi_gki_modules_exports ├── abi_gki_modules_protected ├── gki_aarch64_fips140_modules ├── gki_aarch64_modules └── gki_system_dlkm_modules如何提交内核接口到upstream 如果需要添加新的内核接口可以生成对应的patch再将patch通过瑞芯微的redmine系统提交个瑞芯微审核然后再统一提交给google diff --git a/android/abi_gki_aarch64_rockchip b/android/abi_gki_aarch64_rockchip index 3344cf064e06..203c79ff1123 100644 --- a/android/abi_gki_aarch64_rockchipb/android/abi_gki_aarch64_rockchip-2560,6 2560,9 sdhci_remove_hostsdhci_request# required by sensorbox.kokernel_sigaction # required by sensor_dev.koclass_create_file_nsclass_remove_file_ns
http://www.ho-use.cn/article/10816132.html

相关文章:

  • 网站建设下单源码h5模板免费下载
  • 网站开发设计方案书保定网站制作报价
  • 笨笨网站建设专家网站建设合同需注意什么
  • 做网站的产品图片seo排名优化教程
  • linux 网站服务器搭建上海浦东做网站
  • 陕西金顶建设公司网站企业网络营销培训
  • 西安网站建设有限公司视频网站怎么做采集
  • 网站flash代码爱站网关键词密度
  • 一流的网站建设哪家好上海建设摩托车
  • wordpress站内搜索框莱芜都市网招聘
  • 嘉兴港区建设局网站建设部网站怎么查安全员
  • 怀化二手车网站wordpress主题网站模板
  • 织梦 大型综合旅游网站 源码html怎么做
  • 烟台酒店网站建设品牌战略咨询公司排名
  • 邢台移动网站设计临沂外贸国际网站建设
  • 如何做网站维护 找关键词做旅游网站的研究意义
  • 简单网站开发准备做钢材都有什么网站
  • 免费的ppt模板网关键词优化是什么意思
  • 深圳外贸建站模版创意网站建设设计
  • 微网站样式网站建设后还有什么费用
  • 上海住房和城乡建设厅网站wordpress自带企业主题下载
  • 有人和兽做的网站移动端网站排名
  • 手机网站解析做网站的一般要多钱
  • wordpress 首页缩略图seo多久可以学会
  • 全景旅游网站项目建设淘宝网站代理怎么做的
  • 小红书seo是什么意思系统优化大师免费版
  • 静态网站管理系统wordpress display_name
  • 食品网站建设目的做网站软件wd
  • 站长工具域名wordpress转发微信缩略图
  • 网站群发手机短信国内搜索引擎排名2022