首页 > 系统相关 >android12编译三方提供的bin文件,通过selinux配置并实现rc开机启动

android12编译三方提供的bin文件,通过selinux配置并实现rc开机启动

时间:2024-08-02 21:54:00浏览次数:12  
标签:bin android12 rc carplaymonitor system LOCAL 编译 selinux type

在这里插入图片描述

为三方bin建立工程

vendor/自己公司目录下建立工程文件夹,我这里以CarpalyMonter工程,新建如下文件
在这里插入图片描述

CarplayMonitor为三方bin文件
Android.mk模块编译配置如下:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := carplaymonitor	#模块名字
LOCAL_SRC_FILES := CarplayMonitor #源文件
LOCAL_INIT_RC := carplaymonitor.rc #开机启动文件
LOCAL_MODULE_TAGS  := optional
LOCAL_MODULE_CLASS := EXECUTABLES #执行文件
LOCAL_MODULE_PATH := $(PRODUCT_OUT)/system/bin #输出目录
LOCAL_SHARED_LIBRARIES := libcutils liblog libmdnssd libnetutils libstdc++ libtinyalsa #依赖库,每个不一样。改成自己的,不知道不写编译时候回提示修复,复制粘贴上即可
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true #不检测依赖
include $(BUILD_PREBUILT)

CarPlayMonitor.mk系统编译配置如下:

 #产品包添加编译模块
PRODUCT_PACKAGES += \
    carplaymonitor
# selinux增加本模块配置路径
BOARD_SEPOLICY_DIRS += \
    vendor/External/CarplayMonitor/sepolicy

carplaymonitor.rc开机启动配置文件如下:

service carplaymonitor /system/bin/carplaymonitor
    class main
    user root
    group root system
    disabled
    oneshot
#开机完成后再执行
on property:sys.boot_completed=1
    start carplaymonitor

carplaymontior.te配置如下:

type carplaymonitor, domain, coredomain;
type carplaymonitor_exec, exec_type, file_type, system_file_type;

init_daemon_domain(carplaymonitor)

file_contexts配置如下:

# System files
/system/bin/carplaymonitor          u:object_r:carplaymonitor_exec:s0

carplaymontior.te的system_file_type配置如何确定?

我的bin文件输出路径是system/bin目录,使用adb进入后执行命令ls lZ查看即可确定:
在这里插入图片描述

编译调试

编译完成后,烧录固件到机器中,如果使用命令ps -A|grep carplaymontor查看模块是否自启动成功,如果失败,可以通过手动执行的方式使用控台命令 ./,查看脚本功能是否可以启动。
如果有权限报错,可以先临时关闭selinux进行调试,临时关闭selinux方式如下:

setenforce 0

在adb中执行,再次手动执行。

使用 audit2allow 工具添加SELinux权限

启动程序会在log输出如下avc的log,根据上面应用的命名过滤下。
在这里插入图片描述

使用文本记录记录保存为avc_log.txt。命名随意,注意仅仅保存avc以后日志
在这里插入图片描述

进入源码路径执行

source build/envsetup

再执行

lunch [自己的镜像]

如果不执行以上命令有如下错误:
在这里插入图片描述

将avc_log.txt上传到AOSP源码audit2allow路径external/selinux/prebuilts/bin/audit2allow
使用ssh执行如下命令:


audit2allow -i avc_log.txt

将allow如下输出复制到te文件中,启动编译。
在这里插入图片描述

carplaymontior.te配置添加avc后如下:

type carplaymonitor, domain, coredomain;
type carplaymonitor_exec, exec_type, file_type, system_file_type;

init_daemon_domain(carplaymonitor)
# 生成的te配置
allow carplaymonitor tty_device:chr_file { ioctl open read write };

单编通过的话说明语法没问题,也没有触发 neverallow 。然后再全编译验证即可。

nerverallow处理

出现了nerverallow是比较头疼的事情,出现的原因主要是路径使用了不允许的权限导致的,解决办法一般有2个:

在出现报错的地方,强行注释掉google不允许的权限,这样可能会造成google的测试无法通过。最好不要使用,高版本对权限限制严格,最好不要夸分区调用,如system调用vendor里的文件。
通过其他办法绕过该权限,如vendor访问system是没办法实现的,那就可以将需要访问的资源再编译一份放到vendor。

标签:bin,android12,rc,carplaymonitor,system,LOCAL,编译,selinux,type
From: https://blog.csdn.net/suyuan1990115/article/details/140877121

相关文章

  • NewStarCTF WEEK5|WEB 4-复盘
    打开题目研究一圈没啥营养价值下载源码发现好东西if(file_exists($page)){require_once$page;}else{require_once'pages/error_page.php';}活的文件包含我们直接利用?+config-create+/&page=../../../../../usr/l......
  • torch.utils.data.Dataset 和 torch.utils.data.DataLoader
    torch.utils.data是PyTorch中用于数据加载和预处理的模块。通常结合使用其中的Dataset和DataLoader两个类来加载和处理数据。Datasettorch.utils.data.Dataset是一个抽象类,用于表示数据集。需要用户自己实现两个方法:__len__和__getitem__。__len__方法返回数据集的大小,__getit......
  • pytorch深度学习实践(刘二大人)课堂代码&作业——线性回归
    一、课堂代码1.torch.nn.linear构造linear对象,对象里包含了w和b,即直接利用linear实现wx+b(linear也继承自module,可以自动实现反向传播)2.torch.nn.MSELoss损失函数MSE包含2个参数:size_average(求均值,一般只考虑这个参数)、reduce(求和降维)3.torch.optim.SGDSGD优化器,设置......
  • NewStarCTF WEEK5|WEB pppython?
    对源码进行简单的分析<?php//检查`hint`请求参数是否等于指定的数组值if($_REQUEST['hint']==["your?","mine!","hint!!"]){//如果条件满足,设置响应内容类型为纯文本header("Content-type:text/plain");//执行系统命令`ls/-la`列出......
  • ElasticSearch分布式搜索引擎原理与代码实例讲解
    ElasticSearch分布式搜索引擎原理与代码实例讲解1.背景介绍1.1问题的由来在当今的数字时代,海量的数据被不断产生和存储。如何高效地检索和管理这些庞大的数据集成为了一个关键挑战。传统的关系型数据库虽然在事务处理和数据一致性方面表现出色,但在处理非结构化数据和......
  • NewStarCTF WEEK5|WEB Ye's Pickle
    下载附件#-*-coding:utf-8-*-importbase64importstringimportrandomfromflaskimport*importjwcrypto.jwkasjwkimportpicklefrompython_jwtimport*app=Flask(__name__)#创建Flask应用实例defgenerate_random_string(length=16):""&q......
  • Codeforces Round 909 (Div. 3)--题目描述无法名状
    好吧,可能是我的文字功底太弱了,首先滴就是这个B题题目链接我一开始还以为这个能排序,就是算排完序之后的最大差,但是仔细一看题目,好像不要求使用排序,于是就尝试暴力做法。我发现的暴力做法是枚举k,直到k==n/2为止,当时是因为没有开longlong导致WA了,后面发现时间不是怎么多就没有......
  • Pytorch笔记|小土堆|P10-13|transforms
    transforms对图像进行改造最靠谱的办法:根据help文件自行学习transforms包含哪些工具(类)以及如何使用————————————————————————————————————自学一个类时,应关注:1、如何使用各种工具(类)的使用思路:创建对象(实例化)——>传入参数,调用函数(如有__......
  • [USACO20OPEN] Exercise P
    有意思的计数题。题目链接题意求所有长度为\(n\)的排列的所有环长的\(\text{lcm}\)的乘积。\(n\leq7500\)解法先min-max容斥把\(\text{lcm}\)换成\(\gcd\)。求\(\prod\limits_{\sigma}\prod\limits_{T\neq\emptyset}\gcd(T)^{(-1)^{|T|}}\),其中\(T\)表......
  • Codeforces Round 962 (Div. 3)
    Abstract第一次打CF的比赛~~~~A.LegsIdea签到题,没什么好说的。Code#include<bits/stdc++.h>usingnamespacestd;intmain(){intt;scanf("%d",&t);while(t--){intn;scanf("%d",&n);int......