自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(320)
  • 收藏
  • 关注

原创 HIDL Hal 开发笔记1----Android 8 HAL 变迁

摘要 本文分析了Android 8中HAL层的重要变革。传统HAL架构存在升级困难的问题,Google通过引入Treble架构进行改进:将HAL移至独立Vendor分区,改用进程间通信(HwBinder),并严格规范系统分区与Vendor分区的交互方式。文章详细介绍了VNDK、LL-NDK和SP-HAL等新机制如何解决交叉依赖问题,确保系统可单独升级。同时对比了HwBinder与传统Binder的异同,指出HwBinder是专为Framework与Vendor分区通信设计的RPC框架。这些改进显著提升了An

2025-12-24 14:23:48 690

原创 传统 Hal 开发笔记6----App 访问硬件服务

App 访问硬件服务。

2025-12-16 16:02:42 176

原创 传统 Hal 开发笔记5 —— 添加硬件访问服务

本文介绍了Android系统中添加硬件访问服务的实现过程,主要包括三个部分:1)定义AIDL接口文件IHelloService.aidl,声明open、write、read等硬件操作方法;2)实现服务端HelloService.java,继承AIDL接口并声明本地JNI方法;3)通过JNI层com_android_server_HelloService.cpp实现硬件模块加载和具体操作,包括设备打开、数据读写等功能。整个实现遵循Android HAL架构,通过JNI桥接Java层与底层硬件驱动,为上层应用提

2025-12-15 16:35:22 257

原创 传统 Hal 开发笔记4----实现 Hal 模块

本文摘要介绍了如何为驱动程序实现一个简单的HAL模块。主要内容包括:1)定义hello_hal.h头文件,创建hello_hal_device_t结构体及相关函数原型;2)实现hello_hal.c源文件,包含设备操作函数如open/read/write的具体实现;3)构建HAL模块入口HAL_MODULE_INFO_SYM,并初始化模块方法和设备结构体。该HAL模块通过文件描述符操作/dev/hello设备,提供了标准化的硬件抽象层接口。

2025-12-12 17:04:43 299

原创 传统 Hal 开发笔记3----驱动开发

本文介绍了Linux内核驱动的开发流程。首先编写了一个简单的字符设备驱动hello_driver.c,实现了open/read/write等基本操作,并通过module_init/exit机制注册驱动。然后将该模块配置到内核编译选项中,修改Kconfig和Makefile使其可编译进内核。最后开发了一个Native测试程序,通过文件操作接口验证驱动功能。整个过程涵盖了从驱动开发、内核编译到应用测试的完整流程,展示了Linux设备驱动的基本开发方法。

2025-12-11 15:58:19 849

原创 传统 Hal 开发笔记2----传统 HAL 整体架构

本文分析了Android系统中App访问硬件设备(以振动器为例)的流程。首先通过getSystemService()方法获取系统服务,最终由SystemServiceRegistry注册并管理各类服务。对于振动器服务,系统会创建SystemVibrator对象,通过Binder机制与底层VibratorService通信。VibratorService再通过JNI调用HAL层库函数,最终通过Linux系统调用操作硬件驱动。整个流程展示了Android系统从应用层到硬件驱动的完整调用链,体现了系统服务注册机制

2025-12-10 17:04:31 998

原创 传统 Hal 开发笔记1----传统 HAL简介

本文介绍了Android 8之前的传统HAL开发流程。传统HAL以so库形式存在,Framework通过JNI加载,并以Binder服务向App提供硬件接口。开发步骤包括:编写Linux驱动、实现HAL模块、修改JNI加载代码、添加硬件服务模块,最后开发App调用硬件服务。该流程展示了从底层驱动到上层应用的完整HAL开发过程。

2025-12-09 15:23:31 195

原创 安卓Telephony中的 phoneId、subId、simSlotIndex含义对比

摘要: Android多SIM卡管理涉及三个关键标识符:subId(订阅ID)、simSlotIndex(SIM卡槽索引)和phoneId(手机ID)。subId是逻辑订阅标识,用于区分运营商服务;simSlotIndex对应物理卡槽位置;phoneId表示底层modem标识。获取方式主要通过SubscriptionManager和TelephonyManager服务,需要READ_PHONE_STATE权限。开发者应优先使用subId和simSlotIndex进行SIM卡操作,phoneId主要用于系统内

2025-11-14 10:46:53 632

原创 APN基础分析

本文介绍了Android系统中APN配置的三个关键部分:apns-conf.xml、TelephonyProvider和ApnSettings。apns-conf.xml定义了APN属性,如运营商名称、网络类型等必选和可选参数。TelephonyProvider负责将APN配置存储到数据库,处理重复APN合并及默认APN存储。ApnSettings则提供APN的UI显示和编辑功能,包括特殊类型APN的显示控制和MVNO优先匹配逻辑。调试时可删除telephony.db文件重建数据库,需注意MTK平台的默认A

2025-11-07 14:58:15 597

转载 LTE模块注网过程及其APN设置

LTE模块注网流程的核心在于理解APN(网络接入点)和PLMN(公共陆地移动网络)的作用。APN决定了设备如何接入网络,必须与运营商要求匹配才能上网;PLMN则用于区分不同运营商网络,SIM卡内置了归属和漫游PLMN信息。设备上电后先扫描周围基站,根据SIM卡中的PLMN优先级选择最佳网络,并配置对应APN完成注册。若首次尝试失败,会按优先级顺序继续尝试其他PLMN。整个过程解决了设备如何选择运营商网络并正确接入互联网的关键问题。

2025-11-07 14:25:45 154

原创 安卓14移植以太网&&framework-connectivity-t 编译问题

本文摘要: 本文主要分析了Android 12到Android 14版本中有线网络功能的变更情况。重点包括:1) 新增了对设置有线网络参数接口方法的限制,Android 11以上版本无法直接调用;2) 新增了有线网络开关控制接口;3) 引入了updateConfiguration新接口方法,但仅限车载设备使用;4) 指出有线网络静态IP和代理信息在重启后无效的问题。文章还分析了相关代码存放路径和实现逻辑的变化,并提出了针对不同Android版本的适配建议,特别是对车载设备的特殊处理方式。

2025-11-06 15:38:02 636

原创 SELinux 中的 TE 和 MLS 区别对比

SELinux是Linux内核的强制访问控制系统,包含Type Enforcement (TE)和Multi-Level Security (MLS)两种核心模型。TE基于类型标签实现横向隔离,主要用于进程和资源访问控制;MLS则通过安全级别和类别实现纵向分级安全,遵循Bell-LaPadula模型防止信息泄漏。Android系统默认使用TE实现应用沙箱隔离,并采用简化的MLS(MCS)进行文件类别控制。两者可结合使用,TE提供基础访问控制,MLS增强信息流管理。TE灵活性高但缺乏分级控制,MLS安全性强但

2025-10-30 14:21:40 774

原创 selinux权限之mlstrustedsubject解决s0:c512,c768问题

selinux权限之mlstrustedsubject解决s0:c512,c768问题

2025-10-29 16:11:05 664

原创 安卓系统属性之androidboot.xxx转换成ro.boot.xxx

摘要 Android设备启动时,init进程会处理内核命令行参数和设备树(DT)属性。在SecondStageMain阶段,init会依次执行process_kernel_dt()和process_kernel_cmdline()来获取这些参数。process_kernel_dt()会检查设备树中的compatible属性是否为"android,firmware",若匹配则读取DT目录下的其他属性文件,将内容处理后设置为ro.boot.*属性。整个过程优先使用DT中的参数,若未找到则回退

2025-08-07 16:31:23 1364

原创 Linux(android)内核cmdline基础了解

Android内核命令行概述与配置 Android内核命令行是启动时传递给Linux内核的参数序列,用于配置内核行为、硬件初始化和调试选项。可通过/proc/cmdline查看,常见参数包括: 通用参数:如console指定控制台设备、root定义根文件系统 Android专有参数:以androidboot.前缀标识,如硬件平台设置和SELinux模式 硬件相关参数:如USB控制器配置和低功耗模式 调试参数:包括日志级别和早期控制台设置 配置方式有两种: 通过设备树中的bootargs定义 通过bootlo

2025-08-06 15:22:28 1197

原创 安卓系统属性详解

Android系统中的SystemProperties机制用于管理系统级别的配置参数,通过键值对存储属性,具有只读/只写访问限制和层级存储特性。属性服务property_service由init进程启动,在SecondStageMain()中完成初始化、加载默认配置和启动服务。property_init()会创建共享内存目录并加载xxx_property_contexts文件,构建属性信息的序列化存储。

2025-08-05 15:25:47 990

原创 安卓SELinux策略语法

本文介绍了安卓SELinux策略中的语法规则,主要包括:1)通用AV规则语法(allow、neverallow等);2)类型声明(type)及其属性关联(typeattribute);3)属性定义(attribute)和类型分组机制;4)别名定义(alias/typealias)及其兼容性作用;5)init_daemon_domain宏的详细解析,该宏用于为init启动的守护进程配置独立SELinux域。文章通过具体示例说明了各类语法规则的使用场景和编写规范,为安卓SELinux策略开发提供了实用参考。

2025-07-31 09:48:52 1608

原创 安卓JNI之纯native线程中的native方法调用Java层

摘要: 在JNI开发中,纯native线程调用Java层方法的核心问题在于获取JNIEnv环境。正常JNI调用通过Java层触发时会自带JNIEnv,而纯native线程需手动获取。解决步骤: 获取JavaVM:通过AndroidRuntime::getJavaVM(); 绑定线程获取JNIEnv:调用AttachCurrentThread(&env, &args),其中args可定制线程属性; 使用JNIEnv:调用Java方法(如CallStaticVoidMethod); 解绑线程:完

2025-07-01 11:24:58 1005

原创 安卓JNI的两种写法以及参数isCopy的深度理解

本文分析了JNI的两种编程风格及其底层机制,重点探讨了字符串处理中的isCopy参数。文章指出C语言风格的JNI需要显式解引用env并传递环境指针,而C++风格则通过封装自动处理;解析了isCopy参数在字符串获取模式中的意义,强调无论是否拷贝都必须调用Release函数解除资源绑定;并通过实测数据展示了现代JVM对字符串处理的优化策略。核心结论是:开发者应忽略isCopy的具体值,始终遵循Get/Release配对原则以确保内存安全。全文通过对比表格和示意图清晰呈现了JNI编程的关键差异和最佳实践。

2025-06-27 17:00:27 991

原创 Linux驱动之杂项设备

摘要:本文介绍了Linux设备驱动的分类,重点讲解了杂项设备的特点与开发流程。主要内容包括:1) Linux三大设备驱动类型(字符设备、块设备、网络设备);2) 杂项设备的概念及其主次设备号机制;3) 关键数据结构miscdevice和file_operations的解析;4) 杂项设备的注册/注销流程及代码模板;5) 通过实验演示如何注册一个杂项设备并生成设备节点。实验结果表明,按照流程成功注册了一个名为"hello_misc"的杂项设备,验证了开发方法的正确性。

2025-06-27 13:33:27 498

转载 Android启动流程-Loader

RK芯片启动流程解析:从Bootloader到Linux内核加载 摘要:本文详细分析了RK芯片的启动流程,分为6个关键步骤:(1)Boot Rom硬件检测与引导程序加载;(2)DDR初始化与频率调整;(3)SPL板级初始化寻找U-boot镜像;(4)BL31/BL32安全启动环境建立;(5)U-boot执行硬件初始化(包括内存、电源管理、显示接口等);(6)内核加载阶段完成Android系统启动。整个流程涉及Bootloader与内核的交互,特别说明了设备树(dtb)通过内存地址传递的机制。启动日志分析显示

2025-06-25 17:15:03 216

原创 Android添加GPIO驱动

Android添加GPIO驱动

2025-06-17 11:09:08 339

原创 debugfs:Linux 内核调试的利器

debugfs:Linux 内核调试的利器

2025-05-16 14:39:41 1559

原创 Android.mk基本符号说明

Android.mk基本符号说明

2025-05-08 15:00:45 358

原创 安卓adb shell串口基础指令

安卓adb shell串口基础指令

2025-04-24 14:53:15 1644

原创 Android系统的完整启动流程:从硬件上电到应用启动

Android系统的完整启动流程:从硬件上电到应用启动

2025-04-15 16:10:49 2036

原创 Makefile字符串操作函数

Makefile字符串操作函数

2025-04-07 13:55:15 551

原创 Android.mk之编译APP

Android.mk之编译APP

2025-03-19 15:47:03 1121

原创 安卓驱动框架:字符设备和杂项设备

安卓驱动框架:字符设备和杂项设备

2025-03-06 14:46:28 782

原创 makefile 的strip,filter,ifeq,ifneq基础使用

makefile 的strip,filter,ifeq,ifneq基础使用

2025-02-07 18:12:47 2139

原创 安卓系统源码如何导入原生androidx资源文件?

安卓系统源码如何导入原生androidx资源文件?

2025-02-05 17:19:23 737

原创 Unix/Linux编程:fcntl函数总结

Unix/Linux编程:fcntl函数总结

2025-02-05 14:18:12 1391

原创 Makefile 常用函数详解

Makefile 常用函数详解

2025-01-17 10:42:20 798

原创 Android 中mk文件语法浅析

Android 中mk文件语法浅析

2025-01-13 15:32:24 1078

转载 Android在init.rc中自定义开机启动进程(service)

Android在init.rc中自定义开机启动进程(service)

2025-01-13 14:32:59 1019

原创 netlink加异步套接字select函数捕获USB插拔事件

netlink加异步套接字select函数捕获USB插拔事件

2024-12-13 15:30:16 313

原创 Linux 串口编程

Linux 串口编程

2024-12-10 09:48:00 1151

原创 动态链接库dlopen、dlsym与函数指针的联合妙用

动态链接库dlopen、dlsym与函数指针的联合妙用

2024-12-06 14:57:22 722

原创 Linux之信号集基础

Linux之信号集基础

2024-12-03 16:38:47 1200

原创 安卓智能指针sp、wp、RefBase浅析

安卓智能指针sp、wp、RefBase浅析

2024-11-07 17:12:13 1619

notepad++ 前进后退插件

功能主治:该插件适用于notepad++的前进后退功能 适用人群:卑微的码农

2024-02-01

空空如也

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

TA关注的人

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