当前位置:   article > 正文

Android rc文件实现开机启动可执行文件_a20 android启动的执行rc.local

a20 android启动的执行rc.local

Android 实现开机启动可执行文件

应业务需求,实现开机启动一个可执行文件,记录一下。

1.在目标目录下新建Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE        := android.hardware.test_default@1.0-service
LOCAL_MODULE_TAGS   := optional
LOCAL_MODULE_CLASS  := EXECUTABLES
LOCAL_PROPRIETARY_MODULE := true
LOCAL_SRC_FILES     := android.hardware.test_default@1.0-service
LOCAL_MODULE_PATH   := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_VENDOR)/bin/hw
include $(BUILD_PREBUILT)

include $(CLEAR_VARS)
LOCAL_MODULE        := android.hardware.test_default@1.0-service.rc
LOCAL_MODULE_TAGS   := optional
LOCAL_MODULE_CLASS  := ETC
LOCAL_SRC_FILES     := android.hardware.test_default@1.0-service.rc
LOCAL_MODULE_PATH   := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_VENDOR)/etc/init
include $(BUILD_PREBUILT)

include $(CLEAR_VARS)
LOCAL_MODULE := android.hardware.test_default@1.0
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_TAGS := optional
LOCAL_VENDOR_MODULE := true
LOCAL_MODULE_SUFFIX := .so
LOCAL_MULTILIB:= 64
LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/lib64
LOCAL_SRC_FILES := $(LOCAL_MODULE).so
include $(BUILD_PREBUILT)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

这个mk作用就是将文件拷贝到指定的路径。

2.配置sepolicy

用于配置SE权限的文件一般放在 /device/product_name/sepolicy/ 或 /device/product_name/common/sepolicy/ 目录下,然后可以在这个目录下添加SE的权限了。

2.1.hwservice.te 文件中添加下面内容

# define demoService as hwservice_manager, so it can be added as a hwservice
type hal_test_default_hwservice, hwservice_manager_type;

  • 1
  • 2
  • 3

2.2.新建文件hal_test_default.te

type hal_test_default, domain;
type hal_test_default_exec, exec_type, vendor_file_type, file_type;
init_daemon_domain(hal_test_default)

allow hal_test_default self:can_socket create_socket_perms;
allow hal_test_default self:capability { dac_override };
allowxperm hal_test_default self:can_socket ioctl { unpriv_sock_ioctls priv_sock_ioctls };
allow hal_test_default hal_test_default:socket {create bind read write setopt};
allow hal_test_default su:unix_stream_socket {listen bind read write connectto};
allow hal_test_default su:unix_dgram_socket sendto;

binder_call(hal_test_default,system_server)
binder_call(system_server,hal_test_default)

allow hal_test_default shell_data_file:dir { search write add_name create remove_name };
allow hal_test_default shell_data_file:sock_file { write create unlink };
allow hal_test_default name-server:unix_stream_socket { connectto };
allow hal_test_default self:capability { dac_override sys_nice };
allow hal_test_default self:tcp_socket { create write read setopt bind listen getattr accept connect };
allow hal_test_default fwmarkd_socket:sock_file { write  };
allow hal_test_default netd:unix_stream_socket { connectto };
allow hal_test_default node:tcp_socket { node_bind };
allow hal_test_default port:tcp_socket { name_connect };
allow netd hal_test_default:fd { use };
allow netd hal_test_default:tcp_socket { read write getopt setopt };
allow system_server hal_test_default_hwservice:hwservice_manager { find };
allow hal_test_default hal_radio_oversea_hwservice:hwservice_manager { add };
allow hal_test_default platform_app:binder { call };
allow hal_test_default system_app:binder { call };
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

2.3.file_contexts文件添加下面内容

/(vendor|system/vendor)/bin/hw/android.hardware.test_default@1.0-service         u:object_r:hal_test_default_exec:s0
  • 1

2.4.hwservice_contexts 文件添加下面内容

# define HAL interface as a security object
android.hardware.test_service::ITest  u:object_r:hal_test_default_hwservice:s0
  • 1
  • 2

2.5.hwservicemanager.te文件添加下面内容

# grant hal_test_service permission of using hwbinder
hwbinder_use(hal_test_default)
  • 1
  • 2

2.6.system_app.te 文件添加下面内容

# APP access priviledges for hal_test_service
binder_call(system_app, hal_test_default)
allow system_app hal_test_default_hwservice:hwservice_manager find;
  • 1
  • 2
  • 3

2.7.platform_app.te文件添加下面内容

# APP access priviledges for hal_test_service
binder_call(platform_app, hal_test_default_service)
allow platform_app hal_test_default_hwservice:hwservice_manager find;
  • 1
  • 2
  • 3

3.修改manifest.xml

    <hal format="hidl">
        <name>android.hardware.test_default</name>
        <transport>hwbinder</transport>
        <version>1.0</version>
        <interface>
           <name>ITest</name>
           <instance>default</instance>
        </interface>
    </hal>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

修改compatibility_matrix.xml

    <hal format="hidl" optional="true">
        <name>android.hardware.test_default</name>
        <version>1.0</version>
        <interface>
            <name>ITest</name>
            <instance>default</instance>
        </interface>
    </hal>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

4.添加product_packages

PRODUCT_PACKAGES += \
       android.hardware.test_default@1.0-service
  • 1
  • 2

然后编译,烧录新版本,adb shell ps -A| grep test 查看进程是否启动.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/318974?site
推荐阅读
相关标签
  

闽ICP备14008679号