本文主要是介绍全志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=1write /sys/class/gpio_sw/blue_led/data 1write /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的权限;
- 在 下面增加一个.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)
- 修改文件
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
- 编译不通过
可能是使用了一些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 := 2BOARD_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,2BOARD_FLASH_BLOCK_SIZE := 4096BOARD_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 += \elseinit_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
这篇关于全志A133 android10 增加开机脚本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!