- 博客(32)
- 收藏
- 关注
原创 案例-注册信号频繁上报导致异常退出且未触发死亡回调
目标进程会通过 Android 原生的 CarService 来注册车控信号监听,CarService 首先通过 HIDL 注册车控信号的监听,然后将这些信号通过 binder 异步回调给关注这些信号的监听者,当这些回调过多无法及时处理时,就会造成目标进程异步 binder 空间占满,无法再响应任何其他 binder 请求,异常退出甚至无法发出死亡回调;下图介绍了 Binder 异步通信的流程。
2025-01-16 00:53:52
647
原创 案例-JNI FatalError called导致开机黑屏
查看 AOSP android-15.0.0_r1 的代码,发现 Android 将这里主动断言修改为了 Warning 日志打印,由于当前无法查看到 Google 的修改记录,暂时无从得知更改原因,所以先同步此修改以解决无法开机的问题,后续继续跟踪;ServiceConnector 封装了 bindService 的实现,会对目标进程 com.android.permissioncontroller 的 PermissionControllerServiceImpl 进行绑定;由于在系统启动阶段,
2025-01-14 23:56:36
723
原创 案例1-CarService频繁crash导致system_server watchdog超时
等到下次开机,用户解锁时 UsageStatsService 又会将这些记录从持久化存储读出来通过 android.bg 线程进行分发,假如一条记录需要 1ms,100000 条记录就需要 100s,这样就会导致 android.bg 线程持锁 mLock 一直处理消息,其他线程无法拿到 mLock 触发 system_server Watchdog 超时重启,而且重启设备也无法生效;UsageStatsService 会将事件封装为 Event:包含事件类型,包名和时间戳。
2025-01-14 00:29:57
377
原创 智能座舱可靠性评估
智能座舱系统可靠性发展智能座舱软件系统可靠性发展涵盖了以下几个关键方面:1 信息安全数据保护:确保乘客和车辆数据的安全,防止未授权的访问和数据泄露。加密技术:使用强加密算法来保护传输和存储的数据,防止信息被截获和篡改。访问控制:实施严格的用户身份验证和权限管理,确保只有授权用户才能访问系统。漏洞管理:定期更新软件以修复安全漏洞,防止黑客利用这些漏洞进行攻击。2 功能安全故障检测:实时监测系统状态,快速识别潜在故障。
2024-12-29 23:07:07
1152
原创 adreno源码系列(十)私有内存申请
1. 从kgsl pool中申请物理内存;2. 在GPU虚拟地址空间中寻找一块未被映射的VMA并返回其起始地址;3. 将GPU虚拟地址插入到进程的页表中;4. 将GPU虚拟地址返回给用户空间
2022-12-05 00:06:29
686
1
原创 adreno源码系列(九)全局内存申请
1. 从kgsl pool中申请物理内存;2. 通过vmap将此块物理内存映射到内核虚拟地址空间中;3. 根据物理内存大小计算随机偏移量,结合GPU虚拟基地址计算得到GPU虚拟地址;4. 将GPU虚拟地址添加到IOMMU的页表中;
2022-12-05 00:05:30
820
原创 adreno源码系列(八)adreno_ringbuffer
int adreno_ringbuffer_init(struct adreno_device *adreno_dev){ struct kgsl_device *device = KGSL_DEVICE(adreno_dev); int i; int status = -ENOMEM; if (!adreno_is_a3xx(adreno_dev)) { unsigned int priv = KGSL_MEMDESC_RANDOM | KGSL_MEMDESC_PRIVILEGED
2022-12-05 00:04:24
429
原创 adreno源码系列(七)adreno_dispatcher
static void adreno_dispatcher_work(struct kthread_work *work){ struct adreno_dispatcher *dispatcher = container_of(work, struct adreno_dispatcher, work); struct adreno_device *adreno_dev = container_of(dispatcher, struct adreno_device, dispatcher);
2022-12-05 00:03:45
419
原创 adreno源码系列(六)启动kgsl
int adreno_start(struct kgsl_device *device, int priority){ struct adreno_device *adreno_dev = ADRENO_DEVICE(device); // 当前进程nice值 int nice = task_nice(current); int ret; // 如果指定以低延时的工作队列启动, 而且当前nice值低于-7, 则重新设置其nice值 if (priority && (adreno_
2022-12-05 00:03:16
1125
原创 adreno源码系列(五)打开kgsl
// 接"adreno源码系列(二)kgsl driver"中第3.3节static int kgsl_open_device(struct kgsl_device *device){ int result = 0; mutex_lock(&device->mutex); // kgsl_device->open_count记录/dev/kgsl-3d0被open的次数 if (device->open_count == 0) { // 如果是第一次打开, 则调用adre
2022-12-05 00:02:45
811
原创 adreno源码系列(四)注册platform_driver
static struct platform_driver adreno_platform_driver = { // kgsl probe函数[见第2节] .probe = adreno_probe, .remove = adreno_remove, // device_driver .driver = { .name = "kgsl-3d", // .pm = &adreno_pm_ops, .of_match_table = of_match_ptr
2022-12-05 00:01:58
466
原创 adreno源码系列(三)dts配置与gpu列表
以Find x3 pro设备树文件为例进行分析:https://github.com/oppo-source/android_kernel_modules_and_devicetree_oppo_sm8350/blob/oppo/sm8350_s_12.1_find_x3_pro/vendor/qcom/proprietary/devicetree/qcom/sm8150-gpu.dtsi
2022-12-05 00:01:11
770
原创 adreno系列(二)dts配置与gpu列表
以Find x3 pro设备树文件为例分析:https://github.com/oppo-source/android_kernel_modules_and_devicetree_oppo_sm8350/blob/oppo/sm8350_s_12.1_find_x3_pro/vendor/qcom/proprietary/devicetree/qcom/sm8150-gpu.dtsi
2022-12-05 00:00:50
707
原创 adreno系列(一)kgsl driver
static int __init kgsl_3d_init(void){ int ret; // 初始化kgsl_driver[见第2节] ret = kgsl_core_init(); if (ret) return ret; // 初始化gmu[见第3节] gmu_core_register(); // 注册adreno_platform_driver:见"adreno源码系列(四)注册platform_driver" ret = platform_driv
2022-12-05 00:00:23
1377
1
原创 Linux内存回收机制(二)page cache
每个进程打开一个文件的时候,都会生成一个表示这个文件的,但是文件的只有一个,inode才是文件的唯一标识,指向的指针就是内嵌在inode的;在page cache中,每个page都有对应的文件,管理一个文件在内存中缓存的所有page,它将属于同一文件的page联系起来,将这些page的操作方法与文件所属的文件系统联系起来;
2022-09-23 00:28:39
1181
原创 Android 12.0源码系列之IMS(二)InputManager
Android 12.0源码系列之IMS(二)InputManager本篇涉及到的主要代码:frameworks\native\services\inputflingerframeworks\base\services\core\Android.bpframeworks\base\services\core\jni\Android.bpframeworks\base\services\core\jni\onload.cppframeworks\base\services\core\java\co
2022-01-30 00:13:42
1983
原创 Android 12.0源码系列之IMS(一)InputManagerService
Android 12.0源码系列之IMS(一)InputManagerService本篇涉及到的主要代码:frameworks\base\services\core\java\com\android\server\SystemServer.javaframeworks\base\services\core\java\com\android\server\wm\WindowManagerService.javaframeworks\base\services\core\java\com\android
2022-01-30 00:12:53
1043
原创 Android性能优化之启动优化
Android启动优化1. 启动窗口优化Android系统在Activity的窗口尚未启动完成前,会先显示一个启动窗口(Starting Window),等界面的第一帧渲染完成后再从启动窗口切换到真正的界面显示,启动窗口通常情况下为纯黑或者纯白的背景,如果应用启动慢则启动窗口的显示时间就会变长,给用户的感官就是白屏或者黑屏时间长即启动慢,通常会通过windowDisablePreview这个属性禁用系统默认启动窗口,然后为Activity提供自定义的主题背景(尽量使主题背景与和主页一致),这么做的目的主
2021-09-26 16:17:46
900
原创 Android性能优化之启动耗时测量
Android启动优化之启动耗时测量本文基于Android 11.0源码分析,涉及如下文件frameworks/base/services/core/java/com/android/server/wm/ActivityMetricsLogger.javaframeworks/base/services/core/java/com/android/server/wm/ActivityRecord.javaframeworks/base/services/core/java/com/andro
2021-09-26 16:14:12
2878
原创 Android性能优化之Perfetto
Perfetto一. 通过System Tracing抓取1. System Tracing OverviewSystem Tracing即系统跟踪界面,用户可以通过如下两种方式进入系统跟踪界面:(1)设置 – 其他设置 – 开发者选项 – 系统跟踪(Realme GT Neo 闪速版);(2)adb shell am start com.android.traceur/com.android.traceur.MainActivity;2. System Tracing Options系统跟
2021-09-26 16:09:15
6802
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人