自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 资源 (5)
  • 收藏
  • 关注

原创 binder c++客户端处理流程

binder c++处理流程,主要是分析getservice的过程

2024-04-17 15:41:55 145

原创 binder c++ 服务端处理流程

c++服务端的实现

2024-04-16 15:26:00 549

原创 binder驱动总结

binder驱动总结

2024-04-15 10:58:01 409

原创 binder 添加多线程支持

binder c语言实现添加多线程支持

2024-04-12 17:40:32 271

原创 binder 驱动情景分析-获取服务

客户端获取服务binder驱动分析

2024-04-12 15:10:17 582

原创 binder 驱动情景分析-注册服务

binder驱动分析之注册服务

2024-04-11 17:08:22 572 1

原创 Android 11属性系统初始化流程

属性系统初始化,创建共享内存

2024-04-07 17:58:21 886

原创 Android 11 添加系统属性

介绍各个属性文件的生成过程,并介绍如何添加自定义的系统属性

2024-04-07 12:22:18 1161

原创 初识Android 属性

bootanim进程需要通过检测改属性的值是否为1来退出开机动画,systemserver进程设置该属性来告知bootanim进程。这些函数是定义在libcutils库的properties.h中,使用时需要在Android.mk或者Android.bp中引入该库并添加头文件。在java中,使用SystemProperties类中的set和get方法来设置和获取属性。当然,除了上面文件中默认的属性,我们也可以通过命令或者方法来设置属性。比如获取SDK版本,获取系统语言其实都是通过系统属性得到的。

2024-04-03 18:08:38 692

原创 SeLinux 的编译逻辑

收集 PLAT_PRIVATE_POLICY和 PLAT_PUBLIC_POLICY 目录下的 文件,通过transform-policy-to-conf 进行宏展开,得到plat_policy.conf文件。一文中,我们知道,在init进程对Selinux的处理过程中,会将precompiled_sepolicy或者动态编译相关目录下的cil文件得到的compiled_sepolicy写入给内核。再来看一下cil文件的生成过程,以built_plat_cil 为例,其它的都类似。最终根目录系统结构为。

2024-04-02 16:57:51 656

原创 Android 11 init进程对Selinux的处理

查找的流程是 先找/odm/etc/selinux/precompiled_sepolicy,如果没有,再找/vendor/etc/selinux/precompiled_sepolicy (具体可分析FindPrecompiledSplitPolicy函数)。selinux_android_load_policy_from_fd在libselinux库中,源码路径是external/selinux/libselinux/src/android/android_platform.c。

2024-04-02 15:11:25 447

原创 SeLinux 常见的宏

意味着该声明是可以描述主体和客体的类型切换的, 比如客体文件类型切换, 或者主体进程域的type 切换(上下文切换), 注意:此时只是描述了从哪里切换到哪里的问题。注意:该宏只是申请允许切换,相当于为type_transition申请切换的权限。申请在某个domain(进程)在安全上下文为dir_type的目录下,创建文件,新文件的安全上下文为file_type的权限。允许domain(进程)对安全上下文为type的目录有r_dir_perms权限,文件和lnk_file 有r_file_perms权限。

2024-04-01 17:42:03 338 1

原创 Selinux安全策略文件

2,perm_set集合可以填写什么,需要看access_vectors文件对前面的object_class 的规定。类别,目标(客体)是哪种类别,主要有file,dir,socket, process, SEAndroid 还有binder 等,在这些基础上又细分出设备字符类型(chr_file),链接文件(lnk_file)等。而 file_type,data_file_type等也需要在system\sepolicy\public\attributes文件中定义。3,用type来定义一个新的类型。

2024-04-01 16:38:28 278

原创 SeLinux安全上下文文件

在Android中,常见的安全上下文文件有file_contexts、genfs_contexts、service_contexts、mac_permissions.xml和seapp_contexts。seapp_contexts,app的安全上下文,用于描述apk 安装之后的目录文件和/data/data 目录分配标签。根系统中所有文件的安全上下文, 如/system/bin, /system/etc 等文件。系统binder服务的安全上下文,在启动过程中,servermanger会读取该配置。

2024-04-01 15:08:16 521

原创 Selinux 的模式

androidboot.selinux 的值是否需要开启selinux。(可以直接改is_enforcing 的值或者改/proc/cmdline 文件,当然/proc/cmdline 文件每个平台有每个平台的做法)安卓系统启动过程中, init 进程会进行selinux 的初始化。通过读取/proc/cmdline 文件, 判断。1,临时修改,使用setenforce 命令。setenforce 1 //设置为Enforcing强制模式。2,在内核中直接关闭 Selinux。3,在init中关闭。

2024-03-26 11:41:12 310

原创 Selinux权限介绍

可以看出,这里对主体(platform_app )访问客体(system_file)的子项(比如文件夹)的某项权限都进行了精确的规定。一个文件可以规定为:拥有它的用户具有什么权限,和它同组的用户具有什么权限以及其它的用户具有什么权限。这里说的是用户空间,是因为Seliunx的权限检查还是由内核完成的。load_policy : 加载二进制策略文件,临时性的操作,重启无效, 一般用于调试,如重新编译了策略文件, 替换新的策略二进制文件, 可以重新让系统加载策略文件。五,Seliunx 常见的命令。

2024-03-26 11:11:45 373

原创 Android 锁屏界面启动流程

在 doKeyguardLocked 方法中,经过一系列的判断,决定是否需要显示锁屏界面,如果需要显示,则调用showLocked 方法去显示锁屏界面。前面已经将 mKeyguardState.systemIsReady 置为true 了,所以这里会调用 KeyguardServiceWrapper 的 onSystemReady方法, 最终 调用KeyguardViewMediator 的 onSystemReady 方法。进而调用PhoneWindowManager的systemReady方法。

2024-03-19 18:09:55 983

原创 Android Native Thread类分析

threadLoop 函数体是一个循环,循环体执行的第一次,会调用readyToRun函数,第一次调用时readyToRun返回ture且exitPending为false,会调用threadLoop函数。在Nativie层,创建一个Thread实例后,要让Thread运行起来,调用run函数。在分析Android Nativie 层的代码时,会看到很多相关Thread(线程)的函数,这里分析一下Thread的实现。先判断该线程是否已经运行,如果已经运行的话,直接返回。比较两个线程的ID是否一致。

2024-03-17 11:48:33 434

原创 Amdroid 11 Launcher 启动流程

看堆栈,FallbackHome在pause的时候,引起Launcher3的启动,调用到ActivityStackSupervisor的startSpecificActivity方法,后面的启动流程就和FallbackHome的启动一致了,具体参考。在FallbackHome退出之后,这时候就要启动我们的Launcher了。值得注意的是Launcher并不是从AMS的systemReady方法中启动,而是在FallbackHome 执行 pause的时候调用。可以从调用堆栈里看出。

2024-03-14 18:32:36 354

原创 Android11 FallbackHome启动和关闭流程分析

本文简单的介绍了FallbackHome启动和关闭的代码调用流程。启动流程主要分为以下几步Systemserver进程通过socket,通知Zygote创建新进程新进程创建成功,新进程通知Systemserver可以启动FallbackHomeSystemserver通知FallbackHome,执行其生命周期FallbackHome退出的话,是接收到ACTION_USER_UNLOCKED广播,判断是否解锁并且查找到的Launcher不是自己时,就退出自己。

2024-03-14 15:12:08 1309

原创 Android 调试打印对应的调用堆栈

Android 打印调用堆栈方法

2024-03-13 12:04:24 417

原创 Android 11 SystemServer启动流程

调用gCurRuntime的onZygoteInit函数,gCurRuntime是AppRuntime对象(AppRuntime继承自AndroidRuntime,在app_main.cpp的main函数中初始化),在onZygoteInit 函数中开启线程池。有提到,Zygote通过forkSystemServer,fork出SystemServer进程,并在SystemServer进程中调用handleSystemServerProcess 返回一个 Runnable。run方法中主要完成以下工作。

2024-03-12 18:30:15 1225

原创 Android 11 Zygote启动流程

system/bin/app_process是由frameworks\base\cmds\app_process\app_main.cpp 编译得到的,所以执行 /system/bin/app_process 就是执行app_main.cpp 的main函数。有事件请求,调用processOneCommand,如果是创建子进程的请求,就创建子进程,并在子进程中返回一个Runnable,供ZygoteInit去启动子进程(注意:父进程即Zygote还是在运行,并不会返回退出)

2024-03-12 16:16:23 1119

原创 Android 11 解决开机动画到Launcher黑屏问题

Android 是先启动FallbackHome,再启动Launcher,就导致了在Launcher启动之前,开机动画就退出了,产生黑屏现象。

2024-03-11 19:34:06 465

原创 Android11开机动画退出流程分析

其中 EXIT_PROP_NAME为 service.bootanim.exit,当检测到该属性的值不为0时,就调用 requestExit 退出动画。在所有的windows都绘制完成之后,发送MSG_WINDOW_MANAGER_DRAWN_COMPLETE消息,最终调用到finishScreenTurningOn。进而调用到ActivityTaskManagerService的activityIdle函数中,调用栈如下。通过一步步的调用,最终调用到postFinishBooting,调用信息如下。

2024-03-11 18:34:08 396

原创 Android 11 开机动画启动流程分析

bootanim是在SurfarceFlinger进程中启动

2024-03-11 12:14:51 526

原创 Liunx input子系统框架

框架Liunx Input 框架 包含三部分:核心层(input.c):起到乘上启下的作用,接收来次底层的事件,传递给上层的handlerhandler层: 处理核心层上传的事件,分发给上层应用设备层:硬件相关的驱动,从硬件上读取输入事件,并上报给核心层重要结构体input_dev 表示输入设备input_handler 表示处理程序上面两者匹配成功之后,用 input_handle 保存两者之间的联系获取和上报的事件:input_event注册流程input_dev

2021-11-10 17:44:00 444

原创 UART调试

proc/tty/drivers依次为:driver_name,设备节点前缀,主设备号,次设备号范围,类型proc/tty/driver/px30_evb:/ # ls proc/tty/driver/fiq-debugger serial usbserialpx30_evb:/ # cat proc/tty/driver/serialserinfo:1.0 driver revision:0: uart:16550A mmio:0xFF030000 irq:10 tx:0 rx:0 RTS|

2021-08-26 09:10:46 727

原创 UART驱动 open流程

参考代码串口核心层:drivers/tty/serial/serial_core.cTTY层:drivers/tty/tty_io.c行规程:drivers/tty/tty_ldisc.cdrivers/tty/n_tty.copen 功能描述找到tty_driver分配/设置tty_struct行规程初始化调用tty_driver->ops->open源码分析tty_open driver = tty_lookup_driver(device, filp

2021-08-26 09:10:24 468

原创 UART write过程分析

参考代码串口核心层:drivers/tty/serial/serial_core.cTTY层:drivers/tty/tty_io.c行规程:drivers/tty/tty_ldisc.cdrivers/tty/n_tty.c流程分析tty_write ld->ops->write //调用行规程的write 函数行规程(n_tty.c) 的 write函数:在串口核心层的write 函数中,会先把数据存入buffer ,然后启动串口发送数据uart_wr

2021-08-26 09:10:01 2887

原创 UART read过程分析

参考代码串口核心层:drivers/tty/serial/serial_core.cTTY层:drivers/tty/tty_io.c

2021-08-26 09:09:24 1440

原创 UART驱动注册过程

UART 驱动的注册过程主要由 uart_register_driver 和 uart_add_one_port两个函数来完成uart_register_driver 流程分析1,分配 uart_state 结构体drv->state = kzalloc(sizeof(struct uart_state) * drv->nr, GFP_KERNEL);2,分配tty_driver 结构体normal = alloc_tty_driver(drv->nr); struct

2021-08-02 18:42:48 466

原创 UART 串口驱动程序框架

uart driver 向上注册 uart_driver(uart_register_driver):uart driver 向上注册uart_port(uart_add_one_port)serial core 向上注册 tty_driver

2021-08-02 18:42:05 270

原创 UART 硬件介绍

串口的硬件介绍UART的全称是Universal Asynchronous Receiver and Transmitter,即异步发送和接收。串口在嵌入式领域,应用十分广泛,主要的用途为:打印调试信息外接各种串口设备串口的结构简单,通过三根线(发送,接收,地线)即可:串口的参数波特率:每秒传输多少个bit开始位:先发出一个逻辑“0” 信号,表示传输数据开始数据位:可以是5~8位逻辑“0”或者逻辑“1”校检位:数据位加上该位之后,使得“1” 的个数应为偶数(偶校检)或者为奇数(奇

2021-08-02 18:41:13 1009

原创 rk3399 client 使用 Pincontroller 的过程

涉及的文件:kernel/drivers/base/dd.ckernel/drivers/base/pinctrl.ckernel/drivers/pinctrl/core.ckernel/drivers/pinctrl/devicetree.ckernel/drivers/pinctrl/pinctrl-rockchip.c代码调用流程:really_probe pinctrl_bind_pins dev->pins->p = devm_pinctrl_get(dev);

2021-07-01 18:07:52 222

原创 rk3399 Pincontroller 构造过程分析

主要涉及的文件:kernel/drivers/pinctrl/pinctrl-rockchip.c情景分析:最终引脚的信息会保存在rockhip_pin_config 结构体中代码调用流程:rockchip_pinctrl_probe rockchip_pinctrl_register rockchip_pinctrl_parse_dt info->functions = devm_kzalloc(dev, info->nfunctions * s

2021-07-01 18:07:23 146

原创 rk3399 pinctrl子系统的使用及重要的数据结构

一, 作用1,引脚的枚举与命名2,引脚复用3,引脚的配置二,使用示例2.1,pincontroller设备树信息pinctrl: pinctrl { compatible = "rockchip,rk3399-pinctrl"; rockchip,grf = <&grf>; rockchip,pmu = <&pmugrf>; #address-cells = <0x2>; #size-cells = <0x2>;

2021-07-01 18:05:43 896

原创 Android 编译可执行文件

Android.mkLOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := testLOCAL_SRC_FILES := test.cLOCAL_MODULE_TAGS := optionalinclude $(BUILD_EXECUTABLE)

2021-03-26 16:53:49 241

原创 Liunx-字符设备

应用程序调用open,read,write 这些函数,是怎么调用到驱动中的drv_open,drv_read,drv_write 中呢?要弄清楚这个问题,只要搞清以下几点:1,当应用程序调用open 这些函数,系统怎么知道,打开的是普通文件,还是要调用字符设备驱动中的drv_open函数呢?2,当知道要调用设备驱动中的函数之后,内核怎么知道调用的是哪个驱动中的函数呢?先看一下设备属性:crw-rw-rw- 1 root root 5, 0 1970-01-01 08:00 ttyc:设备类型

2021-03-23 11:04:46 84

原创 rk3288 RTC实现定时开关机

一,方案PMU: RK808RTC: hym8563内核版本: Liunx 4.4硬件上需要把RTC的中断脚接到RK808的开机引脚上二,RTC驱动模型与RTC核心有关的文件有:/drivers/rtc/class.c 这个文件向linux设备模型核心注册了一个类RTC,然后向驱动程序提供了注册/注销接口/drivers/rtc/rtc-dev.c 这个文件定义了基本的设备文件操作函数/drivers/rtc/interface.c 这个文件主要提供了用户

2021-03-10 20:01:44 3131 1

binder通讯 c++源码

c++实现binder通讯

2024-04-16

c代码使用binder

c代码使用binder,添加多线程支持

2024-04-12

binder-c.zip

binder跨进程通讯C程序示例

2024-04-09

ST7701S_SPEC_ V1.1.pdf

ST77701S 转换芯片规格书

2021-02-25

1000Hz-0dB.wav

纯音乐,无增益,可用来测试喇叭的功率

2021-02-25

app-dev-release.apk

屏保apk,可以直接使用作为屏保

2021-02-25

RGB 接口波形图.pdf

rgb 屏的波形图,信号不对可参考

2021-02-25

readme.txt

px30 主板喇叭没声音排查方案

2021-02-25

空空如也

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

TA关注的人

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