全志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

相关文章

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

Python脚本轻松实现检测麦克风功能

《Python脚本轻松实现检测麦克风功能》在进行音频处理或开发需要使用麦克风的应用程序时,确保麦克风功能正常是非常重要的,本文将介绍一个简单的Python脚本,能够帮助我们检测本地麦克风的功能,需要的... 目录轻松检测麦克风功能脚本介绍一、python环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指

shell脚本批量导出redis key-value方式

《shell脚本批量导出rediskey-value方式》为避免keys全量扫描导致Redis卡顿,可先通过dump.rdb备份文件在本地恢复,再使用scan命令渐进导出key-value,通过CN... 目录1 背景2 详细步骤2.1 本地docker启动Redis2.2 shell批量导出脚本3 附录总

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

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

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

Linux脚本(shell)的使用方式

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