当前策略阻止从脚本java 调用shell脚本mmc以作者模式打开

大部分的Edify命名都是函数,当调用这些函数结束的时候,会返回数据给脚本。当然,你也可以使用这些函数的返 回值来确认成功与否,

PS:部分记录整理,及测试刷机后得知的效果.

2从手机中获得内核配置文件和Android init.rc启动脚本 现在,可以开始正式工作了。 

编译Linux内核前,通过USB电缆连接Android设备与PC,然后在终端窗口内获得如下的内核配置文件: 

从手机的Android根文件夹中获得init.rc启动脚本:

下一步,将Linux内核源代码包解压至PC的工作文件夹。将目录更改为刚刚解压的内核文件夹,然后输入此命令进入内核配置菜单。

使用箭头键到达目标子菜单,然后按下“Enter”。以下所列出的每个子菜单内包含了所需要的动作说明。

  • Kernel Hacking(内核开发),在子菜单中,导航至Tracers子菜单,然后按下“Enter”。确保启用Trace进程上下文开关选项。

保存并退出配置菜单后,必须重新编译内核和相关模块,如下所示: 

在***DS-5 CE Eclipse时,可通过Help(帮助)->ARM Extras…(ARM附加选项)菜单来确定源文件的位置。将源代码包转移至工作文件夹,并进行解压。输入下列命令来编译gator模块: 

(可选)要Android手机启动时启用gator服务,则必须修改init.rc脚本文件,该文件可从Android设备中的根目录获得。并在该文件末尾添加下列行

update.zip放置于SD卡根文件夹上的压缩文件,在手机启动时由Android恢复系统加载。该文件通常具有供应商的数字签名,在紧急情况或系统升级时使用该文件可用来恢复系统。Android手机处于解锁状态时,则可以使用自定义的压缩包来升级系统。现在,我向您展示如何创建update.zip程序包来更新Linux内核和init.rc脚本。

  • 为加快工作速度,先下载一个内核更新包作为模板。对于HTC Sensation 4G手机,可通过Google来查找某些(内核更新包)。
  • 将update.zip文件复制到目标手机的SD卡根文件夹下。

注意!在继续操作前,请为手机充满电!!! 

关闭手机电源,然后以HBOOT模式开启。(同时按下电源按钮和音量调低按钮) 

进入Recovery(恢复)菜单。系统会提示您,并自动进行更新。 

在重新启动后,Streamline准备就绪,可进行性能分析。 

SDK以及ADB设置的详细信息,请参见Android网站。一旦设置好了ADB,就使用下列命令将Streamline使用的网络端口转发到localhost网络上。

最后,按照ARM网站上的使用说明,使用Streamline对Android手机开始进行性能分析。图3是使用Streamline对Android手机进行性能分析的截图。

Streamline是一款功能强大、经济高效的解决方案,用于对ARM Linux和Android平台进行系统级性能分析。希望本文能助您一臂之力,通过Streamline加快您的Android开发工作。一旦开始使用,您很快会喜欢上这款工具。如需进一步了解使用Streamline的方法,请访问 和  


  本人对于 SELinux for Android 理解不深,下文中的各文件及安全规则虽都是我所编写,但也是一边查阅文档一边试验得出的。在此强行为文,若有理解错误之处,请各位工程师同仁热情指出。




  首先编写开机启动脚本。因为 Google 启动了 Treble 计划,对 system 分区和 vendor 分区进行严格的分离,所以这样的自定义脚本我们最好不要放在 /system/bin/ 目录下。因为我工作于芯片公司,即 vendor 厂商,所以我把它放在 /vendor/bin/ 目录下。同时,从 Android 8.0 开始,SELinux for Android 也进行了模块化,为了避免不必要的权限问题,我们使用 /vendor/bin/sh 作为脚本解释器。我编写的开机脚本是 auto_run.sh,内容很简单,如下:

  脚本应该在编译时自动拷贝到 vendor/bin/ 目录下,所以我们还要在 makefile 中添加拷贝命令。以我这个项目为例,对应的 makefile 文件是 product_something.mk,为其添加如下代码:


 



  这几行命令的意思是在系统 init 阶段创建 /temp/reserved/ 目录,定义名为 aaa_autorun 的服务,并在 boot 阶段以 root 身份显式启动且仅启动服务一次。
  接着我们还要为上一步骤里定义的 aaa_autorun 服务编写 .te 文件,定义其所属的安全域(SELinux domain)。否则设备在开机后无法执行这个 service,并且我们可以在 dmesg 中看到下方这样的警告:


  在 device/<vendorName>/common/sepolicy/ 目录下新建 aaa_autorun.te 文件。我们可能并不清楚开机运行这个脚本并执行相应的调用需要哪些权限,所以我们可以先在 .te 文件中添加上基本的定义。这些基本的文件内容如下:


 
是暂时添加的,目的是使服务在遇到权限问题时也可以正常执行,但会将所需的权限类型打印出来。
init_daemon_domain 是一个宏,用来使 aaa_autorun 域生效。
  因为 /system/bin/aaa 在处理文件时要访问 /dev/ddd 节点,所以我们也要为这个设备节点编写文件 aaa_device.te。内容如下:

 



  为了验证我们的修改是否有效,需要编译并烧写 boot.img 和 vendor.img,然后重启设备。
  不过最初编写的 aaa_autorun.te 文件中,往往赋予开机脚本的权限会有不足,我们需要通过查看 dmesg 中的打印来添加上相应的权限。比如我们可能会看到下面这样的权限缺失提示:

 
  那么我们就应该在 .te 文件中添加上这些权限,然后删除掉 permissive aaa_autorun 语句。以我的项目为例,添加上所需全部权限后,完整的 aaa_autorun.te 文件内容如下:
  至此,我们的工作就全部完成了。重新编译并烧写 boot.img 和 vendor.img 后,重启设备,可以看到开机脚本工作正常。

参考资料

 

随机推荐