Android eBPF Demo 书写
Android libbpf Demo 书写
——From ebpf.io
基础概念
vmlinux 文件是什么
vmlinux 文件是一个 ELF 文件,可以理解就是 linux 内核
在linux系统中,vmlinux(vmlinuz)是一个包含linux kernel的静态链接的可执行文件,文件类型可能是linux接受的可执行文件格式之一(ELF、COFF或a.out),vmlinux若要用于调试时则必须要在开机前增加symbol table。
——From Wikipedia
vmlinux.h 是什么
vmlinux.h 是使用工具为 vmlinux 内核文件生成的的所有类型定义文件。
vmlinux.h 部分内容输出

大体的逻辑如下
1234567891 ...
AOSP 轻量级环境配置
AOSP轻量级环境配置
背景
近期在学习 ART 执行执行过程,但是没带我自己的 Pixel。
所以尝试搭建了一个轻量级的 AOSP 源码阅读环境
事先说明,你需要两台主机。
其中一台用于运行模拟器 & 调试,可以是 Linux/Win/Mac(笔者这里是使用的 Mac M3)
还有一台 Linux 主机用于打包 AOSP,这里笔者是用 Ubuntu20.04。(可以没有 GUI,通过 SSH 直连,但是蛮吃配置的)
从上述描述来看其实也不是特别轻量级~主要是 Linux 主机是必须的,但是好在可以使用自己的模拟器进行调试。这样便携性会比较高。
但是这也是万不得已的情况,如果有实体机,最好还是用实体机。用着比较舒服~(模拟器不知道会不会有些内核 bug?!)
流程Refs:https://weishu.me/2016/05/30/how-to-debug-android-framework/
Refs:https://weishu.me/2017/01/14/how-to-debug-android-native-framework-sou ...
2024
简介
最大的变化就是从一个学生到社畜的转变,这种转变突然的,巨大的。
就像理想和现实一样。
但好在生活没给予给我痛击,让我顺利苟过了这一年。
阅读
依旧我还是比较喜欢使用微信读书
今年的阅读时间很短,主要是因为没时间。
坚持阅读是一件很难的事情,不只是因为很难找到自己喜欢看的,人都是有惰性的,很难坚持。
但阅读本身绝对是有意义的,至少我觉得是这样。
生活
今年还是比较充实的,尝试过一些没做过的事情。
一年的时间还是蛮长的,我也很难一一说明,挑了几个有纪念意义的时刻~
1.第一次去重庆以外的城市旅游,在六月份短短一周的时间成功点亮了苏州、南京、武汉
这里“不是”苏州~
当然这也“不是”武汉~
同理这也“不是”南京~
2.学会了做饭(虽然不好吃)但是我真的有认真地在学。
好不好吃我不知道,反正都是锅的问题。别问我为什么
3.有了人生第一台主机,在10.1 晚上熬夜,也~没有装完!第二天早上赶工勉强装好。
听我一句劝别在晚上转主机,装好了,装不好都睡不着。
4.有了人生第一台咖啡机,为技术转型奠定了夯实的基础!
5.拼好了人生第一个乐高积木(虽然是看的教程)
你 ...
Android Vscode Remote Develop环境搭建
Android Vscode Remote Develop环境搭建背景
探索 Android 上运行 eBPF 的环境,需要在 Android 上执行 vscode server 进行。
使用 SSH 进行代码的远程开发以及运行。
实现在 Android 上执行一个 chroot,并在 chroot 中执行 sshd,最后通过 vscode remote ssh 插件进行vscode server 的配置。
过程pre01.手机 root
2.安装 Magisk-SSH 模块开启 ssh(如果没有 ssh,eadb 无法连接到手机上)
chroot配置
下载 eadb ,使用 eadb 安装 debian 11 rootfs
Refs: https://github.com/tiann/eadb
1.安装eadb
1234# 安装 rustcurl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh# 安装eadbcargo install eadb
2.构建debian 11 rootfs
1s ...
记录一次Debug AOSP system_server遇到的问题
Debug AOSP system_server系统环境:android-13.0.0_r78
问题描述:
在一次调试system_service dexopt的过程中发现一个很奇怪的现象:
“局部变量指拿不到”
问题线索:其实这个很容易就能想到,大概率就是被混淆了。导致局部变量的名称发生变化。
信息检索CSDN博客——“AOSP 14 framework debug无法看到变量的问题原创”
通过上文我们可以知道,主要原因是framework/base/services模块有一处定义了代码混淆逻辑
解决问题尝试注销掉这部分代码。
frameworks/base/services/Android.bp
重新编译
1mmm frameworks/base/services/
编译完成后刷入设备中
当然也可以全部分区flush. 但是没那个必要。
12345678910# 笔者设备为Pixel 5因此路径中会有redfincd out/target/product/redfin/system/framework# 以root权 ...
AOSP源码阅读环境配置
AOSP阅读环境配置
硬件环境DIY主机
CPU:AMD R9 7950X
内存:光威 6400Hz 32G(16G * 2)
主板:GIGABYTE 冰雕小板
硬盘:ZhiTai TiPlus 7100 Gen4 2TB
软件配置系统:Ubuntu 24.04
源代码安装具体流程可分为
1.repo工具下载
2.源代码下载
略
安装流程可参考
清华镜像源帮助问题
工程基础配置
注意这里不是说repo工具需要做一些配置。
而是说需要使用repo做一些工程上的配置。
1.repo start branchName –all
将所有工程开启新分支(方便后续拉取多分支)
2.配置脚本
可将常用的脚本书写复用
如下是笔者封装的lunch脚本。(用于source aosp脚本)
123source build/envsetup.sh# 自定义output路径,防止在不同分支check的时候输出相互覆盖。打包异常。export OUT_DIR=out/$(repo branch | grep "\*" | awk -F ' ' ' ...
BCC工具安装
BCC工具安装pre:阅读本文章,最好具备eBPF的基础了解。知晓BPF,eBPF基础概念。
BCC github地址
pre环境前提条件:
1.内核版本4.1以上
Linux kernel version 4.1 or newer is required
2.内核参数
123456789101112131415CONFIG_BPF=yCONFIG_BPF_SYSCALL=y# [optional, for tc filters]CONFIG_NET_CLS_BPF=m# [optional, for tc actions]CONFIG_NET_ACT_BPF=mCONFIG_BPF_JIT=y# [for Linux kernel versions 4.1 through 4.6]CONFIG_HAVE_BPF_JIT=y# [for Linux kernel versions 4.7 and later]CONFIG_HAVE_EBPF_JIT=y# [optional, for kprobes]CONFIG_BPF_EVENTS=y# Need kernel headers th ...
Dex Load Process
pre对一些环境信息做阐述和说明
1.本文分析的是AOSP android-13.0.0_r78的流程(aosp_redfin_userdebug)
2.本文使用设备为pixel5
Dex加载过程解析install time
安装过程中PMS会做一些操作将我们的apk的Manifest进行解析
具体的分析思路如下:
1.准备一个demo app.(其实什么demo都可以)
2.在PMS上打断点
com.android.server.pm.pkg.parsing.ParsingPackageUtils#parsePackage
3.安装APP
4.等待断点停下
PMS解析
如下是解析XML的堆栈
Text1234567891011121314parsePackage:372, ParsingPackageUtils (com.android.server.pm.pkg.parsing)parsePackage:168, PackageParser2 (com.android.server.pm.parsing)parsePackage:150, PackageParser2 (co ...
记一次在AOSP上装Google Play的尝试
记一次在AOSP上装Google Play的尝试结果
背景
最近在工作中有需要用到 Google Play 来验证一些事情。
但是我手中的测试机Pixel5刷了 AOSP 是不具备 Google Play 的环境的。
经过多次调研 & 尝试在 AOSP 上安装 Google Play都已失败告终
1.NikeGapps(Pixel 5 不能刷 Recovery)
2.bitgapps(Pixel 5 不能刷 Recovery)
3.microGapps(存在一些兼容问题)
在无意间发现了一篇文章StackOverflow
文章大致内容是说可以通过提取官方镜像中的 APK,导入到 AOSP 中。
虽然这篇文章很早之前都看过,但是觉得比较麻烦,就没尝试。
本文章也算是最终尝试的记录。(要是还不行我真撂挑子了 这个 GP 谁爱装谁装了 : )
过程12.14日——失败确认官方镜像的版本通过Settings -> About Phone -> Build Number 可知AOSP 的版本
我的是 TQ3A.230901.001.C2 其实也就是 androi ...
SurfaceViewSync机制
Android13 SurfaceView Sync机制引入
1.当我是一名初级Android开发者的时候,有一个概念一直灌输给我——Android是单线程渲染,有且只有主线程能渲染UI.
实际上并不是如此,除开普通的普通的View如TextView,ImageView .
Android其实是支持子线程渲染的——SurfaceView.
2.SurfaceView的渲染帧不跟随View渲染,也就是说不归ViewRootImpl管。单独的Surface,单独渲染
特立独行是有代价的,SurfaceView的异步绘制会带来一些UI呈现的问题。
比如View渲染和SurfaceView的渲染不同步,只要SurfaceView or View渲染任意一个渲染快了就会导致UI呈现上的不一致。
假如有一个需求场景:简单来说是一个视频播放的页面,其中包含一些普通的控件 & 用于播放视频的SurfacView.具体的需求如下
需要播放器和页面中的其他控件一起渲染。因为SurfaceView渲染早了会导致只有一个光秃秃的视频在播,渲染晚了SurfaceView会有黑屏。这都是不好的用户体 ...