接到一个集成功能的需求,然后看了一下是由上层应用 + linux进程实现的功能,需要增加开机自动启动linux进程,没弄过有点懵。

这个不怎么正确,仅供参考,在权限那块需要更改,放到system下

环境

  1. android 9.0
  2. mtk 平台

实现思路

因为集成的功能只是demo状态,对应的功能提供公司只提供的是三个apk,5个动态库(*.so),一个linux可执行程序和一个可执行程序的配置文件。

在linux可执行程序执行之前,这个功能还需要设置一个环境变量,尝试了几种方式,改变文件放置位置、权限,但是最终还是失败告终。有点沮丧了,重新分析一次,决定要用shell实现设置环境变量,接着执行linux可执行程序,最终是这种方式实现了。

实现

1. 编写shell

通过shell脚本实现设置环境变量,再启动目标linux进程
shell文件/system/bin/acr/startacr.sh

#!/system/bin/sh
#因为这个linux可执行程序需要在可写目录执行,需要在对应目录写入记录文件,所以这里切换到可写的data目录
cd /data/
#因为需要,先设置环境变量
export LD_LIBRARY_PATH=/mnt/vendor/linux_rootfs/lib:/system/bin/acr
#执行linux程序
/system/bin/acr/alacr
2. 配置开机启动shell脚本

需要修改init.rc文件(所在目录:system\core\rootdir,有些平台在device/projectName/也可以),实现开机启动shell脚本,具体的init.rc语法可以看深入分析AIL语言及init.rc文件

直接在init.rc文件后面加入就好。
因为我这个linux进程需要在root权限执行,所以user、group设置了root,如果不设置是当前用户,并不是root用户
注意:在网上看到有人说名字不应超过16个字符,没试过。如果还是启动不了,尝试将service后面的进程名字应该跟脚本的名字一致

service startacr /system/bin/acr/startacr.shuser root group rootclass mainoneshot

class main 就实现开机执行了,并不需要在on property:sys.boot_completed=1 后面添加start startacr

3. 增加需要的权限

在shell 脚本启动的前,还需要设置selinux的权限
1) 在 下面增加一个.te文件,文件名字需要与执行的shell脚本一致,这里增加startacr.te文件
permissive startacr 在调试阶段需要这一句,这样权限就可以获得豁免,并且在logcat中可以打印出需要的权限

#####################
# startacr sh selinux
#
#####################
type startacr, domain,coredomain;
type startacr_exec, exec_type, file_type;
init_daemon_domain(startacr)
permissive  startacr

2) 修改文件device/projectName/seplolicy/file_contexts,增加可执行权限。
在编译进去之后,可以通过在 /system/bin/acr/目录,执行ls -Z filePath,可以看到文件增加了可执行权限。

/system/bin/acr/startacr.sh    u:object_r:startacr_exec:s0

3)在te文件中增加权限,在logcat中找到

avc: denied { search } for pid=11710 comm="startacr.sh" name="sh" dev="mmcblk0p21" ino=502 scontext=u:r:startacr:s0 tcontext=u:object_r:shell_exec:s0 tclass=file permissive=1

根据规则allow scontext tcontext : tclass permission在startacr.te后面增加对应的权限。

allow startacr shell_exec:file { search };

permissive=1 这是权限已经获得,这里只是打印,不存在权限问题了,但是后面正式版本的时候,应该加上对应缺少的权限,去掉permissive startacr。

4 编译不通过

编译不通过,可能是使用了一些noallow的权限,那也是因为在te文件中给可执行程序的权限不够,例如增加coredomain,然后就不会提示一些权限的noallow。这一类问题应该不要在百度搜索,找不到。

总结

在处理这个问题的过程中,因为没有配过这些,还是遇到很多问题,并且一开始尝试的方式都不多,还是花了很长时间,有人可以请教一下就是最好的,少走弯路,就像需要配置te文件,我一开始只是以为只需要增加可执行权限就可以了,但是在init.rc中配置了权限,但是有问题。

文件在system/bin目录下面,直接使用PRODUCT_COPY_FILES实现文件复制。

Android 开机启动shell脚本相关推荐

  1. Android8.0 开机启动脚本,Android开机启动shell脚本(Android 8.0测试OK)

    Android 下做开机启动shell脚本的大致流程如下: 目录 写shell脚本 为脚本写te文件 在init.rc中启动脚本 添加Selinux权限 写shell脚本 比如新建一个init.tes ...

  2. android开机启动shell脚本

    1.system/core/rootdir/init.rc service start_test /system/bin/test.sh user root     group root     di ...

  3. linux启用shell脚本,linux下开机启动shell脚本

    背景 设置比较炫酷的开机启动脚本 首先,新建一个kaiji.sh 后缀名的脚本-->新建的脚本在任何位置创建都可以,只要在使用.sh 文件,时候使用绝对路径即可 [root@hf-01 ~]# ...

  4. Android init.rc启动shell脚本

    init.rc启动shell脚本 0. 前言 1. 编写脚本 test.sh 2. 修改 .mk 配置文件,将创建的 test.sh 编译到系统分区 3. 配置 SELinux 权限 3.1 创建 t ...

  5. 利用mac的launchd,开机后定时启动shell脚本

    利用mac的launchd开机后定时启动shell脚本 shell脚本 mac开机启动 概念 配置Mac开机后定时启动 参考文档 利用mac的launchd,开机后定时启动shell脚本 利用mac ...

  6. Android开机启动流程

    Android开机启动流程 一.APPS PBL(Application primary boot loader:主引导加载程序) 二.XBL(Extensible boot loader:可扩展引导 ...

  7. 【开机启动】win11开机启动软件,win11开机启动bat脚本(开机启动vbs文件)

    目录 编辑bat脚本 编辑vbs脚本 让vbs脚本开机启动 编辑bat脚本 简单介绍一下 ::是注释前缀 echo 是输出内容到控制台,等同于print @echo off可以关闭路径显示,自己尝试写 ...

  8. Android开机启动流程简析

    Android开机启动流程简析 (一) 文章目录 Android开机启动流程简析 (一) 前言 一.开机启动的流程概述 二.Android的启动过程分析 (1).总体流程 init简述 Zygote简 ...

  9. Ubuntu 16.04设置rc.local开机启动命令/脚本的方法

    Ubuntu 16.04设置rc.local开机启动命令/脚本的方法(通过update-rc.d管理Ubuntu开机启动程序/服务) 注意:rc.local脚本里面启动的用户默认为root权限. 一. ...

最新文章

  1. python 投票脚本_使用Python脚本拉取2014 CSDN博客之星投票情况
  2. 使用WinSCP上传文件到指定服务器
  3. 中国黄金行业投资需求与收益预测报告2022年版
  4. NDK(三方库引入、Mk文件)
  5. scrapyd部署_第八章 第一节 scrapyd和scrapy-client
  6. MATLAB入门(二)
  7. python + mysql 实现账号管理系统
  8. ttys和tty_Linux中tty、pty、pts的概念区别
  9. Kalman Filter—Step by step Derivation of Kalman Gain
  10. Windows XP Embedded 官方下载地址
  11. Sharepoint 2010 对话框框架
  12. 个人作业week7——前端开发感想总结
  13. 猿创征文|弃文从工,从小白到蚂蚁工程师,我的 Java 成长之路
  14. Skyscrapers (easy version)
  15. 操作系统中的进程调度策略有哪几种
  16. android 加载图片进度条,实现微信图片加载显示进度的效果-LoadingProgress
  17. wireshark流量分析--巧观察
  18. 智慧点餐系统源码 扫码点餐小程序源码
  19. Flink的批流统一:Ⅱ
  20. 当年腾讯为什么从QQ转移扶植到微信,如今微信已撑起腾讯半壁江山

热门文章

  1. VSM Studio uln2003驱动步进电机+单按键启保停正反转八拍控制
  2. sms-activate 一款强大的短信验证码接收工具【保姆级教程】
  3. [健康小常识]夏季每日吃半个西瓜可降温解暑抗衰老
  4. mysql字符串不等于怎么优化_MySQL 数据类型优化(二:字符串) | 剑花烟雨江南...
  5. Android 传感器
  6. 顺丰品牌研究http://www.kiees.cn/sf/express/brand.htm
  7. 微软SqlServerHelper
  8. c++ 字符串与数字相互转换
  9. [转]秀下我的瓦伦西亚
  10. R图转成Word、PPT、Excel、HTML、Latex、矢量图等