Android Shell原理

 

 


 

shell實現分爲兩部分:

一、shell解釋器和內置命令

源碼位於system/core/sh目錄下,主要完成shell命令的解釋查找,對於builtins.c中包含的內置命令,直接執行,對於toolbox的擴展命令,間接調用toolbox程序完成。

 

ps:android2.2中已經使用了system/core/mksh作爲默認解釋器了

 

二、toolbox擴展命令

主要完成擴展命令的執行,每一個擴展命令對應一個name_main函數,如ls命令,對應ls_main函數。同時,每一個擴展命令都由一個system/core/toolbox/目錄下面的.c文件實現。toolbox.c會根據這個目錄下面的.c文件生成tools.h頭文件,並在system/core/toolbox/Android.mk文件中爲每個命令生成指向toolbox的連接。toolbox的實現結構使它擴展一個命令很容易。

假設現在我們自己想手工添加一個shell命令mycommand,只要在system/core/toolbox/目錄下面新建一個mycommand.c文件,並在裏面實現一個mycommand_main函數,然後在system/core/toolbox/Android.mk中添加mycommand.c即可。Android.mk會自動把它編譯進toolbox程序,並在編譯生成的Android系統/system/bin目錄下爲這個命令生成一個指向toolbox的連接。

 

ps:目前busybox也已經加入了android中,/system/xbin中的程序大多鏈接到busybox

 

三、把busybox作爲默認shell

需要像下面這樣編輯一下init.rc

1、編輯console服務,讓它默認運行busybox

service console /system/bin/sh  ->  service console /bin/sh

2、把busybox路徑加入到環境變量中

export PATH /sbin:/system/sbin:/system/bin:/system/xbin  -->  export PATH /bin:/sbin:/system/sbin:/system/bin:/system/xbin

 


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章