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 查看进程是否启动.