安卓 (二) 怎么添加服务并自启动

  • 安卓环境
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=8.1.0
TARGET_PRODUCT=xxx
TARGET_BUILD_VARIANT=userdebug
TARGET_BUILD_TYPE=release
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a-neon
TARGET_CPU_VARIANT=cortex-a7
HOST_ARCH=x86_64
HOST_2ND_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-3.13.0-32-generic-x86_64-with-Ubuntu-12.04-precise
HOST_CROSS_OS=windows
HOST_CROSS_ARCH=x86
HOST_CROSS_2ND_ARCH=x86_64
HOST_BUILD_TYPE=release
BUILD_ID=OPM1.171019.011
  • 引言

如何 自启动

1. 服务的声明及定义
2. 服务的启动
3. 服务的权限
  • 服务的声明及定义

#data on
service data_on /system/bin/ext_data_on.sh  -u // 可见,  data_on 这个需要设置.
    user root
    
    oneshot

#data off
service data_off /system/bin/ext_data_off.sh  -d
    user root
    
    


#for V620 M5 update
service sky_M5_update /system/bin/sky_m5_update.sh
    class main
    user root
    group root
    

# SensorHub (Location Hub)
service xxx /system/bin/xxx
		class main
		user gps
		group system inet net_raw
		ioprio be 0
		seclabel u:r:xxx:s0

  • 服务的启动

方式1 

我们可以通过 property_set("ctl.start", service_xx); 来启动。
proprietories-source/phoneserver/ps_service.c:643:                property_set("ctl.start", "data_on");  //启动服务配置网卡参数
proprietories-source/phoneserver/ps_service.c:821:                property_set("ctl.start", "data_off"); //启动清除网卡参数脚本

方式2 

setprop dev.skym5update.enable=1 去启动sky_M5_update  service 来执行sky_m5_update.sh

setprop dev.skym5update.enable=0 来停止 sky_M5_update  service

on property:dev.skym5update.enable=1
    start sky_M5_update
on property:dev.skym5update.enable=0
    stop sky_M5_update


on boot
	start sky_M5_update  # 在 boot 时 ,就启动


-------------------------------- 启动顺序
on early-init
    ...
    start ueventd  //ueventd是init启动的第一个进程
    ...

on init
    ... // 创建各种路径,并写入一些参数

on late-init
    //trigger 会调用action_for_each_trigger("xxx", action_add_queue_tail);
    //从而将xxx section里的操作加入操作队列

    // mount文件系统相关的操作
    trigger early-fs 
    trigger fs 
    trigger post-fs
    trigger post-fs-data

    trigger load_all_props_action  //加载属性
    trigger firmware_mounts_complete

    trigger early-boot //将‘early-boot’中的操作加入执行队列
    trigger boot  //将‘boot’中的操作加入执行队列

on early-boot
    ... // kernel trace相关

on boot
    ...
    class_start core // 启动core类别的服务



on nonencrypted
      class_start main
      class_start late_start

on property:vold.decrypt=trigger_restart_min_framework
      class_start main

on property:vold.decrypt=trigger_restart_framework
     class_start main
     class_start late_start

  • 服务权限

1. te 文件的编写
device/qcom/sepolicy/common/xxx.te
type xxx, domain;
type xxx_exec, exec_type,vendor_file_type, file_type;

# 在有se 问题的时候仍然可以运行,并将全部se 问题打出
permissive lhd; 

#然后启用这个域
init_daemon_domain(xxx)



2. 除了se问题 服务权限的添加

audit2allow -i selinux_lhd.log > policy.te ; cat policy.te

3. se 编译问题 (Neverallow)
	system/sepolicy/public/domain.te
	https://blog.csdn.net/yxw0609131056/article/details/79784490

never allow

  • SELinux For Android(Android O)
  • Seandroid 基础
  • android sepolicy 最新小结
  • Android SeLinux权限问题和解决方法
  • Android 8.1 非系统进程设置系统域属性问题
  • Android 用户组权限,SELinux心得总结
  • Android SELinux Enforcing 模式下问题及解决
  • SEAndroid 解决案例
  • 自定义 SELinux
  • Android6.0 selinux没有对某个文件的权限(又neverAllow)处理方法
  • SELinux For Android(Android O)
  • Android O selinux违反Neverallow解决办法
  • SELinux报错修改篇

你可能感兴趣的:(安卓)