全志A133 android10 增加开机脚本

一,简述

给系统添加自定义脚本服务,希望在系统开机的过程执行。一般做自动化测试脚本的时候,会需要添加开机自启动服务,android的开机自启动服务涉及到selinux,以及init.rc的一些规则。


二,实现步骤

本文例子:在关机之前,设置闹钟,关机之后,有无被闹钟唤醒的需求。

1. 编写脚本

set_alarm.sh

#!/system/bin/sh
sleep 20   //添加延时,确保到了android界面
echo +30 > /sys/class/rtc/rtc0/wakealarm   //设置30秒的闹钟
reboot -p    //-p 参数走的是shotdown流程

2. 拷贝脚本

脚本编译默认拷贝到/system/bin目录中;

diff --git a/android/device/softwinner/common/common.mk b/android/device/softwinner/common/common.mk
index bda9c3de6f..89129e2ff3 100755
--- a/android/device/softwinner/common/common.mk
+++ b/android/device/softwinner/common/common.mk
@@ -7,6 +7,9 @@ PRODUCT_COPY_FILES += \
 PRODUCT_COPY_FILES += \
     frameworks/native/data/etc/android.software.ipsec_tunnels.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.ipsec_tunnels.xml
 
+PRODUCT_COPY_FILES += \
+    $(LOCAL_PATH)/set_alarm.sh:$(TARGET_COPY_OUT_SYSTEM)/bin/set_alarm.sh
+
 #media
 $(call inherit-product-if-exists, frameworks/av/media/libcedarc/libcdclist.mk)
 $(call inherit-product-if-exists, frameworks/av/media/libcedarx/libcdxlist.mk)

3. init脚本添加对应启动服务

在对应android方案下面的init.device.rc中添加服务;

diff --git a/android/device/softwinner/ceres-b6/init.device.rc b/android/device/softwinner/ceres-b6/init.device.rc
index 9058fe339e..dc7dffbf36 100644
--- a/android/device/softwinner/ceres-b6/init.device.rc
+++ b/android/device/softwinner/ceres-b6/init.device.rc
@@ -85,3 +85,11 @@ on property:sys.boot_completed=1
     write /sys/class/gpio_sw/blue_led/data 1
     write /sys/class/gpio_sw/red_led/data 0
 
+
+on property:sys.boot_completed=1
+   chmod 0777 /sys/class/rtc/rtc0/wakealarm    //修改闹钟节点的权限
+   service set_alarm /system/bin/set_alarm.sh
+   class core
+   critical
+   seclabel u:r:set_alarm:s0
+   shutdown critical

4. 增加权限

在shell 脚本启动的前,还需要设置selinux的权限;

  1. 在 下面增加一个.te文件,文件名字需要与执行的shell脚本一致,这里增加set_alarm.te文件,并将文件放到device/softwinner/common/sepolicy/private目录中:
# set_alarm seclabel is specified in init.<board>.rc  
type set_alarm, domain, coredomain;  
type set_alarm_exec, system_file_type, exec_type, file_type;  
init_daemon_domain(set_alarm)
  1. 修改文件device/softwinner/common/sepolicy/vendor/file_contexts,增加可执行权限;
diff --git a/android/device/softwinner/common/sepolicy/vendor/file_contexts b/android/device/softwinner/common/sepolicy/vendor/file_contexts
index acffb029d3..5fe1046156 100644
--- a/android/device/softwinner/common/sepolicy/vendor/file_contexts
+++ b/android/device/softwinner/common/sepolicy/vendor/file_contexts
@@ -126,6 +126,7 @@
 #vold
 /system/bin/ntfs-3g.probe       u:object_r:fsck_exec:s0
 /system/bin/fsck.exfat          u:object_r:fsck_exec:s0
+/system/bin/set_alarm.sh        u:object_r:set_alarm_exec:s0
 
 #fs_mgr
 /system/bin/make_ext4fs      u:object_r:e2fs_exec:s0

在编译进去之后,可以通过在 /system/bin/目录,执行ls -Z filePath,可以看到文件增加了可执行权限;

ls -Z /system/bin/set_alarm.sh
u:object_r:set_alarm_exec:s0 /system/bin/set_alarm.sh
  1. 编译不通过
    可能是使用了一些noallow的权限,为在te文件中给可执行程序的权限不够。

三,注意事项

测试如果暂时不需要selinux权限的话,建议可以将selinux关闭,这样可以避免运行脚本的时候遇到selinux权限的问题。
关闭方法如下,将selinux设置为permissive启动:

diff --git a/android/device/softwinner/ceres-b6/BoardConfig.mk b/android/device/softwinner/ceres-b6/BoardConfig.mk
index d38c2f4929..b319616798 100755
--- a/android/device/softwinner/ceres-b6/BoardConfig.mk
+++ b/android/device/softwinner/ceres-b6/BoardConfig.mk
@@ -26,7 +26,7 @@ BOARD_AVB_VBMETA_VENDOR_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP)
 BOARD_AVB_VBMETA_VENDOR_ROLLBACK_INDEX_LOCATION := 2
 
 BOARD_BOOTIMAGE_PARTITION_SIZE := $(call get_partition_size,boot,$(PARTITION_CFG_FILE))
-BOARD_KERNEL_CMDLINE += selinux=1 androidboot.selinux=enforcing androidboot.dtbo_idx=0,1,2
+BOARD_KERNEL_CMDLINE += selinux=1 androidboot.selinux=permissive androidboot.dtbo_idx=0,1,2
 BOARD_FLASH_BLOCK_SIZE := 4096
 BOARD_CACHEIMAGE_PARTITION_SIZE  := $(call get_partition_size,cache, $(PARTITION_CFG_FILE))
 BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE := ext4
diff --git a/android/system/core/init/Android.mk b/android/system/core/init/Android.mk
index c4f7d34b2d..8739e56984 100644
--- a/android/system/core/init/Android.mk
+++ b/android/system/core/init/Android.mk
@@ -16,7 +16,7 @@ init_options += \
 else
 init_options += \
     -DALLOW_LOCAL_PROP_OVERRIDE=0 \
-    -DALLOW_PERMISSIVE_SELINUX=0 \
+    -DALLOW_PERMISSIVE_SELINUX=1 \
     -DREBOOT_BOOTLOADER_ON_PANIC=0 \
     -DWORLD_WRITABLE_KMSG=0 \
     -DDUMP_ON_UMOUNT_FAILURE=0
  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值