在我的 Android-O 设备中,下面两个后台服务通过 AIDL 相互通信。
本机/C++ android 服务
eg, /system/bin/nat二进制。来自 apk 的 Java 服务
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
是否有任何提示或方法可以避免内核日志丢失或日志缓冲区溢出?
我通过以下代码更改将日志缓冲区大小增加到最大值。我只在高端设备上运行。但是,当我想从驱动程序获取完整日志(写入大量日志)时,我仍然看到 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