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

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)

这个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;

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 };

2.3.file_contexts文件添加下面内容

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

2.4.hwservice_contexts 文件添加下面内容

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

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

# grant hal_test_service permission of using hwbinder
hwbinder_use(hal_test_default)

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;

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;

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>

修改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>

4.添加product_packages

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

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

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值