选择主题
☀️ 浅色
🌙 深色
🌿 护眼
Ctrl+K

04-vendor/giec/厂商定制层分析

vendor/giec/ 厂商定制层分析 基于 device-giec.mk 逐行追踪,理解"厂商如何改系统" 参考代码库:vendor/giec/,Android 14 + Amlogic S905X5M 目录 device-giec.mk 总览 GApps 集成(条件编译) SELinux 策略 HIDL 服务声明(manifest + matrix) HIDL 客户端与服务端(hwstbcmdservice) 预置 APK 预置二进制与 Shell 脚本 设备配置与条件编译 ADB 与调试配置 签名配置 1. device-giec.mk 总览 vendor/giec/ ├── Android.mk # 入口:遍历所有 subdir ├── device-giec.mk # ★ 核心 Makefile,被 device 层 include ├── common/ │ ├── Android.mk # 编译 apps/ 和 libraries/ 下的模块 │ ├── Android.bp │ ├── sepolicy/ # SELinux 规则(.te 文件) │ ├── manifest.xml # HIDL 服务声明(设备提供什么服务) │ ├── compatibility_matrix.xml # HIDL 需求声明(设备需要什么服务) │ ├── keys/ │ │ └── adbkey.pub # ADB 预置公钥 │ ├── libraries/hwstbcmdapi/ # ★ 核心 HIDL 服务完整实现 │ └── files/Privacy_Policy.txt # 隐私政策 ├── apps/ # 预置 APK │ ├── OTAClient/ │ ├── BazeportLauncher/ │ ├── BazeportSystem/ │ ├── LeanKeyboard/ │ ├── Glauncher/ │ ├── STB-TEST/ │ ├── remove_unused_module/ │ └── busybox/ ├── hardware/interfaces/ # HIDL .hal 定义 │ └── hwstbcmdservice/ │ └── 1.0/ └── executable/ # Shell 脚本工具集 ├── get_display_id.sh └── network/ device-giec.mk 在构建系统中被 device/amlogic/ross/device.mk(或类似设备配置)通过 $(call inherit-product, vendor/giec/device-giec.mk) 包含。它的作用是把厂商所有的定制内容注入到构建产物中。 ...

June 9, 2026

03-JavaforAndroid速查表

Java for Android 速查表 目标读者:有 C/C++ 嵌入式背景,需要读懂 Android Framework 和 APK 源码 原则:遇到再查,不用从头啃 Java 教程。本文档只覆盖读代码必须理解的部分。 1. Java 与 C/C++ 的核心差异 C/C++ Java 说明 .h + .c / .cpp .java 一个文件一个 public 类,文件名必须和类名一致 #include import import 只是告诉编译器去哪找类,不复制代码 指针 * 无指针 所有对象都通过引用访问,没有 * 和 -> 手动 malloc/free GC 自动回收 new 分配,JVM 自动回收,不用 free struct 用 class 代替 Java 没有 struct,纯数据用 POJO 全局函数 所有函数必须在类里 没有全局函数,static 方法近似 #define / const static final public static final int MAX = 100; bool boolean 注意拼写不一样 NULL null 全小写 2. 类、继承、接口 —— 重点 2.1 类 (Class) 定义方式和 C++ 类似,但区别:所有方法默认是虚函数(可被重写)。 ...

June 9, 2026

02-Android构建系统入门

Android 构建系统入门 学习日期: 2026-04-28 参考项目: Amlogic S905X5M (ross) Android 14 TV 前置知识: 了解 Makefile 基本语法 1. Android 构建系统的演进 Android 构建系统经历了三个阶段: Before 2014: Android.mk (纯 Makefile) ↓ 2014-2019: Android.mk + Android.bp (Soong) 混用 ↓ 2019+: Android.bp (Soong) 为主,逐步淘汰 Android.mk ↓ Future: Bazel 构建 (Google 正在推进) 当前项目的状态:两者混用。参考代码库中 vendor/giec 既有 24 个 Android.mk,也有 8 个 Android.bp。Google 推荐新代码用 Android.bp。 2. Android.bp (Soong) 语法详解 2.1 基本结构 Android.bp 使用 Blueprint 格式(类似 JSON 的 DSL),每个代码模块定义为 一个模块类型 + 属性块: ...

June 9, 2026

01-Android系统架构总览

Android 系统架构总览 学习日期: 2026-04-28 参考项目: Amlogic S905X5M (ross) Android 14 TV 前置知识: Linux embedded C/C++ 基础 1. Android 分层架构 Android 系统从上到下分为 5 层,每一层都依赖下一层提供的服务: ┌─────────────────────────────────────────────────┐ │ Applications │ ← 系统应用 + 第三方应用 │ Launcher, Settings, Browser, OTA Client... │ ├─────────────────────────────────────────────────┤ │ Application Framework │ ← 应用框架(Java) │ ActivityManager, WindowManager, PackageManager│ ├─────────────────────────────────────────────────┤ │ Android System Services │ ← 系统服务(Native + Java) │ System Server, SurfaceFlinger, MediaServer... │ ├─────────────────────────────────────────────────┤ │ Hardware Abstraction Layer (HAL) │ ← 硬件抽象层(C/C++) │ Camera HAL, Audio HAL, Graphics HAL... │ ├─────────────────────────────────────────────────┤ │ Linux Kernel │ ← Linux 内核 + 驱动 │ Display Driver, WiFi, BT, Audio, DMA-BUF... │ └─────────────────────────────────────────────────┘ 与传统 Linux embedded 的对比 概念 传统 Linux Android 内核 Linux kernel 同一内核 + Android 特有驱动 (ashmem/binder/ion) init 系统 systemd/busybox init init(专属,解析 .rc 文件) IPC D-Bus/socket Binder(Android 核心 IPC 机制) 设备访问 直接 open /dev/xxx 通过 HAL + HIDL 接口 应用格式 ELF 可执行文件 APK(Java + Native libs) 权限控制 DAC (user/group) DAC + SELinux(强制) 构建系统 Makefile/CMake Soong (Android.bp) + Makefile 2. 各层详解(结合参考代码库) 2.1 Layer 1: Linux Kernel 位置: kernel 源码 + 设备树 DTS ...

June 9, 2026

00-Android嵌入式全栈学习计划

Android 嵌入式全栈学习计划 背景: 有 Linux embedded C/C++ 基础(浅层),接触过 BSP API 适配 目标: 掌握 Android 嵌入式全栈开发,能独立完成从底层到应用层的系统定制 参考代码库: ~/android/aml/s905x5/aml-s905x5-androidu-v2/(Android 14 + Amlogic S905X5M ATV) 总览 Phase 1 ─ 筑基 ──────────────────────────────── 2-3 周 构建系统入门 + AOSP 架构 + 基本 Java Phase 2 ─ 厂商定制层 ──────────────────────────── 3-4 周 从 vendor/giec/ 读懂"厂商如何改系统" Phase 3 ─ 深入底层 ───────────────────────────── 4-6 周 Bootloader → Kernel → HAL → SELinux Phase 4 ─ Framework 与应用 ────────────────────── 4-6 周 系统服务 → 应用开发 → OTA Phase 1:筑基(预计 2-3 周) 1.1 理解 Android 系统架构 目标:搞懂 Android 系统的分层结构,建立整体地图。 ...

June 9, 2026

AndroidFrameworkConsole命令速查

Android Framework Console 命令速查 适用场景:adb shell 下执行的 Android framework 层调试命令 覆盖工具:am / pm / dumpsys / settings / wm / input / service / cmd / appops / content / ime / monkey / svc / media 目录 am — Activity Manager pm — Package Manager dumpsys — 系统服务诊断 settings — 系统设置 wm — Window Manager input — 输入事件模拟 service — Service 调用 cmd — 服务命令接口 appops — 应用权限管理 content — ContentProvider 操作 ime — 输入法管理 monkey — UI 压力测试 svc — 网络/电源服务控制 media — 多媒体控制 其他实用命令 1. am — Activity Manager 管理 Activity、Service、Broadcast、Intent 的启动与调试。 ...

June 9, 2026

08-3.2Kernel构建与设备树

3.2 Kernel 构建与设备树 学习日期: 2026-04-30 参考项目: Amlogic S905X5M (ross) Android 14 TV 前置知识: Linux 内核基础概念、C 语言、ARM64 架构 1. 引言:Kernel 在 Android 中的角色 概念解释:Linux Kernel(内核)是操作系统的最底层核心,负责管理硬件资源(CPU、内存、外设)、提供进程调度、内存管理、网络协议栈、设备驱动等基础服务。在 Android 系统中,内核是唯一直接与硬件交互的软件层,Android 框架和应用程序的所有硬件的操作最终都要通过内核完成。 代码体现:参考代码库使用内核版本 common14-5.15,即基于 Linux 5.15 主线内核的 Android Common Kernel。构建命令为: ./mk ross -v common14-5.15 实际价值:没有内核,操作系统无法管理硬件资源。在嵌入式 Android 中,内核裁剪和驱动适配是 BSP(Board Support Package)的核心工作,直接影响系统的稳定性、性能和功能完整性。 2. GKI(Generic Kernel Image) 2.1 概念解释 概念解释:GKI(通用内核映像)是 Google 在 Android 11/12 引入的架构,将内核分为两部分: GKI 内核(通用内核):由 Google 维护,包含核心内核代码和与 SoC 无关的驱动。所有设备使用相同的内核二进制。 GKI 模块(厂商模块):由 SoC 厂商(如 Amlogic)提供,以可加载内核模块(.ko)的形式存在,包含 SoC 特定的驱动。 GKI 的核心目标是实现内核与厂商驱动的解耦——SoC 厂商不需要 fork 内核源码,只需要提供与 GKI 接口兼容的模块。 ...

June 9, 2026

07-3.1Bootloader:U-Boot+安全启动

3.1 Bootloader:U-Boot + 安全启动 学习日期: 2026-04-30 参考项目: Amlogic S905X5M (ross) Android 14 TV 前置知识: 嵌入式系统启动流程、ARM TrustZone 基本概念 1. 引言:Bootloader 是什么? 概念解释:Bootloader(启动加载器)是设备上电后第一个执行的软件。它的职责是初始化硬件(时钟、DDR 内存、存储控制器)、从存储介质(eMMC/NAND)加载操作系统映像到内存,然后跳转执行。在 Android 嵌入式系统中,bootloader 不仅要"启动系统",还要验证启动链的完整性,防止被篡改的系统运行。 代码体现:参考代码库中,bootloader 源码位于 bootloader/uboot-repo/,构建命令为: ./mk s7d_bm201 --avb2 --vab # 或针对 ross 设备: cd bootloader/uboot-repo && ./mk s7d_bm201 --update-bl2 --update-bl2e --update-bl2x --update-bl31 --update-bl32 --avb2 --vab 实际价值:没有 bootloader,芯片上电后 CPU 不知道从哪里取指令、内存没有初始化、没有任何代码可以执行。在 Android 安全模型中,bootloader 是第一道防线——如果 bootloader 不可信,后续整个系统都不可信。 2. ARM 处理器启动流程基础 在深入 Amlogic U-Boot 之前,需要理解 ARM 处理器的启动模式: 2.1 ARM TrustZone 概念解释:TrustZone 是 ARM 架构的硬件安全扩展,将 SoC 内部资源划分为两个世界: ...

June 9, 2026

06-device/amlogic/ross/设备配置

device/amlogic/ross/ 设备配置 分析 ross (S905X5M) 设备的完整构建配置,理解一个 Android 嵌入式设备是如何定义的 参考代码库:device/amlogic/ross/,Android 14 + Amlogic S905X5M ATV 1. 总览 device/amlogic/ross/ 是 Android 构建系统中设备配置目录。它定义了: 选择什么 SoC(S905X5M)和平台(s7d) 选择什么 kernel(common14-5.15,GKI 方式) 选择什么 bootloader(U-Boot,支持 AVB2 + VAB) 分区布局 和文件系统类型 硬件特性(显示、音频、编解码、WiFi/BT、摄像头等) 打包哪些模块(继承 vendor/giec/ 的定制) 文件布局 device/amlogic/ross/ ├── BoardConfig.mk # ★ 板级配置(硬件、分区、AVB) ├── device.mk # ★ 设备配置(媒体、音频、GPU、显示) ├── ross.mk # ★ 产品配置主入口 ├── AndroidProducts.mk # 注册所有产品变体(lunch 选项) ├── AndroidBoard.mk # 板级构建(kernel、factory) ├── Android.mk / Android.bp │ ├── ross_atv.mk # ATV 变体 ├── ross_dongle.mk # 加密狗/电视棒变体 ├── ross_soundbar.mk # 条形音箱变体 ├── ross_hybrid.mk # Hybrid 变体 ├── ross_hybrid_atf.mk # Hybrid ATF 变体 ├── ross_cbs.mk # CBS 广播变体 ├── ross_mxl258c.mk # MXL258C 调谐器变体 │ ├── part_table_5_15.txt # ★ 分区表(AB 系统,动态分区) ├── part_table_U_8G_emmc.txt # 8G eMMC 备选分区表 ├── fstab.ab_oem.amlogic # ★ 文件系统挂载表 │ ├── vendor_prop.mk # 供应商属性 ├── product_property.mk # 产品属性(oem key) ├── kernel_config_build.mk # Kernel 构建配置 ├── wifibt.build.config.trunk.mk # WiFi/BT 模块选择 ├── AVSync.mk # 音视频同步配置 │ ├── init.amlogic.board.rc # 板级 init 脚本 ├── init.amlogic.board.ext.rc # 板级扩展 init 脚本 ├── ueventd.parallel.rc # ueventd 并行恢复上下文 ├── board-info.txt # bootloader 版本约束 │ ├── files/ # ★ 硬件配置文件(编解码、音频、显示) │ ├── media_codecs*.xml # 媒体编解码配置 │ ├── mixer_paths.xml # 音频通路配置 │ ├── mesondisplay.cfg # 显示配置 │ ├── mali_platform.config # GPU/Mali 配置 │ ├── audio_effects.conf # 音效配置 │ └── speaker_*.dat/xml # 音箱调优数据 ├── permissions/ # 权限配置文件 ├── overlay/ # 资源覆盖 ├── oem/ # OEM 分区预置内容 ├── prebuilt/ # 预编译二进制 ├── recovery/ # Recovery 相关配置 ├── logo_img_files/ # 开机 logo ├── upgrade/ # 升级相关 └── tools/ # 签名工具 2. Android 构建系统的设备配置层级 理解 Android 构建系统的层次结构 是嵌入式开发的基础。一个产品配置(ross.mk)通过 $(call inherit-product, ...) 逐层继承,最终形成完整的构建配置。 ...

June 9, 2026

05-预置APK分析

预置 APK 分析 分析 vendor/giec/apps/ 下所有预置 APK 的构建方式、权限模型和功能架构 参考代码库:vendor/giec/apps/,Android 14 + Amlogic S905X5M ATV 1. 总览 device-giec.mk 中声明的预置 APK: PRODUCT_PACKAGES += \ LeanKeyboard \ # ATV 定制键盘 OTAClient \ # OTA 升级客户端 BazeportLauncher \ # 定制 Launcher(桌面) BazeportSystem \ # 系统设置/工具 luojHello # 测试程序(C 程序,非 APK) 加上条件编译的: # 当 NEED_GLAUNCHER=true 时 PRODUCT_PACKAGES += Glauncher # 当 NEED_FACTORY_TEST=true 时 PRODUCT_PACKAGES += STB_TEST 所有 APK 的公共特征: 都是预编译的(prebuilt) .apk 文件,不带 Java 源码 全部使用 LOCAL_CERTIFICATE := platform —— 平台密钥签名,获得 system 级 UID 通过 Android.mk + $(BUILD_PREBUILT) 集成到构建系统 安装路径取决于 LOCAL_PRIVILEGED_MODULE 和 LOCAL_SYSTEM_EXT_MODULE 2. Android 预置 APK 的构建模式 APK 预置:Android 构建系统中,厂商可以将预编译的 .apk 文件直接打包进系统镜像,而不需要从源码编译。这是厂商定制的标准做法,尤其当 APK 是闭源或由第三方提供时。 ...

June 9, 2026