[RK3568 Android13]系统根目录的文件夹下创建文件夹或文件

RK3568 Android 13 开机时间优化-HAL 服务延时启动 在嵌入式 Android 系统开发中,开机速度直接影响用户体验。本文通过调整 HAL 服务启动时机,在 RK3568 平台上成功缩短开机时间约 2-3 秒,记录完整的分析与实施过程。 阅读详情

平台:RK3568

系统:Android 13

1、需求描述

为了实现系统内置的APP在系统中某些用户无法看到的目录下创建文件夹或文件,需要系统创建文件夹,内置的系统APP具有读写权限,以及系统源码也可以读写该目录或文件。

比如:我们需要在系统根目录data或mnt文件夹下创建一个文件夹mcuhot,需要按照如下操作。

1)在init.rc文件中实现创建目录指令

2)在系统代码中实现某些读写逻辑

3)SELlinux限制添加所需的权限

2、功能实现

1)在init.rc文件中实现创建目录指令

在init.rc添加如下指令实现在目录data下创建文件夹mcuhot.

添加:

mkdir /data/mcuhot
chown system system /data/mcuhot
chmod 0777 /data/mcuhot

文件路径:system/core/rootdir/init.rc

on property:sys.boot_completed=1
    bootchart stop
    # Setup per_boot directory so other .rc could start to use it on boot_completed
    exec - system system -- /bin/rm -rf /data/per_boot
    mkdir /data/per_boot 0700 system system encryption=Require key=per_boot_ref
    
    mkdir /data/sdady
    chown system system /data/sdady
    chmod 0777 /data/sdady

# system server cannot write to /proc/sys files,
# and chown/chmod does not work for /proc/sys/ entries.
# So proxy writes through init.
on property:sys.sysctl.extra_free_kbytes=*
    exec -- /system/bin/extra_free_kbytes.sh ${sys.sysctl.extra_free_kbytes}

2)在系统代码中实现某些读写逻辑

系统代码实现逻辑功能代码此处忽略。主要介绍编写完成后编译,下载更新系统后,并没有实现预期功能,抓取日志进行分析。

从日志分析来看,创建的mcuhot,系统APP没有打开权限,也就是我们frameworks实现的逻辑代码,没有打开目录权限,从后续的日志分析来看,也没有读取权限,因此我们这里需要简单了解SELinux安全模块。

安全增强型linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。SELinux 主要由美国国家安全局开发。2.6 及以上版本的 Linux 内核都已经集成了 SELinux 模块。SELinux 的结构及配置非常复杂,而且有大量概念性的东西,要学精难度较大。很多 Linux 系统管理员嫌麻烦都把 SELinux 关闭了。

关于SELinux我们不过多介绍,网络上有详细介绍和使用。目前只解决如何处理我们的问题。刚才提到我们系统APP没有打开和读取权限,由于SELinux限制了在对根目录下的文件夹及文件的打开,读取,写入等各种操作。

如何添加权限呢?从日志分析可知,mcuhot没有读取被限制,后续日志发现也没有打开权限,日志关键部分如下:

---------------------------------------------------------------------------------------------------------------------------------

auditd  : type=1400 audit(0.0:562): avc: denied { read } for comm="DefaultDispatch" name="mcuhot" dev="dm-8" ino=1391 scontext=u:r:system_app:s0 tcontext=u:object_r:system_data_file:s0 tclass=dir permissive=1

... ...

DefaultDispatch: type=1400 audit(0.0:563): avc: denied { open } for path="/data/sdady" dev="dm-8" ino=1391 scontext=u:r:system_app:s0 tcontext=u:object_r:system_data_file:s0 tclass=dir permissive=1

---------------------------------------------------------------------------------------------------------------------------------

SELinux添加权限格式:

allow 源类型 目标类型:访问类型 操作权限

实现代码:

allow system_app system_data_file:dir { read open };

3)SELlinux限制添加所需的权限

在system_app.te添加权限打开和读取权限,各平台芯片system_app.te文件,所处目录各不相同。在文件最后添加如下代码:

allow system_app system_data_file:dir { read open };
 

路径:device/rockchip/common/sepolicy/vendor/system_app.te

dontaudit system_app mnt_vendor_file:dir search;
#for gpu
allow system_app sysfs_usb:file rw_file_perms;
#for ota
allow system_app selinuxfs:file { read open };
allow system_app mnt_media_rw_file:dir { getattr };
#for hdmi
allow system_app sysfs_hdmi:file rw_file_perms;
allow system_app sysfs_zram:dir r_dir_perms;
allow system_app sysfs_zram:file rw_file_perms;
allow system_app proc_stat:file { read open getattr };
#for samba
allow system_app metadata_file:dir {getattr};
allow system_app block_device:dir {search};
#for devicetest
#allow system_app system_app_data_file:file { execute execute_no_trans };
allow system_app system_data_file:file { read };
allow system_app { sysfs_leds metadata_file }:dir { search };

#TODO removed for Q
#allow system_app vendor_file:file { read open };
allow system_app unlabeled:filesystem { getattr };
allow system_app unlabeled:file { getattr open read write unlink rename };
allow system_app unlabeled:dir { open search read getattr write remove_name add_name };
allow system_app cache_file:lnk_file { read };
allow system_app cache_recovery_file:dir {search create read write open add_name getattr remove_name};
allow system_app cache_recovery_file:file {rw_file_perms create unlink setattr};

#TODO removed for Q
#allow system_app vendor_file:file { getattr };
allow system_app cache_file:dir search;
#set_prop(system_app,exported_system_prop)
set_prop(system_app,powerctl_prop)

allow system_app abc_data_file:file { read getattr };
allow system_app abc_data_file:dir { open getattr read search };

set_prop(system_app, debug_prop)

rw_rockchip_graphic_device(system_app)

allow system_app block_device:dir { search read open getattr };
allow system_app mnt_media_rw_file:dir { search read open getattr };
allow system_app asec_apk_file:dir { search read open getattr };

hal_client_domain(system_app, hal_light)
hal_client_domain(system_app, hal_power)
hal_client_domain(system_app, hal_health)
binder_call(system_app, hal_keymint_default)
binder_call(system_app, hal_usb_impl)
binder_call(system_app, update_engine)
allow system_app proc_pagetypeinfo:file r_file_perms;

allow system_app mnt_sdcard_file:lnk_file r_file_perms;
allow system_app mnt_pass_through_file:dir r_file_perms;
allow system_app system_data_file:dir { read open };

RK3568 Android 13开机时间优化-系统应用裁剪实践 本文基于 RK3568 Android 13 平台,系统介绍了如何通过裁剪不必要的系统预装应用来优化开机时间。文章详细阐述了从查看系统应用、定位打包源文件、修改编译配置的完整流程。通过移除摄像头、NFC、GPS、打印服务等无关应用及Rockchip预置应用(RKDeviceTest、RkExplorer等),显著减少了系统体积并加快了启动速度。本文旨在为Android系统开发者提供一份可操作的应用裁剪实践指南。 阅读详情

相关推荐

RK3588 编译 Android 13 镜像方法

下载完成后,在解压前先校验下MD5码:# 解压Android源码#进入Android SDK根目录#执行脚本安装依赖$./install_dependencies.sh 并输入密码即可开始自动安装依赖。# 切换python2以保证u-boot编译通过# 执行设置环境变量:# 列出配置菜单lunch请注意:使用一键编译命令之前需要设置环境变量,选择好自己需要编译的平台。

tianpu2320959696的博客 1559

android 9.0 动态修改开机动画保存的路径

需求:客户要求开机之后,自己手动修改开机动画,并且重启 恢复出厂设置,都不会是修改的动画还原回刷机的动画。 初始做法:把开机动画保存在data分区,然后开机的播动画的时候,去播放。后面发现有概率不播放这个动画,去播放原来刷机的动画。进一步发现是,data分区开机动画播放的时候没加载到。 然后各种想办法,都没用。 最终做法:后面和OMD商量找到/mnt/vendor/persist/ 这个路径也可以播放动画,经过N次+权限之后,动画播放正常。 会长的代码修改如下: ...

wed110的专栏 2908

RK3568/RK3588 Android12内核单独编译与烧录实战教程

嵌入式开发中,Android系统编译链路长、耗时长,尤其是RK3568/RK3588平台的全量编译动辄数小时,严重拖慢内核迭代效率。理解内核编译原理后,你会发现大部分驱动和设备树改动只需生成boot.img即可。通过复用SDK已有的基础设施,单独编译内核可显著缩短构建周期,配合分区定向烧录,能快速验证硬件改动。该方案适用于GPIO调整、I2C外设调试、LCD初始化时序修改等场景,同时也需明确其边界:上层framework或HAL变更仍需全量编译。本文围绕RK3568/RK3588 Android12 SDK

weixin_34331102的博客 376

Android Selinux介绍,如何添加selinux 权限

文件类: type=1400 audit(0.0:104avc: denied { search } for name="vendor" dev="tmpfs" ino=9241 scontext=u:r:dumpstate:s0 tcontext=u:object_r:mnt_vendor_file:s0 tclass=dir permissive=0 分析: 缺少的权限:{write/read/search} 谁缺少权限:scontext=u:r:dumpstate:s0 哪个文件的权限:t.

yinhunzw的专栏 1万+

RK3568嵌入式开发全流程实战:从环境搭建到驱动调试与系统优化

嵌入式系统开发是连接硬件与软件的关键技术领域,其核心在于通过操作系统内核、驱动程序和文件系统,实现对特定硬件平台的资源管理与调度。其技术价值在于为智能终端、工业控制和物联网设备提供稳定、高效且可定制的软件运行环境。在工业网关、边缘计算和智能显示终端等应用场景中,开发者常需进行深度的系统定制与驱动适配。本文聚焦于瑞芯微RK3568这一热门嵌入式平台,针对其开发过程中常见的系统剪裁、驱动集成及网络连接等工程挑战,提供了从环境搭建到量产部署的完整实战指南,特别是对Android系统剪裁和Wi-Fi连接等典型问题进

weixin_29194693的博客 372

[RK3568 Android11] 教程之init.rc文件语法详解

总目录链接:[RK3568 Android11] 本专栏说明和总目录 目录 一、init.rc介绍 二、rc文件语法 1、rc 文件主要包含 2、语法 3、Actions 4、Commands 5、Services 6、Options 一、init.rc介绍 Android系统底层开发过程,init.rc相关文件修改是必不可少;init.rc是一个可配置的初始化文件,在讲解init.rc文件之前,我们先了解下init进程,init是android系统内核起来的用户空...

~未来可期~ 3571

RK3568 Android 13 驱动适配实战:从零开始让SDK在自己的板子上跑起来

本文详细介绍了在RK3568安卓13 SDK中移植SDK的关键步骤,为后面板载外设的开发提供环境编译基础。文章提供了从零开始移植SDK的完整指南,包含具体文件路径和配置参数,可帮助开发者快速完成基础适配工作。

x150061的博客 1608

RK3568平台开发系列讲解(驱动篇)RC子系统

RC子系统

内核笔记 2013

rk3568安卓13驱动适配-红外遥控

本文详细记录了在RK3568安卓13 SDK中适配红外遥控功能的过程。重点阐述驱动适配方法,包括设备树配置(PWM3引脚定义、遥控键值映射)及调试技巧(打印键值日志)。针对应用层功能实现,讲解了如何通过修改PhoneWindowManager.java拦截MENU/HOME键事件,实现自定义功能(如弹出设置界面、返回指定应用)。此外,还解决了TV版软键盘适配等问题,并分析了Generic.kl文件键值映射异常的原因。

x150061的博客 287

Android系统 init.rc文件详解

在这篇博客中,深入探讨了Android系统中的init.rc文件,这是Android系统启动和运行的关键部分。详细解析了init.rc文件中的命令和动作,包括内置命令,外部命令,属性触发器和事件触发器,并且详细介绍了它们的使用和定义。还讨论了Android 11++中init.rc文件的执行顺序,以及如何根据系统属性和事件来定义和触发动作。这篇博客对于理解和控制Android系统的启动和运行过程非常有帮助。

我其实什么都不会 5531

RK3568平台开发系列讲解(环境篇)编译 Android 固件

📢本篇将介绍如何编译 Android 固件。

内核笔记 3238

Android 13 系统应用裁剪:RK3568平台下的精简之道

本文分享了在RK3568 Android13 SDK上进行系统应用裁剪的实践经验。重点说明了如何通过重命名packages/apps/和vendor/rockchip/common/apps/目录下的Android.bp文件来移除不需要的系统应用,如计算器、录音机、浏览器等。

x150061的博客 412

Hive中的四种排序方式(order by,sort by,distribute by,cluster by)使用与区别详解

在平时的Hive数仓开发工作中经常会用到排序,而Hive中支持的排序方式有四种,这里结合具体的案例详细介绍一下他们的使用与区别: order by sort by distribute by cluster by 一、order by(全局排序) 1、作用:全局排序,只有一个reducer。 order by 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序),也正因为只有一个reducer,所以当输入的数据规模较大时会导致计算时间较长。   set hive.mapr

weixin_43230682的博客 1万+

从零到一:RK3568 Android13系统目录权限的SELinux实战避坑指南

本文针对RK3568平台Android13系统开发中的SELinux权限管理难题,提供实战避坑指南。重点解析system_app访问系统目录被拒绝的SELinux策略问题,通过分析avc拒绝日志、编写精确策略规则(如allow语句),帮助开发者快速定位和解决权限配置问题,提升开发效率。

year5的博客 633

MTK-AWB 小结 (二)

调试总结:可以将offset 对应的ratio加大,保留更多的喜好色(偏色),影响WF statistic gain,从而影响最终的awb gain。这一部分前期CCT校准的时候就会算出一组默认值,当然这个offset offse 值用于优化T,S,wf 光下的偏色喜好度. offset。后面遇到 A H Shad 光收白或者偏色,还可以优化 A 的offset ,H offset,shad offset.new offset 计算过程(Day locus offset 和M/G offset )

qq_46056347的博客 1166

铭飞MCMS源码部署

文章目录前言一、下载铭飞源码二、部署源码1.使用IDEA打开源码2.配置tomcat环境2.1下载tomcat并测试是否可以成功启动(此处不赘述)2.2在IDEA中安装tomcat环境并配置3.添加数据库,并配置3.1新建数据库3.2 导入sql配置三、启动测试 前言 铭飞MCMS基于IDEA、tomcat和mysql的环境搭建。 提示:以下是本篇文章正文内容,下面案例可供参考 一、下载铭飞源码 gitee:https://gitee.com/mingSoft/MCMS/releases(各种版本按需下

MARS_ZORO的博客 4062

RK3568 android 13 内置 google GMS服务

需求:Android 系统在国外使用安装app很多需要gms服务,否则无法正常使用,所以出厂前必须要把GMS包集成进系统。3.然后在目录device/rockchip/rk356x/rk3568_r/rk3568_r.mk下修改如下。2.解压gms包 并放到Android SDK根目录的vender文件夹下。文中红色部分为修改部分。//gms包中的gms文件。

a546036242的博客 3488

DAX Studio--导出PowerBi数据---(不使用复制表如何快速导出csv文件 / 如何导出百万级/千万级乃至亿级的数据量)多图预警!

多图预警! 1、打开Dax 点击Connect 2、在这里选择正在打开的PowerBi文件,点击Contect 3、选择导出方式--File F、输入指令(输入 EVALUATE ' )单引号可以进行快速提示 5、点击Run 6、选择文件路径,以及保存类型等(一般情况下,我们常用的类型是 txt 或者 第一种 UTF-8 的csv 文件),点击保存即可,稍等片刻,导出完成! 7、导出完成,我这里总计是39W 行的数据量,约20+ 秒完成 ...

STR_Liang的博客 8157

Android13 增加产品配置文件

本文主要描述RK3568 Android13中添加产品配置文件的步骤,以下的描述以添加rk3568_taurus为例子进行讲述。

yanl1229的博客 441

VS2019+CAXACAD2023二次开发教程(一、环境搭建)

CAXACAD2023的二次开发相关文件和库都在的文件夹下。CAXACAD2023的默认开发环境是VS2019,如果是用VS2019的环境话,可以直接安装这个插件,安装好后就可以一键新建的项目,新建的项目会自动帮我们配置好所有的环境,并且生成必要的代码和初始的框架。(本来想用VS2022的,但配置环境太麻烦,用VS2022,增加一个环境变量是可以运行自带的例程的,但新建项目要配置的东西和环境太多,就放弃折腾了)

weixin_42968757的博客 4616

微信支付PHP集成指南

完整实现建议参考微信支付官方文档,包含更多支付场景(H5支付、Native支付等)和安全性处理细节。微信支付在PHP中的集成主要涉及服务端接口的调用和支付流程的实现。

bqq506615054的专栏 155

RK3568 Android 13 本地 U 盘 OTA 升级实战:基于 RKUpdateService 的完整流程

本文记录了在 RK3568 平台上基于 Android 13 实现本地 U 盘 OTA 升级的完整过程。核心结论是:不需要手动签名,也不需要修改任何源码,只要用 ./build.sh -UCAKuo 编译出带 OTA 的 update.zip,放入 U 盘根目录,系统就会自动检测并弹出升级提示,点击确认后自动完成升级。 本文梳理了 RKUpdateService 的工作原理、编译命令的正确用法,以及整个过程中容易踩的坑。

x150061的博客 329

ABAP Open SQL 数据拷贝导致 SAPSQL_DATA_LOSS:从报错机理到稳妥修复

数据类型与长度不合规。一旦在Open SQL的无损赋值检查里被发现,系统宁可中止也不会偷偷替你截断。把变量声明对齐到字典、在需要时明确表达转换/截断意图、写法上避免落入高危的操作数位置,再配合ATC的预防性检查,既能解决你这次的ST22Dump,也能把同类问题消灭在萌芽状态。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 425

RK3568 Android13系统目录权限实战:从init.rc到SELinux的完整配置

本文详细解析了在RK3568平台上配置Android13系统目录权限的完整流程,从init.rc文件的基础配置到SELinux策略的深度优化。通过实战案例展示了如何为system_app等系统组件正确设置目录访问权限,解决常见的权限拒绝问题,并提供了一套高效的调试方法论与最佳实践,帮助开发者构建安全且稳定的系统级功能。

metaverse5vr的博客 246

Linux 命令行的艺术

Linux 命令行的艺术前言基础日常使用文件及数据处理系统调试单行脚本冷门但有用仅限 OS X 系统仅限 Windows 系统更多资源免责声明熟练使用命令行是一种常常被忽视,或被认为难以掌握的技能,但实际上,它会提高你作为工程师的灵活性以及生产力。本文是一份我在 Linux 上工作时,发现的一些命令行使用技巧的摘要。有些技巧非常基础,而另一些则相当复杂,甚至晦涩难懂。这篇文章并不长,但当你能够熟练...

AI天才研究院 9278

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Rk3568 Andorid 11 新增adb检测,只有使用客户私钥的设备才能链接adb

#Rk3568 Andorid 11 新增adb检测,只有使用客户私钥的设备才能链接adb

qq_46524402的博客 1022

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

上一篇: [RK3568 Android13]修改开机图片和动画
mcuhot
博客等级 码龄16年 39粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值