android9.0 MTK平台添加分区表

8257添加分区,主要修改以下文件:

Changes to be committed:
        modified:   build/make/core/Makefile
        modified:   build/make/core/config.mk
        modified:   build/make/core/envsetup.mk
        modified:   build/make/core/main.mk
        modified:   build/make/tools/allmake.sh
        modified:   build/make/tools/releasetools/build_image.py
        modified:   device/autochips/ac8257/init.ac8257.rc
        modified:   device/autochips/ac8257_demo/BoardConfig.mk
        modified:   device/autochips/build/build/tools/ptgen/AC8257/partition_table_AC8257_emmc.csv
        modified:   device/autochips/sepolicy/bsp/non_plat/device.te
        modified:   device/autochips/sepolicy/bsp/non_plat/file.te
        modified:   device/autochips/sepolicy/bsp/non_plat/file_contexts
        modified:   device/autochips/sepolicy/bsp/non_plat/fsck.te
        modified:   device/autochips/sepolicy/bsp/non_plat/init.te
        modified:   device/autochips/sepolicy/bsp/non_plat/system_app.te
        modified:   system/core/rootdir/Android.mk
        modified:   vendor/mediatek/proprietary/hardware/fstab/ac8257/fstab.in.ac8257

以下是修改文件的主要过程,如下:
1、分区表中添加分区(这里添加三个分区):
device/autochips/build/build/tools/ptgen/AC8257/partition_table_AC8257_emmc.csv
在这里插入图片描述
2、添加flashtool下载时需要的cpuinfo.img、resources.img和ivres.img三个文件的生成,主要修改以下文件
build/make/core/Makefile
build/make/core/config.mk
build/make/core/envsetup.mk
build/make/core/main.mk
build/make/tools/allmake.sh
build/make/tools/releasetools/build_image.py
system/core/rootdir/Android.mk
device/autochips/ac8257_demo/BoardConfig.mk
2.1)在build/make/core/Makefile 文件中添加如下:

$(if $(BOARD_AVMIMAGE_PARTITION_SIZE),$(hide) echo "avm_size=$(BOARD_AVMIMAGE_PARTITION_SIZE)" >> $(1))
+$(if $(BOARD_RESOURCESIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "resources_fs_type=$(BOARD_RESOURCESIMAGE_FILE_SYSTEM_TYPE)" >> $(1))
+$(if $(BOARD_RESOURCESIMAGE_PARTITION_SIZE),$(hide) echo "resources_size=$(BOARD_RESOURCESIMAGE_PARTITION_SIZE)" >> $(1))
+$(if $(BOARD_IVRESIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "ivres_fs_type=$(BOARD_IVRESIMAGE_FILE_SYSTEM_TYPE)" >> $(1))
+$(if $(BOARD_IVRESIMAGE_PARTITION_SIZE),$(hide) echo "ivres_size=$(BOARD_IVRESIMAGE_PARTITION_SIZE)" >> $(1))
+$(if $(BOARD_CPUINFOIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "cpuinfo_fs_type=$(BOARD_CPUINFOIMAGE_FILE_SYSTEM_TYPE)" >> $(1))
+$(if $(BOARD_CPUINFOIMAGE_PARTITION_SIZE),$(hide) echo "cpuinfo_size=$(BOARD_CPUINFOIMAGE_PARTITION_SIZE)" >> $(1))
$(if $(BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "vendor_fs_type=$(BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE)" >> $(1))
lse # BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE
# we need to ignore the broken cache link when doing the rsync
IGNORE_CACHE_LINK := --exclude=cache
endif # BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE

+#-----add by zhaojr
+# -----------------------------------------------------------------
+# cpuinfo partition image
+ifdef BOARD_CPUINFOIMAGE_FILE_SYSTEM_TYPE
+INTERNAL_CPUINFOIMAGE_FILES := \
+    $(filter $(TARGET_OUT_CPUINFO)/%,$(ALL_DEFAULT_INSTALLED_MODULES))
+
+cpuinfoimage_intermediates := \
+    $(call intermediates-dir-for,PACKAGING,cpuinfo)
+BUILT_CPUINFOIMAGE_TARGET := $(PRODUCT_OUT)/cpuinfo.img

+define build-cpuinfoimage-target
+  $(call pretty,"Target cpuinfo fs image: $(INSTALLED_CPUINFOIMAGE_TARGET)")
+  @mkdir -p $(TARGET_OUT_CPUINFO)
+  @mkdir -p $(cpuinfoimage_intermediates) && rm -rf +$(cpuinfoimage_intermediates)/cpuinfo_image_info.txt
+  $(call generate-userimage-prop-dictionary, +$(cpuinfoimage_intermediates)/cpuinfo_image_info.txt, skip_fsck=true)
+  $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \
+      build/make/tools/releasetools/build_image.py \
+      $(TARGET_OUT_CPUINFO) $(cpuinfoimage_intermediates)/cpuinfo_image_info.txt +$(INSTALLED_CPUINFOIMAGE_TARGET) $(TARGET_OUT)
+  $(hide) $(call assert-max-image-+size,$(INSTALLED_CPUINFOIMAGE_TARGET),$(BOARD_CPUINFOIMAGE_PARTITION_SIZE))
+endef

+# We just build this directly to the install location.
+INSTALLED_CPUINFOIMAGE_TARGET := $(BUILT_CPUINFOIMAGE_TARGET)
+$(INSTALLED_CPUINFOIMAGE_TARGET): $(INTERNAL_USERIMAGES_DEPS) +$(INTERNAL_CPUINFOIMAGE_FILES) $(BUILD_IMAGE_SRCS)
+	$(build-cpuinfoimage-target)

+.PHONY: cpuinfoimage-nodeps
+cpuinfoimage-nodeps: | $(INTERNAL_USERIMAGES_DEPS)
+	$(build-cpuinfoimage-target)

+else # BOARD_CPUINFOIMAGE_FILE_SYSTEM_TYPE
+# we need to ignore the broken cpuinfo link when doing the rsync
+IGNORE_CPUINFO_LINK := --exclude=cpuinfo
+endif # BOARD_CPUINFOIMAGE_FILE_SYSTEM_TYPE
+
+# resources partition image
+ifdef BOARD_RESOURCESIMAGE_FILE_SYSTEM_TYPE
+INTERNAL_RESOURCESIMAGE_FILES := \
+    $(filter $(TARGET_OUT_RESOURCES)/%,$(ALL_DEFAULT_INSTALLED_MODULES))
+
+resourcesimage_intermediates := \
+    $(call intermediates-dir-for,PACKAGING,resources)
+BUILT_RESOURCESIMAGE_TARGET := $(PRODUCT_OUT)/resources.img
+
+define build-resourcesimage-target
+  $(call pretty,"Target resources fs image: $(INSTALLED_RESOURCESIMAGE_TARGET)")
+  @mkdir -p $(TARGET_OUT_RESOURCES)
+  @mkdir -p $(resourcesimage_intermediates) && rm -rf $(resourcesimage_intermediates)/resources_image_info.txt
+  $(call generate-userimage-prop-dictionary, $(resourcesimage_intermediates)/resources_image_info.txt, skip_fsck=true)
+  $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \
+      build/make/tools/releasetools/build_image.py \
+      $(TARGET_OUT_RESOURCES) $(resourcesimage_intermediates)/resources_image_info.txt $(INSTALLED_RESOURCESIMAGE_TARGET) $(TARGET_OUT)
+  $(hide) $(call assert-max-image-size,$(INSTALLED_RESOURCESIMAGE_TARGET),$(BOARD_RESOURCESIMAGE_PARTITION_SIZE))
+endef
+
+# We just build this directly to the install location.
+INSTALLED_RESOURCESIMAGE_TARGET := $(BUILT_RESOURCESIMAGE_TARGET)
+$(INSTALLED_RESOURCESIMAGE_TARGET): $(INTERNAL_USERIMAGES_DEPS) $(INTERNAL_RESOURCESIMAGE_FILES) $(BUILD_IMAGE_SRCS)
+	$(build-resourcesimage-target)
+
+.PHONY: resourcesimage-nodeps
+resourcesimage-nodeps: | $(INTERNAL_USERIMAGES_DEPS)
+	$(build-resourcesimage-target)
+
+else # BOARD_RESOURCESIMAGE_FILE_SYSTEM_TYPE
+# we need to ignore the broken cache link when doing the rsync
+IGNORE_RESOURCES_LINK := --exclude=resources
+endif # BOARD_RESOURCESIMAGE_FILE_SYSTEM_TYPE
+
+# ivres partition image
+ifdef BOARD_IVRESIMAGE_FILE_SYSTEM_TYPE
+INTERNAL_IVRESIMAGE_FILES := \
+    $(filter $(TARGET_OUT_IVRES)/%,$(ALL_DEFAULT_INSTALLED_MODULES))
+
+ivresimage_intermediates := \
+    $(call intermediates-dir-for,PACKAGING,ivres)
+BUILT_IVRESIMAGE_TARGET := $(PRODUCT_OUT)/ivres.img
+
+define build-ivresimage-target
+  $(call pretty,"Target ivres fs image: $(INSTALLED_IVRESIMAGE_TARGET)")
+  @mkdir -p $(TARGET_OUT_IVRES)
+  @mkdir -p $(ivresimage_intermediates) && rm -rf $(ivresimage_intermediates)/ivres_image_info.txt
+  $(call generate-userimage-prop-dictionary, $(ivresimage_intermediates)/ivres_image_info.txt, skip_fsck=true)
+  $(hide) PATH=$(foreach p,$(INTERNAL_USERIMAGES_BINARY_PATHS),$(p):)$$PATH \
+      build/make/tools/releasetools/build_image.py \
+      $(TARGET_OUT_IVRES) $(ivresimage_intermediates)/ivres_image_info.txt $(INSTALLED_IVRESIMAGE_TARGET) $(TARGET_OUT)
+  $(hide) $(call assert-max-image-size,$(INSTALLED_IVRESIMAGE_TARGET),$(BOARD_IVRESIMAGE_PARTITION_SIZE))
+endef
+
+# We just build this directly to the install location.
+INSTALLED_IVRESIMAGE_TARGET := $(BUILT_IVRESIMAGE_TARGET)
+$(INSTALLED_IVRESIMAGE_TARGET): $(INTERNAL_USERIMAGES_DEPS) $(INTERNAL_IVRESIMAGE_FILES) $(BUILD_IMAGE_SRCS)
+	$(build-ivresimage-target)
+
+.PHONY: ivresimage-nodeps
+ivresimage-nodeps: | $(INTERNAL_USERIMAGES_DEPS)
+	$(build-ivresimage-target)
+
+else # BOARD_IVRESIMAGE_FILE_SYSTEM_TYPE
+# we need to ignore the broken ivres link when doing the rsync
+IGNORE_IVRES_LINK := --exclude=ivres
+endif # BOARD_IVRESIMAGE_FILE_SYSTEM_TYPE
+#-----end add by zhaojr
+
# -----------------------------------------------------------------
# system_other partition image
ifeq ($(BOARD_USES_SYSTEM_OTHER_ODEX),true)
BOARD_USES_SYSTEM_OTHER := true
$(BUILT_TARGET_FILES_PACKAGE): \
		$(INSTALLED_BOOTIMAGE_TARGET) \
		$(MTK_BOOTIMAGE_TARGET) \
		$(INSTALLED_RADIOIMAGE_TARGET) \
		$(INSTALLED_RECOVERYIMAGE_TARGET) \
		$(FULL_SYSTEMIMAGE_DEPS) \
		$(INSTALLED_USERDATAIMAGE_TARGET) \
		$(INSTALLED_CACHEIMAGE_TARGET) \
+		$(INSTALLED_CPUINFOIMAGE_TARGET) \
+		$(INSTALLED_RESOURCESIMAGE_TARGET) \
+		$(INSTALLED_IVRESIMAGE_TARGET) \
		$(INSTALLED_INTSDIMAGE_TARGET) \

2.2) build/make/core/config.mk文件修改

dont_bother_goals := out \
    snod systemimage-nodeps \
    stnod systemtarball-nodeps \
    userdataimage-nodeps userdatatarball-nodeps \
    cacheimage-nodeps \
+    resourcesimage-nodeps \
+    ivresimage-nodeps \
+    cpuinfoimage-nodeps \
    bptimage-nodeps \

2.3)build/make/core/envsetup.mk文件的修改

$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_NATIVE_TESTS := $(TARGET_OUT_DATA)/nativetest$(TARGET_VENDOR_TEST_SUFFIX)
$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_METRIC_TESTS := $(TARGET_OUT_DATA)/benchmarktest$(TARGET_VENDOR_TEST_SUFFIX)
endif

TARGET_OUT_INTSD := $(PRODUCT_OUT)/intsd
TARGET_OUT_AVM := $(PRODUCT_OUT)/avm
TARGET_OUT_CACHE := $(PRODUCT_OUT)/cache
+TARGET_OUT_RESOURCES := $(PRODUCT_OUT)/resources
+TARGET_OUT_IVRES := $(PRODUCT_OUT)/ivres
+TARGET_OUT_CPUINFO := $(PRODUCT_OUT)/cpuinfo

TARGET_OUT_VENDOR := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_VENDOR)
ifneq ($(filter address,$(SANITIZE_TARGET)),)

2.4)build/make/core/main.mk文件的修改

.PHONY: cacheimage
cacheimage: $(INSTALLED_CACHEIMAGE_TARGET)

+.PHONY: resourcesimage
+resourcesimage: $(INSTALLED_RESOURCESIMAGE_TARGET)

+.PHONY: ivres
+ivresimage: $(INSTALLED_IVRESIMAGE_TARGET)

+.PHONY: cpuinfoimage
+cpuinfoimage: $(INSTALLED_CPUINFOIMAGE_TARGET)

.PHONY: intsdimage
intsdimage: $(INSTALLED_INTSDIMAGE_TARGET)

.PHONY: avmimage
avmimage: $(INSTALLED_AVMIMAGE_TARGET)
# Build files and then package it into the rom formats
.PHONY: droidcore
droidcore: files \
	systemimage \
	$(INSTALLED_BOOTIMAGE_TARGET) \
	$(MTK_BOOTIMAGE_TARGET) \
	$(INSTALLED_RECOVERYIMAGE_TARGET) \
	$(INSTALLED_INTSDIMAGE_TARGET) \
	$(INSTALLED_AVMIMAGE_TARGET) \
	$(INSTALLED_VBMETAIMAGE_TARGET) \
	$(INSTALLED_USERDATAIMAGE_TARGET) \
	$(INSTALLED_CACHEIMAGE_TARGET) \
+	$(INSTALLED_RESOURCESIMAGE_TARGET) \
+	$(INSTALLED_IVRESIMAGE_TARGET) \
+	$(INSTALLED_CPUINFOIMAGE_TARGET) \
	$(INSTALLED_BPTIMAGE_TARGET) \

2.5)build/make/tools/allmake.sh文件的修改
IMAGES="*_Android_scatter.txt resources.img ivres.img cpuinfo.img arm2.img
添加resources.img ivres.img cpuinfo.img文件拷贝
2.6)build/make/tools/releasetools/build_image.py 文件的修改

 elif mount_point == "cache":
    copy_prop("cache_fs_type", "fs_type")
    copy_prop("cache_size", "partition_size")
+  elif mount_point == "cpuinfo":
+    copy_prop("cpuinfo_fs_type", "fs_type")
+    copy_prop("cpuinfo_size", "partition_size")
+  elif mount_point == "resources":
+    copy_prop("resources_fs_type", "fs_type")
+    copy_prop("resources_size", "partition_size")
+  elif mount_point == "ivres":
+    copy_prop("ivres_fs_type", "fs_type")
+    copy_prop("ivres_size", "partition_size")
  elif mount_point == "intsd":
    copy_prop("intsd_fs_type", "fs_type")
    copy_prop("intsd_size", "partition_size")
  elif mount_point == "avm":
    copy_prop("avm_fs_type", "fs_type")
    copy_prop("avm_size", "partition_size")
   elif image_filename == "cache.img":
      mount_point = "cache"
 +   elif image_filename == "cpuinfo.img":
 +     mount_point = "cpuinfo"
 +   elif image_filename == "resources.img":
 +     mount_point = "resources"
 +   elif image_filename == "ivres.img":
 +     mount_point = "ivres"
    elif image_filename == "intsd.img":
      mount_point = "intsd"
    elif image_filename == "avm.img":
      mount_point = "avm"

2.7 system/core/rootdir/Android.mk 文件的修改

ifdef BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE
  LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/cache
else
  LOCAL_POST_INSTALL_CMD += ; ln -sf /data/cache $(TARGET_ROOT_OUT)/cache
endif

+###add by zhaojr#####
+ifdef BOARD_CPUINFOIMAGE_FILE_SYSTEM_TYPE
+  LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/cpuinfo
+endif
+ifdef BOARD_RESOURCESIMAGE_FILE_SYSTEM_TYPE
+  LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/resources
+endif
+ifdef BOARD_IVRESIMAGE_FILE_SYSTEM_TYPE
+  LOCAL_POST_INSTALL_CMD += ; mkdir -p $(TARGET_ROOT_OUT)/ivres
+endif
+####end add by zhaojr####

ifdef BOARD_ROOT_EXTRA_SYMLINKS

2.8 device/autochips/ac8257_demo/BoardConfig.mk 文件的修改

# Create avm partition
#ifeq ($(strip $(ATC_AVM_SUPPORT)),yes)
BOARD_AVMIMAGE_FILE_SYSTEM_TYPE := ext4
#endif
+#add by zhaojr resources ivres cpuinfo
+BOARD_CPUINFOIMAGE_FILE_SYSTEM_TYPE := ext4
+BOARD_RESOURCESIMAGE_FILE_SYSTEM_TYPE := ext4
+BOARD_IVRESIMAGE_FILE_SYSTEM_TYPE := ext4
+#end by zhaojr

3、修改fstab文件添加分区的挂载和系统启动时挂载权限
修改:vendor/mediatek/proprietary/hardware/fstab/ac8257/fstab.in.ac8257

DEVPATH(protect1)   /mnt/vendor/protect_f   ext4   FS_FLAG_COMMIT   FSMGR_FLAG_FMT
DEVPATH(protect2)   /mnt/vendor/protect_s   ext4   FS_FLAG_COMMIT   FSMGR_FLAG_FMT
DEVPATH(nvdata)     /mnt/vendor/nvdata      ext4   FS_FLAG_DISCARD  FSMGR_FLAG_FMT
DEVPATH(nvcfg)      /mnt/vendor/nvcfg       ext4   FS_FLAG_COMMIT   FSMGR_FLAG_FMT
+DEVPATH(cpuinfo)      /cpuinfo     ext4   FS_FLAG_COMMIT FSMGR_FLAG_FMT
+DEVPATH(resources)  /resources  ext4   FS_FLAG_COMMIT FSMGR_FLAG_FMT
+DEVPATH(ivres)      /ivres      ext4   FS_FLAG_COMMIT FSMGR_FLAG_FMT

修改:device/autochips/ac8257/init.ac8257.rc

on post-fs-data
  ........................
  ................................
      #Create flash folder
    mkdir /data/vendor/flash
    chown root system /data/vendor/flash
    chmod 0771 /data/vendor/flash

    #add by zhaojr
+    # We chown/chmod /cpuinfo again so because mount is run as root + defaults
+    chown system system /cpuinfo
+    chmod 0771 /cpuinfo

+    # We chown/chmod /resources again so because mount is run as root + defaults
+    chown system system /resources
+    chmod 0771 /resources

+    # We chown/chmod /ivres again so because mount is run as root + defaults
+    chown system system /ivres
+    chmod 0771 /ivres
+    #end add by zhaojr
    
    #Create NDD mount point
    mkdir /data/vendor/camera_dump
    chown root system /data/vendor/camera_dump
    chmod 0771 /data/vendor/camera_dump

4、添加挂载分区的selinux权限,否则系统启动无法挂载
device/autochips/sepolicy/bsp/non_plat/device.te
device/autochips/sepolicy/bsp/non_plat/file.te
device/autochips/sepolicy/bsp/non_plat/file_contexts
device/autochips/sepolicy/bsp/non_plat/fsck.te
device/autochips/sepolicy/bsp/non_plat/init.te
device/autochips/sepolicy/bsp/non_plat/system_app.te
4.1 定义设备块文件
device/autochips/sepolicy/bsp/non_plat/device.te

# add by zhaojr
# Purpose: Add cpuinfo partition sepolicy
type cpuinfo_device, dev_type;
type cpuinfo_block_device, dev_type;
# Purpose: Add resources partition sepolicy
type resources_device, dev_type;
type resources_block_device, dev_type;
# Purpose: Add ivres partition sepolicy
type ivres_device, dev_type;
type ivres_block_device, dev_type;
# end add by zhaojr

4.2 定义文件类型
device/autochips/sepolicy/bsp/non_plat/file.te

# add by zhaojr
# Date : 2019/05/27
# Operation : Migration
# Purpose: Add cpuinfo partition sepolicy
type cpuinfo_file, file_type, data_file_type;

# Date : 2019/05/27
# Operation : Migration
# Purpose: Add resources partition sepolicy
type resources_file, file_type, data_file_type;

# Date : 2019/05/27
# Operation : Migration
# Purpose: Add ivres partition sepolicy
type ivres_file, file_type, data_file_type;
#end add by zhaojr

4.3 添加分区生成和挂载目录的访问权限
device/autochips/sepolicy/bsp/non_plat/file_contexts

# add for avm partition
/dev/block/platform/bootdevice/by-name/avm u:object_r:avm_block_device:s0
/avm(/.*)? u:object_r:avm_file:s0

# add by zhaojr
# add for cpuinfo partition
/dev/block/platform/bootdevice/by-name/cpuinfo u:object_r:cpuinfo_block_device:s0
/cpuinfo(/.*)? u:object_r:cpuinfo_file:s0

# add for resources partition
/dev/block/platform/bootdevice/by-name/resources u:object_r:resources_block_device:s0
/resources(/.*)? u:object_r:resources_file:s0

# add for ivres partition
/dev/block/platform/bootdevice/by-name/ivres u:object_r:ivres_block_device:s0
/ivres(/.*)? u:object_r:ivres_file:s0
# end add by zhaojr

# add for backcar partition
/data/vendor/backcar(/.*)? u:object_r:backcar_file:s0

4.4 添加fsck访问分区的权限
device/autochips/sepolicy/bsp/non_plat/fsck.te

#============= fsck ==============
allow fsck sysfs_fs_ext4_features:dir search;
allow fsck avm_block_device:blk_file rw_file_perms;
#add by zhaojr
allow fsck cpuinfo_block_device:blk_file rw_file_perms;
allow fsck resources_block_device:blk_file rw_file_perms;
allow fsck ivres_block_device:blk_file rw_file_perms;
#end add by zhaojr

4.5 添加init和system进程访问的权限
device/autochips/sepolicy/bsp/non_plat/init.te

# for avm partition
allow init avm_block_device:blk_file relabelto;
allow init avm_file:dir mounton;

#add by zhaojr
# for cpuinfo partition
allow init cpuinfo_block_device:blk_file relabelto;
allow init cpuinfo_file:dir mounton;
# for resources partition
allow init resources_block_device:blk_file relabelto;
allow init resources_file:dir mounton;
# for ivres partition
allow init ivres_block_device:blk_file relabelto;
allow init ivres_file:dir mounton;
#end add by zhaojr

# for backcar partition
allow init backcar_file:dir mounton;

device/autochips/sepolicy/bsp/non_plat/system_app.te

# for avm partition access
allow system_app avm_file:file { getattr unlink open read write create };
allow system_app avm_file:dir rw_dir_perms;
allow system_app atc_cem_prop:file { getattr open };
allow system_app atccam_prop:file { getattr open };
allow system_app hal_fastavm_daemon:fd use;
#add by zhaojr for partition system access
# for cpuinfo partition access
allow system_app cpuinfo_file:file { getattr unlink open read write create };
allow system_app cpuinfo_file:dir rw_dir_perms;
# for resources partition access
allow system_app resources_file:file { getattr unlink open read write create };
allow system_app resources_file:dir rw_dir_perms;
# for ivres partition access
allow system_app ivres_file:file { getattr unlink open read write create };
allow system_app ivres_file:dir rw_dir_perms;
#end add by zhaojr for partition system access

# Date: 2019/05/27
# Purpose: Allow app to get atc_backcar_prop
# Package: app
get_prop(system_app, atc_backcar_prop);

全部修改完成后,全编译系统,然后烧录即可。

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
### 回答1: Android 9.0和10.0的Framework系统API上添加JNI方法需要经过以下步骤: 1. 在Java层调用JNI方法前,需要先创建定义JNI方法的C++文件和对应的头文件。这些文件应该保存在frameworks/native/libs/目录下的对应模块中。例如,如果想要在WebView模块中添加JNI方法,则应该在frameworks/native/libs/webviewchromium/目录下创建文件并进行定义。 2. 编写C++代码实现JNI方法。在代码中,需要采用JNI函数以及Java Native Interface标准库的方法来实现该方法的功能。具体实现过程可以参考Android源码中frameworks/native/libs/input/Input.cpp文件的实现。 3. 在C++代码的头文件中定义JNI方法。为了让Java层正确调用JNI方法,需要在C++头文件中定义JNI函数名称、Java包名、Java类名以及方法参数的信息。参考Android源码中frameworks/native/libs/webviewchromium/webviewchromium_jni.h文件。 4. 在Java层调用JNI方法。要调用JNI方法,需要在Java代码中加载C++库。可以使用静态代码块System.loadLibrary("yourlibrary")来加载C++库,并在程序中使用对应的Java扩展头文件。在Java代码中,需要使用JNI函数来调用JNI方法。参考Android源码中frameworks/native/libs/webviewchromium/WebBackForwardList.java文件。 通过以上步骤,即可在Android 9.0和10.0的Framework系统API中添加JNI方法。需要注意的是,添加JNI方法需要遵循JNI标准,使用合适的JNI库函数和API接口,以确保程序代码的正确性和稳定性。 ### 回答2: Android 9.0和10.0的Framework系统API都支持添加JNI方法。 首先,要添加一个JNI方法,您需要在Java中编写该方法的实现,然后在C / C ++中编写对应的本地代码,然后使用JNI将二者连接起来。 为了在Framework中添加新的JNI方法,您需要找到Framework源代码中对应的Java类和C ++代码。然后按照以下步骤进行操作: 1. 在Java类中添加新的JNI方法声明,方法名必须与您要添加的本地方法的名称匹配。例如,如果您要添加一个名为newMethod的本地方法,则需要在Java类中声明以下内容: ```java public native void newMethod(int arg1, String arg2); ``` 注意:在声明中,您不能提供方法的实现。 2. 在C / C ++代码中实现新的本地方法,方法名称必须与您在Java中声明的方法名称一致。 ```cpp JNIEXPORT void JNICALL Java_com_example_MyClass_newMethod(JNIEnv *env, jobject obj, jint arg1, jstring arg2) { // 实现您的代码 } ``` 3. 最后,在您的C / C ++代码中获取Java类的引用,以便在Native代码中调用该方法。 ```cpp jclass clazz = env->FindClass("com/example/MyClass"); jmethodID methodId = env->GetMethodID(clazz, "newMethod", "(ILjava/lang/String;)V"); ``` 通过此方法ID,您可以使用JNI在C / C ++中调用该方法。 ```cpp env->CallVoidMethod(obj, methodId, arg1, arg2); ``` 这样,您就可以在Android 9.0和10.0的Framework系统API中添加新的JNI方法了。 ### 回答3: Android操作系统使用Java语言实现,但是也支持通过JNI机制(Java Native Interface)来调用C/C++编写的代码。在Android 9.0和10.0版本中,如果需要在Framework系统层中添加JNI方法,需要进行以下步骤: 1. 编写C/C++代码实现需要的功能,并将其编译成动态库(.so文件)。 2. 在Framework层中找到对应的Java类,并添加需要的Native方法声明。例如,如果要在TelephonyManager类中添加一个名为getSignalStrengthDbm的方法,则应该在TelephonyManager.java中添加以下Native方法声明: ``` private native int getSignalStrengthDbm(); ``` 3. 在frameworks/base目录下的services/core/jni目录中添加一个名为TelephonyManager.cpp的文件,并实现getSignalStrengthDbm方法: ``` static jint TelephonyManager_getSignalStrengthDbm(JNIEnv *env, jobject thiz){ // TODO: 通过调用C/C++代码实现需要的功能,并返回结果 return 0; } static const JNINativeMethod gMethods[] = { { "getSignalStrengthDbm", "()I", (void*)TelephonyManager_getSignalStrengthDbm}, }; int register_android_telephony_TelephonyManager(JNIEnv* env) { jclass clazz = env->FindClass("android/telephony/TelephonyManager"); if (clazz == NULL) { ALOGE("Can't find android/telephony/TelephonyManager"); return -1; } return env->RegisterNatives(clazz, gMethods, sizeof(gMethods) / sizeof(JNINativeMethod)); } ``` 4. 在frameworks/base目录下的services/core目录中找到文件Android.bp,将添加的TelephonyManager.cpp文件加入build文件中: ``` cc_library_shared { name: "libandroidfw", srcs: [ "jni/Animation.cpp", ... "jni/TelephonyManager.cpp", ], ... } ``` 5. 在Android.mk文件中添加TelephonyManager.cpp的编译规则: ``` LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := TelephonyManager LOCAL_CFLAGS := -Werror LOCAL_SRC_FILES := TelephonyManager.cpp LOCAL_SHARED_LIBRARIES := libutils libcutils libbinder include $(BUILD_SHARED_LIBRARY) ``` 6. 重新编译Framework层并运行即可。 以上是在Android 9.0和10.0系统中添加JNI方法的步骤,其中涉及到的文件和目录可能有所不同,在实际开发中需要根据具体情况进行调整。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值