- 博客(45)
- 资源 (5)
- 收藏
- 关注
原创 初识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 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
原创 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
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人