[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.pswp.cn/web/64295.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64295.shtml
英文地址,請注明出處:http://en.pswp.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…

strncpy函數和使用案例

strncpy 是 C 語言標準庫函數之一&#xff0c;用于字符串操作。它的功能是將源字符串&#xff08;source&#xff09;中的字符復制到目標字符串&#xff08;destination&#xff09;中&#xff0c;但最多復制 n 個字符。如果源字符串的長度小于 n&#xff0c;則目標字符串剩余的…

實現類似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…

【每日學點鴻蒙知識】grid里面的item支持拖動問題、WebView回調問題、獲取頁面名稱、彈幕效果實現、修改App輸出路徑 |

1、HarmonyOS grid里面的item支持拖動問題&#xff1f; 想要grid里面的item支持拖動,拖出來后可以刪除,下面的代碼就是你們上次給我提供的,正常情況下是可以使用的但是,往下拖的過程中遇到了TextInput后,gridItem的onDragMove就不會走了,我給TextInput設置了draggable(false)后…

SDK 指南

在前端開發中&#xff0c;SDK&#xff08;Software Development Kit&#xff0c;軟件開發工具包&#xff09;是一個用于幫助開發者在特定平臺、框架或技術棧中實現某些功能的工具集。 1. SDK 是什么&#xff1f; SDK 是一種開發工具包&#xff0c;它提供了開發人員實現某些功…

Unity3d UGUI如何優雅的實現Web框架(Vue/Rect)類似數據綁定功能(含源碼)

前言 Unity3d的UGUI系統與Web前端開發中常見的數據綁定和屬性綁定機制有所不同。UGUI是一個相對簡單和基礎的UI系統&#xff0c;并不內置像Web前端&#xff08;例如 Vue.js或React中&#xff09;那樣的雙向數據綁定或自動更新UI的機制。UGUI是一種比較傳統的 UI 系統&#xff…

OptimisticLock

想象你和你的朋友去了一家很受歡迎的餐廳。你們想要點一份特別的菜品——這家餐廳的招牌菜&#xff0c;但因為這道菜非常受歡迎&#xff0c;所以它的狀態可能會隨時變化&#xff08;比如售罄或重新上架&#xff09;。 傳統方式&#xff08;悲觀鎖&#xff09; 通常情況下&…

10分鐘掌握項目管理核心工具:WBS、甘特圖、關鍵路徑法全解析

一、引言 在項目管理的廣闊天地里&#xff0c;猶如一場精心編排的交響樂演奏&#xff0c;每個樂器、每個音符都需精準配合才能奏響美妙樂章。而 WBS&#xff08;工作分解結構&#xff09;、甘特圖、關鍵路徑法無疑是這場交響樂中的關鍵樂章&#xff0c;它們從不同維度為項目管…

TCP 和 UDP 的區別:解析網絡傳輸協議

引言 在計算機網絡的世界中&#xff0c;TCP&#xff08;Transmission Control Protocol&#xff0c;傳輸控制協議&#xff09;和 UDP&#xff08;User Datagram Protocol&#xff0c;用戶數據報協議&#xff09;是兩種極為重要且應用廣泛的傳輸層協議。它們在功能、特性以及適…

代碼思想之快慢路徑

處理業務代碼的過程中&#xff0c;對業務代碼有了一些調整&#xff0c;后續發現這是一種代碼思想 在一段復雜的邏輯里&#xff0c;我把查詢redis操作寫在了前面&#xff0c; 業務邏輯&#xff1a; 如果需要不打壓就退出本次處理 查詢redis拿到商品需要打壓的次數 如果次數 …

Java 溯本求源之基礎(三十一)——泛型

目錄 1. 泛型的定義與基本概念 2. 泛型的優勢 3. 泛型的基本語法 3.1 泛型類 3.2 泛型方法 3.3 泛型接口 4. 泛型的邊界 4.1 上限通配符&#xff08;? extends T&#xff09; 4.2 下限通配符&#xff08;? super T&#xff09; 5. 泛型的類型擦除 6. 泛型的使用場景…

純 HTML+CSS+JS 實現一個炫酷的圣誕樹動畫特效

純 HTMLCSSJS 實現一個炫酷的圣誕樹動畫特效 前言 圣誕節快到了&#xff0c;今天給大家帶來一個簡單但是效果不錯的圣誕樹動畫特效。這個特效完全使用原生 HTML、CSS 和 JavaScript 實現&#xff0c;包含閃爍的星星、隨機彩燈等元素&#xff0c;非常適合節日氣氛&#xff01;…

Maven:Java項目構建與管理的利器

在Java開發領域&#xff0c;Maven無疑是一個舉足輕重的工具。它不僅簡化了項目的構建和依賴管理&#xff0c;還促進了團隊協作和持續集成。本文將深入探討Maven的核心功能、基本配置以及在實際項目中的應用。 Maven簡介 Maven是Apache基金會下的一個開源項目&#xff0c;旨在…

【ES6復習筆記】Promise對象詳解(12)

1. 什么是 Promise&#xff1f; Promise 是 JavaScript 中處理異步操作的一種機制&#xff0c;它可以讓異步操作更加容易管理和控制。Promise 對象代表一個異步操作的最終完成或失敗&#xff0c;并提供了一種方式來處理操作的結果。 2. Promise 的基本語法 Promise 對象有三…

【RAG實戰】語言模型基礎

語言模型賦予了計算機理解和生成人類語言的能力。它結合了統計學原理和深度神經網絡技術&#xff0c;通過對大量的樣本數據進行復雜的概率分布分析來學習語言結構的內在模式和相關性。具體地&#xff0c;語言模型可根據上下文中已出現的詞序列&#xff0c;使用概率推斷來預測接…

【ES6復習筆記】Map(14)

概念 Map 是 JavaScript 中的一種數據結構&#xff0c;它允許你存儲鍵值對&#xff0c;并且可以通過鍵來訪問對應的值。在本教程中&#xff0c;我們將學習如何聲明、添加、刪除、獲取和遍歷 Map 集合。 ES6 提供了 Map 數據結構。它類似于對象&#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…