小编Bal*_*n A的帖子

如何从 /vendor/app 启动与 android-TREBLE 兼容的供应商 java 服务

在我的 Android-O 设备中,下面两个后台服务通过 AIDL 相互通信。

  1. 本机/C++ android 服务

    • 通过 init rc 启动
    • 与系统 linux-user 一起运行
    • 部署在 /system 分区,eg, /system/bin/nat二进制。
  2. 来自 apk 的 Java 服务

    • 通过在 AndroidManifest 中注册的 bootcomplete 接收器启动。
    • 服务类也在 AndroidManifest 和 export:enabled 中指定。
    • 运行系统系统 linux 用户,使用平台证书签名。
    • 部署在系统分区中。 eg /system/app/jav/jav.apk

到目前为止没有问题。以上两个服务都注册了ServiceManager. 两个服务都可以通过 /dev/binder. 相互调用,都从 Android 启动开始并无限期地继续运行。

高音带来了麻烦:

按照 Treble 的要求,上面的两个都应该移动到 /vendor 分区,并有适当的 SEPolicies。,这样,java 和 c++ 服务都可以通过/dev/vndbinder.相互调用,即通过注册自己VendorServiceManager

参考文档https://source.android.com/devices/architecture/hidl/binder-ipc我能够启动本地 c++ 服务,/vendor/bin/nat从中VenorServiceManager(/dev/vndbinder)成功注册。

现在我可以通过vndservice call com.yyy.zzz.Myservice 0 但是,无法启动部署为的 JAVA …

android android-service android-service-binding android-securityexception android-application-class

8
推荐指数
0
解决办法
950
查看次数

如何避免 Linux 内核中 printk 日志丢失

是否有任何提示或方法可以避免内核日志丢失或日志缓冲区溢出?

我通过以下代码更改将日志缓冲区大小增加到最大值。我只在高端设备上运行。但是,当我想从驱动程序获取完整日志(写入大量日志)时,我仍然看到 printk 日志有时会被删除。我将 printk 与 KERN_INFO 一起使用,通过动态调试(dprintk)启用。

我做的改变:

--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -55,7 +55,7 @@ void asmlinkage __attribute__((weak)) early_printk(const char *fmt, ...)
 {
 }

-#define __LOG_BUF_LEN  (1 << CONFIG_LOG_BUF_SHIFT)
+#define __LOG_BUF_LEN  (1 << 17)
Run Code Online (Sandbox Code Playgroud)

我用来写入文件的命令:

cat "/proc/kmsg">/sdcard/klog.txt
Run Code Online (Sandbox Code Playgroud)

仅在调试时,如果驱动程序的性能下降,我没关系,但是,我不想删除任何日志。我知道我们无法让工作队列/线程等待打印完成。但是,仍然有任何方法可以保证日志不会丢失。

logging linux-device-driver linux-kernel embedded-linux printk

7
推荐指数
2
解决办法
1万
查看次数