[Android]init中添加新的command

在Android的init进程中,command是用于定义启动时要执行的具体命令行指令的关键部分。init进程是Android系统启动的第一个进程,它负责初始化系统的各个组件,并启动必要的服务。command可以在init.rc文件及其包含的其他.rc文件中找到,通常作为on操作块或service定义的一部分。

1. command的基本概念

command是一条或多条具体的命令行指令,它们在特定条件下由init进程执行。这些命令可以用来创建目录、设置权限、启动服务、写入系统属性等。每个命令必须以空格分隔,并且在同一行上执行。如果需要多行命令,可以使用反斜杠(\)进行换行。

2. 常见的command类型

以下是一些常见的command及其用途:

2.1 创建和管理文件系统
  • mkdir <path> [mode] [user] [group]:创建一个目录,并设置其权限、用户和组。

     rc 

    深色版本

    mkdir /data/myapp 0755 root root
  • chmod <mode> <path>:更改文件或目录的权限。

     rc 

    深色版本

    chmod 0755 /data/myapp
  • chown <user>:<group> <path>:更改文件或目录的所有者和组。

     rc 

    深色版本

    chown system:system /data/myapp
  • mount <type> <device> <dir> [flags]:挂载文件系统。

     rc 

    深色版本

    mount ext4 /dev/block/mmcblk0p1 /data
  • umount <dir>:卸载文件系统。

     rc 

    深色版本

    umount /data
2.2 设置环境变量和系统属性
  • export <variable> [value]:设置环境变量。

     rc 

    深色版本

    export PATH=/system/bin:$PATH
  • write <path> <text>:将文本写入文件。

     rc 

    深色版本

    write /sys/class/leds/led1/brightness 1
  • setprop <property> <value>:设置系统属性。

     rc 

    深色版本

    setprop sys.boot_completed 1
  • getprop <property>:获取系统属性的值(通常用于条件判断)。

     rc 

    深色版本

    on property:getprop(sys.boot_completed)=1start myservice
2.3 启动和管理服务
  • start <service>:启动指定的服务。

     rc 

    深色版本

    start adbd
  • stop <service>:停止指定的服务。

     rc 

    深色版本

    stop adbd
  • restart <service>:重启指定的服务。

     rc 

    深色版本

    restart adbd
  • class_start <class>:启动属于指定类的所有服务。

     rc 

    深色版本

    class_start main
  • class_stop <class>:停止属于指定类的所有服务。

     rc 

    深色版本

    class_stop main
2.4 日志和调试
  • log <message>:将消息写入系统日志。

     rc 

    深色版本

    log "Starting my custom service"
  • exec <command> [args...]:执行外部命令,并等待其完成。

     rc 

    深色版本

    exec -- /system/bin/log -t "myapp" "Custom initialization completed"
2.5 其他命令
  • trigger <event>:触发自定义事件。

     rc 

    深色版本

    trigger custom_event
  • wait <path> [timeout]:等待指定路径存在,直到超时。

     rc 

    深色版本

    wait /dev/block/mmcblk0p1 10
  • symlink <target> <link>:创建符号链接。

     rc 

    深色版本

    symlink /data/myapp /mnt/myapp
  • insmod <module> [args...]:加载内核模块。

     rc 

    深色版本

    insmod /system/lib/modules/wlan.ko
  • rm <path>:删除文件或目录。

     rc 

    深色版本

    rm /data/myapp/tmp/*
  • rmdir <path>:删除空目录。

     rc 

    深色版本

    rmdir /data/myapp/tmp

3. 怎样添加新的命令command

查看command定义的地方,

system/core/init/builtins.cpp


1029// Builtin-function-map start
1030const BuiltinFunctionMap::Map& BuiltinFunctionMap::map() const {
1031    constexpr std::size_t kMax = std::numeric_limits<std::size_t>::max();
1032    // clang-format off
1033    static const Map builtin_functions = {
1034        {"bootchart",               {1,     1,    {false,  do_bootchart}}},
1035        {"chmod",                   {2,     2,    {true,   do_chmod}}},
1036        {"chown",                   {2,     3,    {true,   do_chown}}},
1037        {"class_reset",             {1,     1,    {false,  do_class_reset}}},
1038        {"class_restart",           {1,     1,    {false,  do_class_restart}}},
1039        {"class_start",             {1,     1,    {false,  do_class_start}}},
1040        {"class_stop",              {1,     1,    {false,  do_class_stop}}},
1041        {"copy",                    {2,     2,    {true,   do_copy}}},
1042        {"domainname",              {1,     1,    {true,   do_domainname}}},
1043        {"enable",                  {1,     1,    {false,  do_enable}}},
1044        {"exec",                    {1,     kMax, {false,  do_exec}}},
1045        {"exec_background",         {1,     kMax, {false,  do_exec_background}}},
1046        {"exec_start",              {1,     1,    {false,  do_exec_start}}},
1047        {"export",                  {2,     2,    {false,  do_export}}},
1048        {"hostname",                {1,     1,    {true,   do_hostname}}},
1049        {"ifup",                    {1,     1,    {true,   do_ifup}}},
1050        {"init_user0",              {0,     0,    {false,  do_init_user0}}},
1051        {"insmod",                  {1,     kMax, {true,   do_insmod}}},
1052        {"installkey",              {1,     1,    {false,  do_installkey}}},
1053        {"load_persist_props",      {0,     0,    {false,  do_load_persist_props}}},
1054        {"load_system_props",       {0,     0,    {false,  do_load_system_props}}},
1055        {"loglevel",                {1,     1,    {false,  do_loglevel}}},
1056        {"mkdir",                   {1,     4,    {true,   do_mkdir}}},
1057        // TODO: Do mount operations in vendor_init.
1058        // mount_all is currently too complex to run in vendor_init as it queues action triggers,
1059        // imports rc scripts, etc.  It should be simplified and run in vendor_init context.
1060        // mount and umount are run in the same context as mount_all for symmetry.
1061        {"mount_all",               {1,     kMax, {false,  do_mount_all}}},
1062        {"mount",                   {3,     kMax, {false,  do_mount}}},
1063        {"umount",                  {1,     1,    {false,  do_umount}}},
1064        {"readahead",               {1,     2,    {true,   do_readahead}}},
1065        {"restart",                 {1,     1,    {false,  do_restart}}},
1066        {"restorecon",              {1,     kMax, {true,   do_restorecon}}},
1067        {"restorecon_recursive",    {1,     kMax, {true,   do_restorecon_recursive}}},
1068        {"rm",                      {1,     1,    {true,   do_rm}}},
1069        {"rmdir",                   {1,     1,    {true,   do_rmdir}}},
1070        {"setprop",                 {2,     2,    {true,   do_setprop}}},
1071        {"setrlimit",               {3,     3,    {false,  do_setrlimit}}},
1072        {"start",                   {1,     1,    {false,  do_start}}},
1073        {"stop",                    {1,     1,    {false,  do_stop}}},
1074        {"swapon_all",              {1,     1,    {false,  do_swapon_all}}},
1075        {"symlink",                 {2,     2,    {true,   do_symlink}}},
1076        {"sysclktz",                {1,     1,    {false,  do_sysclktz}}},
1077        {"trigger",                 {1,     1,    {false,  do_trigger}}},
1078        {"verity_load_state",       {0,     0,    {false,  do_verity_load_state}}},
1079        {"verity_update_state",     {0,     0,    {false,  do_verity_update_state}}},
1080        {"wait",                    {1,     2,    {true,   do_wait}}},
1081        {"wait_for_prop",           {2,     2,    {false,  do_wait_for_prop}}},
1082        {"write",                   {2,     2,    {true,   do_write}}},
1083    };
1084    // clang-format on
1085    return builtin_functions;
1086}

参考这里的实现,在这里添加命令,并进行相关的实现即可

4. 其他方法

添加命令笔记麻烦,可以在init.rc里调用程序或者脚本文件来实现类似的功能,

参考

init.rc 启动 shell 脚本 开机执行脚本 init.rc执行shell脚本_init.rc执行sh脚本内容需要权限吗-CSDN博客

android 系统rc添加 shell运行脚本_android13 在rc文件中执行脚本-CSDN博客

init execute_no_trans avc报错-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/64295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32F103RCT6学习之五:ADC

1.ADC基础 ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁12位逐次逼近型ADC&#xff0c;1us转换时间 输入电压范围&#xff1a;0~3.3V&#xff…

实现类似gpt 打字效果

1. css的动画&#xff08;animation) css中实现动画有两种方式&#xff1a;transition过渡动画、 animation自定义动画。 具体的可以看MDN链接&#xff1a;https://developer.mozilla.org/zh-CN/docs/Web/CSS/animation 使用keyframes自定义关键帧动画并未其命名使用自定义动…

微软远程桌面APP怎么用

微软远程桌面&#xff08;Remote Desktop&#xff09;客户端&#xff08;RD Client&#xff09;是一款由微软开发的应用程序&#xff0c;允许用户通过网络连接远程访问和控制另一台计算机。同时&#xff0c;微软远程桌面RD Client支持多种设备和操作系统&#xff0c;包括Window…

Unity3d UGUI如何优雅的实现Web框架(Vue/Rect)类似数据绑定功能(含源码)

前言 Unity3d的UGUI系统与Web前端开发中常见的数据绑定和属性绑定机制有所不同。UGUI是一个相对简单和基础的UI系统&#xff0c;并不内置像Web前端&#xff08;例如 Vue.js或React中&#xff09;那样的双向数据绑定或自动更新UI的机制。UGUI是一种比较传统的 UI 系统&#xff…

10分钟掌握项目管理核心工具:WBS、甘特图、关键路径法全解析

一、引言 在项目管理的广阔天地里&#xff0c;犹如一场精心编排的交响乐演奏&#xff0c;每个乐器、每个音符都需精准配合才能奏响美妙乐章。而 WBS&#xff08;工作分解结构&#xff09;、甘特图、关键路径法无疑是这场交响乐中的关键乐章&#xff0c;它们从不同维度为项目管…

代码思想之快慢路径

处理业务代码的过程中&#xff0c;对业务代码有了一些调整&#xff0c;后续发现这是一种代码思想 在一段复杂的逻辑里&#xff0c;我把查询redis操作写在了前面&#xff0c; 业务逻辑&#xff1a; 如果需要不打压就退出本次处理 查询redis拿到商品需要打压的次数 如果次数 …

纯 HTML+CSS+JS 实现一个炫酷的圣诞树动画特效

纯 HTMLCSSJS 实现一个炫酷的圣诞树动画特效 前言 圣诞节快到了&#xff0c;今天给大家带来一个简单但是效果不错的圣诞树动画特效。这个特效完全使用原生 HTML、CSS 和 JavaScript 实现&#xff0c;包含闪烁的星星、随机彩灯等元素&#xff0c;非常适合节日气氛&#xff01;…

【RAG实战】语言模型基础

语言模型赋予了计算机理解和生成人类语言的能力。它结合了统计学原理和深度神经网络技术&#xff0c;通过对大量的样本数据进行复杂的概率分布分析来学习语言结构的内在模式和相关性。具体地&#xff0c;语言模型可根据上下文中已出现的词序列&#xff0c;使用概率推断来预测接…

富芮坤FR800X系列之PWM输出程序应用设计

文章目录 前言1.设计背景2.简介3.如何设计控制调光的接口呢4.硬件设计5.软件设计5.1.软件流程图5.2.软件代码 6.小结 前言 版权归作者所有、未经允许、请勿转载。 读者对象&#xff1a; 本文档主要适用以下工程师&#xff1a; 嵌入式系统工程师 单片机软件工程师 IOT固…

Ftrans数据摆渡系统 搭建安全便捷跨网文件传输通道

一、专业数据摆渡系统对企业的意义 专业的数据摆渡系统对企业具有重要意义&#xff0c;主要体现在以下几个方面‌&#xff1a; 1、‌数据安全性‌&#xff1a;数据摆渡系统通过加密传输、访问控制和审计日志等功能&#xff0c;确保数据在传输和存储过程中的安全性。 2、‌高…

EasyPoi 使用$fe:模板语法生成Word动态行

1 Maven 依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.0.0</version> </dependency> 2 application.yml spring:main:allow-bean-definition-over…

python 渗透开发工具之SQLMapApi Server不同IP服务启动方式处理 解决方案SqlMapApiServer外网不能访问的情况

目录 说在前面 什么是 SQLMapAPI 说明 sqlmapApi能干什么 sqlmapApi 服务安装相关 kali-sqlmap存放位置 正常启动sqlmap-api server SqlMapApi-Server 解决外网不能访问情况 说在前面 什么是sqlmap 这个在前面已经说过了&#xff0c;如果这个不知道&#xff0c;就可以…

使用 Webpack 优雅的构建微前端应用❕

Module Federation 通常译作“模块联邦”&#xff0c;是 Webpack 5 新引入的一种远程模块动态加载、运行技术。MF 允许我们将原本单个巨大应用按我们理想的方式拆分成多个体积更小、职责更内聚的小应用形式&#xff0c;理想情况下各个应用能够实现独立部署、独立开发(不同应用甚…

Boost之log日志使用

不讲理论&#xff0c;直接上在程序中可用代码&#xff1a; 一、引入Boost模块 开发环境&#xff1a;Visual Studio 2017 Boost库版本&#xff1a;1.68.0 安装方式&#xff1a;Nuget 安装命令&#xff1a; #只安装下面几个即可 Install-package boost -version 1.68.0 Install…

【Python】使用匿名函数Lambda解析html源码的任意元素(Seleinium ,BeautifulSoup皆适用)

一直都发现lambda函数非常好用&#xff0c;它可以用简洁的方式编写小函数&#xff0c;无需写冗长的过程就可以获取结果。干脆利落&#xff01; 它允许我们定义一个匿名函数&#xff0c;在调用一次性的函数时非常有用。 最近整理了一些&#xff0c;lambda函数结合BeautifulSou…

互联网路由架构

大家觉得有意义和帮助记得及时关注和点赞!!! 本书致力于解决实际问题&#xff0c;书中包含大量的架构图、拓扑图和真实场景示例&#xff0c;内容全面 且易于上手&#xff0c;是不可多得的良心之作。本书目的是使读者成为将自有网络集成到全球互联网 领域的专家。 以下是笔记内…

【Flutter_Web】Flutter编译Web第三篇(网络请求篇):dio如何改造方法,变成web之后数据如何处理

前言 Flutter端在处理网络请求的时候&#xff0c;最常用的库当然是Dio了&#xff0c;那么在改造成web端的时候&#xff0c;最先处理的必然是网络请求&#xff0c;否则没有数据去处理驱动实图渲染。 官方链接 pub https://pub.dev/packages/diogithub https://github.com/c…

项目上传到gitcode

首先需要在个人设置里面找到令牌 记住自己的账号和访问令牌&#xff08;一长串&#xff09;&#xff0c;后面git要输入这个&#xff0c; 账号是下面这个 来到自己的仓库 #查看远程仓库&#xff0c;是不是自己的云仓库 git remote -v # 创建新分支 git checkout -b llf # 三步…

【Git学习】windows系统下git init后没有看到生成的.git文件夹

[问题] git init 命令后看不到.git文件夹 [原因] 文件夹设置隐藏 [解决办法] Win11 win10

vscode添加全局宏定义

利用vscode编辑代码时&#xff0c;设置了禁用非活动区域着色后&#xff0c;在一些编译脚本中配置的宏又识别不了 遇到#ifdef包住的代码就会变暗色&#xff0c;想查看代码不是很方便。如下图&#xff1a; 一 解决&#xff1a; 在vscode中添加全局宏定义。 二 步骤&#xff1a…