Android Shell原理

本文介绍了Android Shell的实现原理,包括shell解释器如何处理内置和扩展命令。核心在于system/core/sh目录下的源码,其中toolbox负责扩展命令的执行。添加自定义命令只需在system/core/toolbox创建相应.c文件并实现_main函数。另外,Android系统中还引入了busybox,可以通过修改init.rc将busybox设置为默认shell,并调整PATH环境变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 


 

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

 


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值