全志A133 android10 增加开机脚本

2024-05-11 19:44

本文主要是介绍全志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的权限;

  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 := 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 增加开机脚本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/980482

相关文章

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Ubuntu设置程序开机自启动的操作步骤

《Ubuntu设置程序开机自启动的操作步骤》在部署程序到边缘端时,我们总希望可以通电即启动我们写好的程序,本篇博客用以记录如何在ubuntu开机执行某条命令或者某个可执行程序,需要的朋友可以参考下... 目录1、概述2、图形界面设置3、设置为Systemd服务1、概述测试环境:Ubuntu22.04 带图

Golang实现Redis分布式锁(Lua脚本+可重入+自动续期)

《Golang实现Redis分布式锁(Lua脚本+可重入+自动续期)》本文主要介绍了Golang分布式锁实现,采用Redis+Lua脚本确保原子性,持可重入和自动续期,用于防止超卖及重复下单,具有一定... 目录1 概念应用场景分布式锁必备特性2 思路分析宕机与过期防止误删keyLua保证原子性可重入锁自动

CentOS7增加Swap空间的两种方法

《CentOS7增加Swap空间的两种方法》当服务器物理内存不足时,增加Swap空间可以作为虚拟内存使用,帮助系统处理内存压力,本文给大家介绍了CentOS7增加Swap空间的两种方法:创建新的Swa... 目录在Centos 7上增加Swap空间的方法方法一:创建新的Swap文件(推荐)方法二:调整Sww

Android 12解决push framework.jar无法开机的方法小结

《Android12解决pushframework.jar无法开机的方法小结》:本文主要介绍在Android12中解决pushframework.jar无法开机的方法,包括编译指令、框架层和s... 目录1. android 编译指令1.1 framework层的编译指令1.2 替换framework.ja

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片