全志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服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打

centos6一键安装vsftpd脚本

centos6一键安装vsftpd脚本 手动安装vsftpd参考教程:Centos下安装Vsftpd的图文教程 vsftpd脚本功能: 1.安装 (命令执行:sh xxx.sh)2.添加ftp用户 (命令执行:sh xxx.sh add)3.卸载vsftpd (命令执行:sh xxx.sh uninstall) 测试环境:centos6 x64 centos6 x86(测试centos7以

Windows下Nginx的安装及开机启动

1、将nginx-1.16.1.zip解压拷贝至D:\web\nginx目录下。 2、启动Nginx,两种方法: (1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过。 (2)打开cmd命令窗口,切换到nginx目录下,输入命令 nginx.exe 或者 start nginx ,回车即可。 3、检查nginx是否启动成功。 直接在浏览器地址栏输入网址 http://lo

Android逆向(反调,脱壳,过ssl证书脚本)

文章目录 总结 基础Android基础工具 定位关键代码页面activity定位数据包参数定位堆栈追踪 编写反调脱壳好用的脚本过ssl证书校验抓包反调的脚本打印堆栈bilibili反调的脚本 总结 暑假做了两个月的Android逆向,记录一下自己学到的东西。对于app渗透有了一些思路。 这两个月主要做的是代码分析,对于分析完后的持久化等没有学习。主要是如何反编译源码,如何找到

Lua 脚本在 Redis 中执行时的原子性以及与redis的事务的区别

在 Redis 中,Lua 脚本具有原子性是因为 Redis 保证在执行脚本时,脚本中的所有操作都会被当作一个不可分割的整体。具体来说,Redis 使用单线程的执行模型来处理命令,因此当 Lua 脚本在 Redis 中执行时,不会有其他命令打断脚本的执行过程。脚本中的所有操作都将连续执行,直到脚本执行完成后,Redis 才会继续处理其他客户端的请求。 Lua 脚本在 Redis 中原子性的原因

CentOs7上Mysql快速迁移脚本

因公司业务需要,对原来在/usr/local/mysql/data目录下的数据迁移到/data/local/mysql/mysqlData。 原因是系统盘太小,只有20G,几下就快满了。 参考过几篇文章,基于大神们的思路,我封装成了.sh脚本。 步骤如下: 1) 先修改好/etc/my.cnf,        ##[mysqld]       ##datadir=/data/loc

PHP抓取网站图片脚本

方法一: <?phpheader("Content-type:image/jpeg"); class download_image{function read_url($str) { $file=fopen($str,"r");$result = ''; while(!feof($file)) { $result.=fgets($file,9999); } fclose($file); re

Python脚本:对文件进行批量重命名

字符替换:批量对文件名中指定字符进行替换添加前缀:批量向原文件名添加前缀添加后缀:批量向原文件名添加后缀 import osdef Rename_CharReplace():#对文件名中某字符进行替换(已完结)re_dir = os.getcwd()re_list = os.listdir(re_dir)original_char = input('请输入你要替换的字符:')replace_ch

Python脚本:TXT文档行数统计

count = 0 #计数变量file_dirs = input('请输入您要统计的文件根路径:')filename = open(file_dirs,'r') #以只读方式打开文件file_contents = filename.read() #读取文档内容到file_contentsfor file_content in file_contents: