Android系统工程师开发手册
文章平均质量分 86
以Android系统层为出发点, 讲解Android系统源码中涉及到的底层开发技术, 包括编译系统, 系统服务等
旗浩QH
佛系点
展开
-
Android系统10 RK3399 init进程启动(四十九) init第二阶段分析
selinux初始化: 第一阶段的selinux初始化,完成策略二进制文件的加载,并设置默认selinux模式。之前的课程已经详细讲解过,此处就不过多讲解,可以参考第五章节:SeAndroid权限控制。第二阶段: 重点完成属性初始化,启动rc脚本的解析和执行,建立epoll机制监控各种事项。原创 2023-03-01 22:22:48 · 796 阅读 · 2 评论 -
Android系统10 RK3399 init进程启动(四十八) init第一阶段分析
第一阶段整理框架: 执行在boot.img(ramdisk)中,主要创建必须的文件夹,挂载虚拟文件系统,挂载system,vendor分区。原创 2023-03-01 22:12:07 · 910 阅读 · 0 评论 -
Android系统10 RK3399 init进程启动(四十七) Android init 进程整体代码逻辑简述
1, 第一阶段: 执行在 ramdisk 中, 主要创建必须的文件夹, 挂载虚拟文件系统, 挂载 system,vendor 分区。2, selinux 初始化: 第一阶段的 selinux 初始化, 完成策略二进制文件的加载, 并设置默认 selinux 模式。3, 第二阶段: 重点完成属性初始化, 启动 rc 脚本的解析和执行, 建立 epoll 机制监控各种事项。、原创 2023-02-28 22:58:40 · 486 阅读 · 0 评论 -
Android系统10 RK3399 init进程启动(四十六) init.rc实战之控制自定义开机脚本的启动
默认自定义的脚本,可以在rc文件中指定class core, 或者class main,来让系统开机就自动执行,当然也可以根据自己的需求,让脚本或者可执行程序服务在指定的时候进行启动。原创 2022-12-11 21:59:57 · 1436 阅读 · 2 评论 -
Android系统10 RK3399 init进程启动(四十五) 实战Init.rc脚本中之日志永久化保存
init.rc除了可以做开机启动的事情,还可以做行为控制,主要是可以通过action中的属性作为触发事件,这个功能非常有用,可以让我们做一些异步事件的逻辑控制。原创 2022-12-11 21:45:10 · 1557 阅读 · 0 评论 -
Android系统10 RK3399 init进程启动(四十四) 实战Android开机自启动脚本
init.rc中的命令实际是有限的, 如果需要执行常见shell的脚本, init.rc是没法满足需求的, 所以在实际开发中经常需要开机启动shell脚本的事情。上个章节介绍了如何开机启动可执行程序(代码类),本章节重点介绍如何开机启动一个shell脚本原创 2022-12-11 21:27:55 · 1625 阅读 · 0 评论 -
Android系统10 RK3399 init进程启动(四十三) ROM定制开机自启动服务(C++程序)
Android init启动的rc脚本中包含了很多后台服务(service),这些服务负责不同功能, 比如netd负责网络管理, rild负责无线通信, installd负责app的安装等。在实际的系统ROM定制开发中, 我们需要定制化自己服务,本章节重点介绍如何编写一个Native服务,并完成开机自启动。原创 2022-10-30 23:07:42 · 1613 阅读 · 1 评论 -
Android系统10 RK3399 init进程启动(四十二) init.rc文件解析逻辑
Android init启动的时候会解析init.rc, 当然还有很多其他rc文件, 在init进程代码中有对应的解析器, 本章节重点介绍init.rc中所有的内容是如何被解析的,理解这个解析逻辑, 有利于你对rc文件中action和service实际的执行逻辑,方便后期根据需求做一些深度定制化。原创 2022-10-16 22:14:21 · 1140 阅读 · 5 评论 -
Android系统10 RK3399 init进程启动(四十一) 最新最详细的init.rc语法讲解
Init.rc 中的语法都是Android自定义的, system/core/init/README.md有具体语法说明 ,整个init.rc 其实有以下几个部分组成原创 2022-10-09 22:53:03 · 3853 阅读 · 4 评论 -
Android系统10 RK3399 init进程启动(四十) 开机自启动脚本init.rc执行逻辑框架
这个章节我们开始学习新的知识点, init.rc相关概念, 也就是Android开机自启动的脚本, 这个脚本能启动shell脚本, 也能启动C/C++写的守护进程, 这些脚本都是init祖先进程启动的, 各种系统中都有类似这个东西,比如各种linux系统中有/etc/rc.d/中rc脚本,而Android的脚本是做了定制化的, 我们需要单独来学习它原创 2022-09-18 13:03:52 · 1980 阅读 · 6 评论 -
Android系统10 RK3399 init进程启动(三十九) property属性系统初始化代码分析
除了了解属性的基本概念,还要知道如何利用属性开发和编程, 更要理解属性背后的涉及原理, 也就源码也要去研究一下, 本章节重点介绍属性系统初始化。原创 2022-09-17 14:44:35 · 1425 阅读 · 0 评论 -
Android系统10 RK3399 init进程启动(三十八) 属性Selinux实战编程
一般在pemissive模式下, 修改属性时, 权限问题不是很突出, 但是一旦在enfocing模式,权限配置就非常重要, 甚至有些时候非常麻烦, 所以希望大家通过这几次实战selinux编程, 对selinux的规则有深刻理解。原创 2022-09-07 20:59:41 · 1933 阅读 · 2 评论 -
Android系统10 RK3399 init进程启动(三十七) 属性代码编程
上一节介绍了属性操作的各个API, 本章节通过实战代码来演示如何应用属性。原创 2022-08-16 21:45:59 · 994 阅读 · 2 评论 -
Android系统10 RK3399 init进程启动(三十六) 属性property操作API
在Android中,各种代码场景下都会对属性进行代码操作, 所以需要了解一下常见的C, C++,java中属性的各种API。原创 2022-08-16 21:29:50 · 1630 阅读 · 0 评论 -
Android系统10 RK3399 init进程启动(三十五) 属性文件介绍和生成过程
init进程在启动会去加载后缀为.prop的属性问文件, 将属性文件中的属性加载到共享内存中, 这样系统就有了默认的一些属性, 本章节介绍常见属性文件,以及这些文件是如何生成的。原创 2022-08-13 23:08:25 · 1939 阅读 · 0 评论 -
Android系统10 RK3399 init进程启动(三十四) 常见Property属性
通过getprop命令可以获取系统中大部分的属性,为啥说是大部分, 因为还有一些因为selinux权限原因, 不一定获取到到, 对于老版本Android系统, 是可以全部获取的原创 2022-08-02 20:56:29 · 2650 阅读 · 0 评论 -
Android系统10 RK3399 init进程启动(三十三) property属性系统框架
属性是android系统用于为系统提供公共信息, 进程间通信,以及用于行为控制的键值对, key一般都是以点分格式存在, 如[ro.kernel.lcd.width]: [720], 同时键值对一般存放在共享内存中供各个进程使用原创 2022-08-02 20:42:57 · 1077 阅读 · 0 评论 -
Android系统10 RK3399 init进程启动(三十二) SeAndroid实战之策略更新和验证
上一个章节介绍了如何定义策略, 并编译得到目标文件, 这些目标文件需要在开发上进行更新验证。原创 2022-07-20 20:54:04 · 943 阅读 · 2 评论 -
Android系统10 RK3399 init进程启动(三十一) SeAndroid实战之定义策略
通过实战例子来验证理论, 本章节重点介绍如何定义策略。原创 2022-07-20 20:25:59 · 881 阅读 · 0 评论 -
Android系统10 RK3399 init进程启动(三十) Selinux编译方法
本章节重点介绍在Android源码中如何编译selinux模块, 以及如何查看编译日志原创 2022-07-07 19:45:34 · 3061 阅读 · 3 评论 -
Android系统10 RK3399 init进程启动(二十九) SeAndroid编译规则目录
本章节重点介绍在Android源码中, 涉及selinux策略文件所在目录和文件,以及编译规则原创 2022-06-28 20:47:23 · 1418 阅读 · 3 评论 -
Android系统10 RK3399 init进程启动(二十八) SeAndroid政策兼容性
在Android 开始treble计划之后, vendor和system可以分开进行升级,此时就会涉及到selinux在升级过程中出现的策略兼容性问题。详细介绍可以参考谷歌官网原创 2022-06-28 20:30:32 · 559 阅读 · 3 评论 -
Android系统10 RK3399 init进程启动(二十七) Selinux Type和Attribute
Selinux实现的是强制类型访问模型, 可以简单理解一切都是类型, 不管是主体还是客体,都必须类型化, 如客体和客体和主体都需要设置安全上下文, 客体格式为u:r:xxx:s0, 主体为u:object_r:yyy:s0, 其中xxx和yyy是可以自定义的, 但是需要通过type进行类型化声明, 你可以理解type为一个动词,为xxx取名,客体一般声明type, 主体一般声明为domain...原创 2022-06-14 19:55:54 · 2442 阅读 · 0 评论 -
Android系统10 RK3399 init进程启动(二十六) Selinux TE文件和语法
安卓系列教程之ROM系统开发-百问100ask系统:Android10.0设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)te文件:Type Enforce文件, 该文件主要完成策略的制定, 文件中有非常多的语句, 我们需要基本掌握和理解其中的语法和语义,这样才能有利于我们进行开发。上图是整个框图, 具体意思,请参考视频教程和之前的文章, 上面打星的地方就是本章节重点介绍的。Te文件中一般经常出现如下语句: 在system/sepolicy/private/adbd.te文件中原创 2022-06-01 20:51:18 · 2399 阅读 · 6 评论 -
Android系统10 RK3399 init进程启动(二十五) SeAndroid 安全上下文文件
安卓系列教程之ROM系统开发-百问100ask系统:Android10.0设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)本章节介绍SeAndroid中常见的几个安全上下文文件。在Android源码中会存在几个重要的上下文文件, 用来描述系统和属性,服务等的上下文信息, 路径在system/sepolicyfile_contexts根系统中所有文件的安全上下文, 如/system/bin, /system/etc等文件,源码路径如: system/sepolicy/privat原创 2022-06-01 20:45:05 · 722 阅读 · 0 评论 -
Android系统10 RK3399 init进程启动(二十四) Selinux三种模式
配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask说明系统:Android10.0设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)前言本章节介绍Selinux工作的三种模式,并知道如何切换三种模式。一, Selinux三种模式介绍selinux一般有三种模式, Disabled、Permissive 和 Enforcing,SEAndroid是基于SElinux, 所以也是一样有这三种模式。1, Disab...原创 2022-05-18 11:56:24 · 2601 阅读 · 2 评论 -
Android系统10 RK3399 init进程启动(二十三) 初识Selinux 安全策略
配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask说明系统:Android10.0设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)前言本章节介绍Selinux的安全策略的基本规则, 先入为主的了解最简单的东西, 然后再慢慢深入更细节东西。一, 最简单的安全策略规则配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask说明系统:Android10.0设备: FireFly RK...原创 2022-05-07 20:17:37 · 919 阅读 · 0 评论 -
Android系统10 RK3399 init进程启动(二十二) SEAndroid 框架
配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask说明系统:Android10.0设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)前言本章节介绍SEAndroid(Security Enhanced for Android Selinux整体框架, 了解整体,再去看细节就容易很多.一, 框图介绍:SEAndroid框架是由用户空间和内核空间组成, 用户空间安全保护机制中主要包含安全上下文(Security...原创 2022-05-07 20:08:49 · 933 阅读 · 3 评论 -
Android系统10 RK3399 init进程启动(二十一) DAC和MAC介绍
配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask说明系统:Android10.0设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)前言本章节开始讲解SEAndroid相关的概念,更多是理论性的内容,帮助大家慢慢对SeAndroid有一个初步认识。一, DAC权限控制概念selinux之前, linux采用的是DAC (Discretionary Access Control,自主访问控制系统)基本概念就是系统只提供基...原创 2022-05-07 19:12:46 · 1715 阅读 · 1 评论 -
Android系统10 RK3399 init进程启动(二十) SEAndroid 缩写与名词解释
配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask说明系统:Android10.0设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)前言接下来会给大家介绍Android Selinux的相关知识,讲解之前,将部分相关名词和缩写先列举出来。一, 缩写与名词解释 DAC Discretionary Access Control,自主访问控制系统 MAC ...原创 2022-05-07 19:04:39 · 999 阅读 · 1 评论 -
Android系统10 RK3399 init进程启动(十九) init进程日志重定向至内核
配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask说明系统:Android10.0设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)前言本文重点介绍init进程在启动的时候使用的日志重定位技术,方便大家去理解init进程代码中关于日志重定向的逻辑。一:介绍Android系统init进程启动的时候,log子系统没有启动起来, 但是我们仍然可以可以使用logcat -b kernel看到init进程的日志, 这是怎么做到的...原创 2022-05-07 18:33:10 · 1146 阅读 · 0 评论 -
Android系统10 RK3399 init进程启动(十八) isLoggable日志级别输出控制
配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask说明系统:Android10.0设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)前言在编写代码时, 有不同的级别的日志, 有些日志需要在调试阶段看, 在运行时就不能出现, 此时就可以通过android提供的接口来进行控制日志的输出。一, 编译控制#define LOG_INFO 5#define LOG_DEBUG 6#definecurrent_d...原创 2022-03-03 10:30:25 · 2795 阅读 · 0 评论 -
Android系统10 RK3399 init进程启动(十七) Verbose日志级别打开方式
配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask说明系统:Android10.0设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)前言Android系统中C/C++代码中verbose级别的日志是不会输出,是因为一个开关没打开,本节就给大家介绍如何打开这个开关。一, 介绍在底层调试系统代码时,会有ALOGV级别代码, 这些在调试的时候能帮我们看到更加详细的日志,这样更方便我们去理解系统代码,比如app_proces...原创 2022-02-28 22:58:32 · 3237 阅读 · 0 评论 -
Android系统10 RK3399 init进程启动(十六) Android Log日志编写
配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask说明系统:Android10.0设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)前言Android系统中日志基本都是通过log系统来实现, 在代码中可以通过相应的接口来输出不同等级的日志, 不同的缓冲区有不同的API, 等级有Verbose, Debug,Info,Warn,Error。本章节主要讲解log日志的API。一, 日志系统框架之前的的课程中讲解了整体框架,...原创 2022-02-23 23:26:32 · 3011 阅读 · 1 评论 -
Android系统10 RK3399 init进程启动(十五) 配置新产品
配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask说明系统:Android10.0设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)前言 前面几个章节我们把产品配置文件结构,文件内容,大体介绍了一下,我们可以通过实战一把, 在源码中配置一个新产品。本章节的目标就是在rk3399源码中创建一个新的产品,名字可以自定义为qh100_rk3399。一, 拷贝参考模板将device/rockchip/rk33...原创 2021-12-14 17:16:50 · 2687 阅读 · 1 评论 -
Android系统10 RK3399 init进程启动(十四) 产品配置各种变量
配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask说明系统:Android10.0设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)前言 本章重点介绍在device.mk, BoardConfig.mk, 产品名.mk中出现各种变量的意思。一,包含1, inherit-product函数表示继承另外一个文件:$(call inherit-product, $(SRC_TARGET_DIR)...原创 2021-12-13 20:59:07 · 2148 阅读 · 0 评论 -
Android系统10 RK3399 init进程启动(十三) 产品配置相关文件
说明系统:Android10.0设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)前言 上篇文章介绍了产品配置的结构和重要目录, 而这些目录中有几个非常重要的文件, 本文重点介绍和产品配置相关的文件和脚本。一,AndroidProducts.mk(必须)AndroidProducts.mk文件用于描述产品列表,表示当前公司有哪些产品, 主要包括PRODUCT_MAKEFILES变量,会记录各个产品所用的Makefile...原创 2021-12-13 20:48:38 · 2958 阅读 · 0 评论 -
Android系统10 RK3399 init进程启动(十二) 产品配置结构
配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask说明系统:Android10.0设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)前言 Android源码是可以运行在多种架构, 多种SOC上的,必然就有硬件客制化的代码,这些代码一般都是SOC原厂, ODM/OEM公司在Android中对各种底层硬件进行适配的代码, 所以编译源码必定会通过一定的配置来选择那些客制化的代码, 而这个就是通过产品配置来完成。...原创 2021-12-13 19:53:48 · 1766 阅读 · 0 评论 -
Android系统10 RK3399 init进程启动(十一) 内核编译
配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask说明系统:Android10.0设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)前言 本章重点介绍在Android 源码包中,内核的的单独编译。一, 内核目标清除内核如果编译过, 需要重新重头编译,或者打包给别人, 可以对内核进行清除cd rk3399_Android10.0/kernel/make distclean 或者 make...原创 2021-12-08 17:04:19 · 2004 阅读 · 0 评论 -
Android系统10 RK3399 init进程启动(十) parameter.txt 文件详解
配套系列教学视频链接: 安卓系列教程之ROM系统开发-百问100ask说明系统:Android10.0设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)前言 在uboot启动,以及生成的所有镜像文件中, 有一个parameter.txt文件, 这个文件通过名字就知道, 参数文件, 肯定是和定制化和启动有关, 学习他很有必有, 本章重点介绍parameter.txt里的内容。一,简介ls rockdev/Image-rk3...原创 2021-11-22 20:17:59 · 2509 阅读 · 0 评论