全志开发板如何添加二进制到镜像中的/system/bin 下?

2022-07-06 11:36:36 +08:00
 zinwalin

系统是全志安卓 10

在 AOSP/android/development 下面创建了 hello 目录,目录下添加 Android.mk 和 hello.c, 模块名是 helloworld, 在 android 根目录下执行 make helloworld , 编译正常,adb push 到设备上后,通过 adb shell 里执行 helloworld ,一切正常。 当在 App 里通过 Runtime.getRuntime().exec()来执行 helloworld 就出现了下面的错误,网上搜索是 SELinux 的问题,有没有资料可以分享下如何集成自己的程序?

07-06 14:36:34.610 4382 4382 I eight.tomu.home: type=1400 audit(0.0:294): avc: denied { execute_no_trans } for path="/system/bin/helloworld" dev="dm-3" ino=60 scontext=u:r:zygote:s0 tcontext=u:object_r:system_file:s0 tclass=file permissive=1 07-06 14:36:34.565 3649 3649 I ExecuteCmd: executeCmd: helloworld 07-06 14:36:35.077 3649 3649 D MainActivity: Home:: helloworld true

4114 次点击
所在节点    Android
5 条回复
FranzKafka95
2022-07-06 12:21:39 +08:00
先通过 getenforce 命令看看是否开启 SELINUX ,如果开启了设置为 disable 或者 permissive 就行,从这个打印来看确实是 SElinux 问题
FranzKafka95
2022-07-06 12:22:55 +08:00
如果你想在开启 Selinux 的情况下集成自己的应用,要修改编译配置文件,添加对应的 te 配置,最好还要通过单独的 rc 文件来启动
zinwalin
2022-07-06 20:58:12 +08:00
@FranzKafka95 太感谢了。
zinwalin
2022-07-06 21:01:20 +08:00
@FranzKafka95 加了相应的 te 配置,现在运行时没有报错了,但是有个奇怪的现象。 自家的 System App(比如 Home Launcher)里面通过 Runtime.getRuntime().exec("$command\n")来调用这个二进制文件时,无法正常执行(没有写入文件的实际操作),但是在 adb shell 下是可以正常执行的。

备注: 此二进制文件的功能是把一个文件写入覆盖到某个分区,从某个文件拷贝数据,然后写入到此分区所在的设备块上。
zinwalin
2022-07-10 16:25:06 +08:00
@FranzKafka95 我最后通过 init.xxx.rc 文件里添加设备的权限解决了此问题。 加载分区的方式没解决,不过总算可以动态更新 boot logo 了,感谢。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/864397

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX