自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

林多

糖分!

  • 博客(304)
  • 资源 (6)
  • 收藏
  • 关注

原创 【性能优化】启用zram

摘要:ZRAM是一种内存压缩技术,可在系统内存不足时启用。启用方法包括:1)检查内核版本(需3.14+);2)初始化/dev/zram0并设置为swap分区;3)调整swappiness参数(100表示优先使用swap)。启用后可能增加CPU负载,需根据内存总量、内核支持等情况权衡使用。最后可通过/proc/swaps查看swap配置状态。

2025-06-15 17:28:49 256

原创 【Android】 BindService源码流程

Android的bindService流程解析:首先通过ContextWrapper.bindService()触发,转发至ContextImpl.bindServiceCommon()进行参数校验和ServiceDispatcher创建。接着调用ActivityManagerService.bindIsolatedService()进行权限校验,最终由ActiveService处理绑定逻辑。若服务已运行,直接回调connected();否则通过requestServiceBindingLocked()发起

2025-06-15 17:15:45 336

原创 【Android】输入路由

Android系统通过配置input-port-associations.xml文件,将输入设备与显示屏幕进行关联。该文件中的<port>标签指定输入设备接口和对应的显示端口。系统通过InputManagerService解析该配置文件,将关联信息传递到Native层,最终由InputReader获取配置并通知InputDevice。用户可通过adb shell dumpsys input命令查看当前配置关系。整个流程涉及XML解析、JNI回调等机制,实现了输入设备与显示设备的动态绑定。

2025-06-15 16:49:32 502

原创 【Android】System分区应用自带库与原生库同名问题分析

摘要系统应用崩溃问题分析:因/system分区应用自带库与原生库同名导致符号未找到错误。问题根源在于Android 7.0+强制系统分区应用使用AOSP原生库,忽略应用自带同名库。解决方案包括:1) 将应用移至/vendor分区;2) 重命名应用自带库;3) 使用系统统一版本库;4) 改用静态库。其中利用Android命名空间机制隔离是最佳实践方案。

2025-05-25 17:56:55 683

原创 【Android】非System用户下Persist应用不自动拉起

摘要:Android 11/12系统中,非System用户下Persist应用不自动拉起的问题源于UserController.java的限制,系统默认仅对User 0启动Persist应用。验证发现目标应用已正确安装且手动启动后能保持存活。解决方案包括监听开机广播实现自启动或修改AOSP代码。

2025-05-25 17:14:22 544

原创 【Linux】VLAN配置命令

VLAN:Virtual Local Area Network,虚拟局域网。VLAN可以将网络分割为多个广播域,提供网络性能以及增强网络安全性。车载网络有着较高的信息安全需求,相关的标准也有很多。比如IOS21343。比如,我们想添加一个ID 为12的 VLAN.这里记录一下,VLAN配置命令。

2025-04-13 17:04:29 474

原创 【Android】VehiclePropertyAccess引起CarService崩溃

对于车辆属性的操作,在Android11版本,调用CarService注册监听属性,如果违反了其权限规定,会导致CarService崩溃。编译时,会被转成VehiclPropConfig,记录到每个车辆属性中。某应用调用 CarPropertyManager的registerCallback接口,注册监听属性ID。VehiclePropertyAccess属性,用于定义车辆属性的访问权限。违反VehiclePropertyAccess权限,导致的CarService崩溃。android12已修复该问题。

2025-03-23 14:43:36 429

原创 LOCAL_PREBUILT_JNI_LIBS使用说明

使用my_prebuilt_jni_libs,对my_embedded_perbuilt_jni_libs赋值(找出@对应的lib),并将my_embedded_perbuilt_jni_libs赋值给embedded_prebuilt_jni_libs(见上图)使用embedded_prebuilt_jni_libs对PRIVATE_EMBEDED_JNI_LIBS赋值。使用LOCAL_PREBUILT_JNI_LIBS,可用于控制APK集成时,其相关so的集成方式。比如,用于将APK中的so,

2025-02-05 15:40:50 636

原创 【Linux】统计文本中每行指定位置出现的字符串的次数

某些项目,会把某个特定事件记录到Log中并且落盘(保持到硬盘)。可以写一个sh脚本,来解析某个文本指定的位置,出现指定字符串的次数。

2025-01-26 11:43:31 608

原创 【Qnx】Qnx常用工具

pidin命令,可以查看Qnx系统运行的进程信息,包括PID、TID、NAME、PRIO(优先级)、STATE、BLOCKED。Qnx的system log,类似于Android Log。可以使用use命令,来输出各命令的使用用法。

2025-01-12 18:20:51 587

原创 【Linux】RPMSG通讯协议介绍

RPMSG,全称Remote processor Messaging。是一种核间通讯协议。在Linux Kernel中,已经内置了RPMSG。Linux RPMSG基于共享内存,利用RPMSG可以高效的实现核间通信。比如Linux与FreeRTOS、Linux与Android,都可以使用RPMSG完成域间通信。Linux端 RPMSG架构图(图片摘自网络FreeRTOS端RPMSG架构图(图片摘自网络。

2025-01-05 16:03:42 1393

原创 【C++】关于指针Free和链表循环释放的问题

指针释放判断问题,与链表释放异常产生的崩溃。

2024-11-23 16:17:11 361

原创 【车载】关于仪表车速小于实际车速

因为车载仪表显示的车速,并非实际的车速。对于车速,有其标准规定,《GB 15082-2008汽车用车速表》规定如下(如实际车速120KM/H,那么仪表显示的速度应在范围 120 ~ 125.2 之间。在仪表系统的开发过程中,不能直接使用车身信号上传的车速来显示。

2024-11-10 17:04:21 341

原创 【车载】仪表业务模块

随着硬件算力提升,车载仪表系统功能越发丰富。本文从开发实现角度,总结一下一些常见的车载仪表业务模块。

2024-11-03 15:52:53 502

原创 【Android】tombstone.pb文件解析

Android系统新增使用 proto buf格式保存的墓碑文件,本篇介绍如何解析tombstone.pb格式的文件。

2024-10-26 15:35:26 618

原创 【Android】JNI报错 non-zero capacity for nullptr pointer分析

Android程序报错。Abort message: 'JNI DETECTED ERROR IN APPLICATION: non-zero capacity for nullptr pointer: 1

2024-10-20 15:33:43 487

原创 【Android】CarWatchDog I/O监控服务

Car WatchDog中的IO Monitor,会监监控所有应用或服务的磁盘I/O用量。后续通过复现,抓取IO相应日志,发现出现问题时该应用,在一天内的写入量超过3GB,这个值已经超过系统的阈值配置。通过日志分析,发现应用被系统的 Car WatchDog(喂狗服务)Disable掉了。Car WatchDog中的IO Monitor,会统计一天内的I/O使用情况。关于Android源码部分的实现,可以感兴趣的可以阅读如下源文件。该日志说明,这款应用因为I/O使用超过阈值,被系统Kill。

2024-10-05 14:40:54 1045 1

原创 【Qnx】使用ClockCycles完成计时功能

定时器是很多需求场景下,会采用的功能实现。比如5秒内,进行计数。如果次数达到100次,执行某操作。如果超过5秒, 计数器清零。某条件触发后,3秒内,忽略从MCU接受的信号。3秒后,使用该信息最新值,进行HMI显示。状态机超时后的复归等等

2024-09-17 13:54:47 803

原创 【Android】SurfaceFlinger Dumpsys信息分析

dumpsys Surfaceflinger用来输出SurfaceFlinger服务的状态信息,利用这些信息可以分析Android 画面层次、Display配置等等信息。

2024-09-08 14:50:37 3008

原创 【车载】仪表功能安全的例子

仪表的部分功能,关系着车辆使用者的人身、财务安全。进而言之,现在在车上普及的功能安全、信息安全,这些安全的目标其实都是用来来保证车和人的安全。

2024-08-18 20:43:11 646

原创 【座舱域控器】座舱域的通信方案

座舱域控器作为整车的几大域控器之一,提供驾驶娱乐的功能。比如中控、副驾、仪表、HUD等。就座舱来说,座舱域控制器以及MCU,加上一系列的硬件外设。以及再此硬件之上的软件系统,构成了整个座舱系统。同时,通过车载网络线束与其他域相连(比如车身域、动力域等等),实现域间的互联控制。

2024-07-20 16:00:39 1449

原创 【Qnx】Qnx coredump解析

Qnx官网说明链接:https://www.qnx.com/developers/docs/7.1/index.html#com.qnx.doc.neutrino.utilities/topic/g/gdb.html。这些信息,对了解程序崩溃的状态有些帮忙,但是对具体的问题解析,还是需要利用gdb工具。实际上,就是把coredump从Qnx系统中copy出来,然后放到本地有Qnx开发环境,以及相关二进制+库的PC上。解析coredump文件,可以帮忙加快分析程序崩溃的原因,比如了解崩溃的堆栈。

2024-06-14 22:00:08 2050

原创 【Qnx 】Qnx IPC通信PPS

Qnx自带PPS服务,PPS全称Persistent Publish/Subscribe Service,就是常见的P/S通信模式。Qnx PPS的通信模式是异步的,Publisher和Subscriber也无需关心对方是否存在。利用Qnx提供的PPS服务,Publisher可以通知多个Subscriber进行某种动作。Qnx 的PPS,是利用文件的方式实现的。所以使用起来,跟文件的读写差不多。该图是QNX官网的PPS示例场景。

2024-05-26 16:26:08 1676

原创 【QNX】Qnx IPC通信 Message-passing

QNX提供了多种IPC(Interprocess Communication )通信方式,包括Message-passing、Plus(脉冲)、Event、Signal、共享内存、Pipe,当然还有socket。Message-passing是Qnx IPC的主要形式。Message-passing提供了主从直接同步的双向消息传输,类似于Android 同步Binder。客户端向服务端请求(Request),服务端向客户端(Reply)。

2024-05-26 16:19:53 1519

原创 QNX SLM介绍

SLM是Qnx中用来加载Application的组件,它可以监控Application行为(比如异常退出时重新Application拉起)、控制Application间的启动时序。这个时候io-pkt对应的/sbin/io-pkt-v6-hc就执行了。通过slm启动Application,Application配置文件是slm-config-linduo.xml。SLM的配置文件,是xml的格式。关于SLM支持的全部命令的解释,可以参考QNX官网。关于SLM配置文件的具体写法,可以参考QNX官网。

2024-05-13 22:09:59 1498

原创 【Android】Android应用性能优化总结

最近大半年的时间里,大部分投在了某国内新能源汽车的某款AndroidApp开发上。由于该App是该款车上,常用+重点应用。所以车厂对应用性能的要求比较高。应用冷启动达到***ms。应用热(温)启动达到***ms应用内画面切换响应达到**ms应用内动效/动画/车模等交互时,画面不能有延迟感等等。应用不能有内存泄露,内存稳定在**MB诸如上面的内容,还有一些,就不详细列出来了。因为之前没有直接做过AndroidApp开发,之前大部分时间在做Framework/System开发。

2024-05-05 20:48:55 1224 1

原创 【通信中间件】Fdbus HelloWorld实例

Fdbus 全称(高速分布式总线),提供IPC+RPC功能。LinuxQNXAnroidOSWindowFdbus本质是Socket,IPC基于,RPC基于TCP。使用Google Protobuf进行序列化和反序列化。利用它,可以实现同域间的IPC通信,比如应用和OS间。也可以实现跨域、跨设备间通信,比如不同设备间数据传输,比如host/gust间的数据传输。Fdbus的一些特点支持多种通信模式,比如点对点、注册/发布、广播等等。支持服务动态发现。

2024-05-02 16:46:23 4524 8

原创 【Android12】Bugreport实现原理

Android Bugreport是一个用于记录和收集 Android设备上系统信息、日志和调试信息的工具。系统发生某些问题时,可以通过bugreport把系统当前时刻点(运行BugRepot的时刻)的系统相关的状态和信息都抓到一个zip中。通过bugreport可以帮忙开发人员分析和解决问题。Bugreport其实就是一系列的信息的汇总,包括日志、内存状态、进程信息、崩溃信息、服务状态等等。用一个大而近乎全的现场,来帮忙更好的分析问题。

2024-04-22 22:18:00 3258 2

原创 【Android】App通信基础架构相关类源码解析

应用通信基础架构相关类源码解析这里主要对Android App开发时,常用到的一些通信基础类进行一下源码的简单分析,包括:Handler、looper、runnable、Messagequeue、Thread。

2024-04-05 18:02:58 844

原创 【C++】std::set_new_handler使用场景

C++的STL提供了**std::set_new_handler**,new操作分配内存失败时,会先调用这个Handler。默认的new_handler行为是,抛出std::bad_alloc异常。

2024-03-31 14:38:38 1064

原创 【C++】智能指针shared_ptrs对于内存管理的陷阱

std::shared_ptr 是一种通过指针保持对象共享所有权的智能指针。内存管理是C++一个永远的话题,C++加入了std::shared_ptr帮助开发者更灵活的管理内存。但shared_ptrs对于内存管理,并非万能的。某些情况下的错误使用,会导致程序因为内存异常而崩溃。在gcc13上,支持给shared_ptrs设置为数组类型。因为std::shared_ptr销毁时,会自动释放指向的内容。那么如果用智能指针管理动态分配的数组,就会导致程序异常问题。

2024-03-24 20:18:20 617

原创 【Android12】Android性能调优工具SystemServerTiming日志

SystemServerTiming是Android原生系统中一个日志标签,也就是tag为SystemServerTiming的日志,这类日志信息会输出到Logd和Trace系统中。可以通过Android logcat 或者 抓取Systrace的方式取得。

2024-03-03 19:03:00 1258

原创 【Android12】Monkey压力测试源码执行流程分析

Monkey是Android提供的用于应用程序自动化测试、压力测试的测试工具。通过Monkey,可以模拟用户的Touch(单指、多指、手势)、按键(key)事件等,检测应用程序发生的ANR、Crash事件,并收集相关Debug信息等。

2024-02-25 18:27:45 1244

原创 【Java】Java类动态替换Class

基于上面的几个方法,可以实现动态替换Class对象。可以在代码中,利用上面的方式,将FunctionA动态替换为FunctionB。Java提供的ClassLoader可用于动态加载的Java类,可以通过多种形式获取ClassLoader。通过这个方法,可以获取类中所有声明的构造函数。要创建类对象的话,需要知道Class的构造函数,以及构造函数的各个参数。Method类提供的newInstance,可以用于创建并返回指定类的实例。通过Java的Class对象,可以实现动态替换Class。

2024-01-27 19:13:38 868

原创 【Android12】Android Framework系列---Adb和PMS安装apk源码流程

通过adb install安装apk,大概流程是 adb(client)端通过socke命令给adbd(service),然后adbd通过ServiceManager以Binder方式将命令发送给PackageManagerService。PackageManagerService解析命令,复制APK及相关资源到指定路径,并更新系统中APK相关配置信息。

2024-01-21 17:51:16 2807

原创 【Android12】Android Framework系列---tombstone墓碑生成机制

墓碑初始化及生成流程中,可以通过属性控制是否注册墓碑、是否生成墓碑,以及墓碑文件的数量等功能。同时,也可以根据业务需求,在墓碑中加入自定义内容,比如给墓碑文件的名字追加特殊的时间戳、追加一些自定义日志到墓碑中等等。

2023-12-30 21:44:02 4028 2

原创 【Android12】WindowManagerService架构分析

WindowManagerService(以下简称WMS) 是Android的核心服务。WMS管理所有应用程序窗口(Window)的Create、Display、Update、Destory。因为Android系统中只有一个WMS(运行在SystemServer进程),可以称其为全局的WMS。其主要的任务有两个:

2023-12-16 19:21:37 2405 1

原创 【Android12】Android Framework系列--AMS启动Activity分析

通过ActivityManagerService(AMS)提供的方法,可以启动指定的Activity。比如Launcher中点击应用图标后,调用AMS的startActivity函数启动应用。AMS提供的服务通过IActivityManager.aidl文件定义。

2023-12-10 18:18:54 1593

原创 【Android】Android Framework系列--Launcher3桌面图标加载流程

Android Launcher3(简称Launcher)启动后会加载桌面。基于Android12代码,分析一下桌面加载的流程。Launcher被Android AMS拉起后,进入自己的生命流程。Launcher.java 中的onCreate函数被调用,准备开始加载桌面。

2023-12-02 21:37:18 2971

原创 【Gstreamer】自定义Plugin及调用Plugin

Gstreamer支持开发者自己创建Plugin,创建后的Plugin可以通过工具查看,并在代码中调用自定义的plugin。Gstreamer 官网中给出了Plugin创建教程,但实际上如果按照教程一步步走,最后会因编译失败的问题无法编译出Plugin的lib库(至少目前在Ubuntu20.04是这样)自定义Gstreamer Plugin通过工具(gst-inspect-1.0)查看自定义Plugin信息调用自定义的Plugin系统:UbuntuGstream版本:1.0。

2023-12-02 18:49:31 3189 2

PC运行的linux模拟器

非常好用的linux系统模拟器,无需安装,直接运行即可。

2015-06-23

移动目标检测MATLAB版

利用MATLAB,基于帧间差分法来检查移动目标。可直接运行。

2015-10-01

DCT水印算法实现MATLAB

基于DCT的水印算法实现,MATLAB版。附带实验图片,可以直接运行。

2015-10-26

k-近邻算法

k-近邻算法(Python版)包括代码和样本集

2016-11-21

matconvnet1.0-beta20

matconvnet,深度学习工具包,Matlab版。

2016-07-29

Windows下caffe训练实例

windows下,caffe训练实例,包含训练数据,以及配置文件。一定将配置文件里面的路径,改为自己电脑上的路径,才可以正确运行。

2016-08-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除