Android ebpf环境搭建
Android ebpf环境搭建前言
关于本文:
本文主要用于介绍Android中如何搭建ebpf学习环境,难度较大/不断更新完善中。
前置准备:
a.设备最好要有内核源代码,因为涉及到内核重新配置/编译。如果没有则内核必须得是GKI内核。
b.设备需要解锁BL, 因为涉及Boot img刷入
c.设备内核最好在5.10及其以上的版本,因为ebpf的特性和内核版本绑定。
d.需要编译好的Linux rootfs,后续需要在Android上使用chroot运行rootfs
概览
编译自定义内核并刷入
Note:
别怕这里只是简单的改了几个内核参数。
改动不大,就是流程比较长。
安装bpftrace
安装BCC
内核配置准备
BCC内核配置
a.BCC需要的内核配置列表
b.Ftrace内核配置参数——具体过程可见下方[内核开启ftrace](##内核开启Dynamic FTrace)
安装bpftrace1apt install bpftrace
安装bcc
Note:
该过程必须使用源码编译,直接下载的bcc在Android上不能直接用。 ...
编译创建Debian rootfs并在Android 上运行
编译创建Debian rootfs并在Android 上运行refs:
博客1
博客2
Debian Wiki
背景
Android ebpf环境搭建
编译构建可在Android上运行的Debian rootfs环境
整体思路其实通过上述的refs很容易能看出来rootfs的安装流程很简单。通过debootstrap,下载安装到制定路径。
下载安装完成以后就可以通过chroot check是否生效。
确认Debian版本
版本的选择是安装过程遇到的第一个问题,由于Debian是和Linux内核版本绑定的,所以我们需要根据内核版本确认Debian的安装版本。
经过和Gpt的深入交流,总结得知Debain的默认内核版本可以通过如下方式查找。(不唯一)
首先我们可以通过release note地址去查看当前release的debian版本。
Debian Release Note
2.点击指定版本的link以后、进入release note,选择关注的架构
搜索Kernel以后可发现,debian 10 ~ debian 11 默认内核从4.19 更新到了5.10
因为目前 ...
N60Pro刷入ImmortalWrt
N60Pro刷入ImmortalWrtpre01.刷机最好使用Windows客户端(作者尝试过Linux, Mac均失败。)
2.本文所有文件均使用的是ImmortalWrt的原装软件包(过程可能比较麻烦,可以使用恩山社区大佬闭源的uboot)
3.请在阅读完全文流程后刷入ImmortalWrt
4.务必做好原装分区的备份!!!务必!务必!务必!
概览1.基础环境配置
根据官方手册配置好网络环境,打开ssh
2.备份
将N60Pro的所有分区进行备份
3,刷入uboot
通过官方镜像下载uboot
4.刷入immortalWrt镜像
基础环境配置see https://mao.fan/article/333
略
备份分区1.查看网关地址(192.168.100.1)
12345678910111213141516171819202122232425262728~ route -nKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Ifac ...
构建Pixel Kernel
构建Android Kernel
手机设备为Pixel 6
编译主机为Ubuntu 24.04
12345678910111213141516171819 ./+o+- rose@rose yyyyy- -yyyyyy+ OS: Ubuntu 24.04 noble ://+//////-yyyyyyo Kernel: x86_64 Linux 6.11.0-26-generic .++ .:/++++++/-.+sss/` Uptime: 14h 10m .:++o: /++++++++/:--:/- Packages: 2896 o:+o+:++.`..```.-/oo+++++/ Shell: zsh 5.9 .:+o:+o/. `+sssoo+/ Resolution: 3840x2160 .++/+:+oo+o:` ...
Android ClassLoader加载流程解析
Android ClassLoader加载流程
Note:
本文主要是针对于ClassLoader加载逻辑进行分析,并未对Class define逻辑进行分析。
起点
ClassLoader.load
Class.forName
过程Java执行过程1. ClassLoader.loadClass(String name)123public Class<?> loadClass(String name) throws ClassNotFoundException { return loadClass(name, false);}
2. ClassLoader.loadClass(name, false)
加载流程其实比较固定
通过findLoadedClass查看该class是否已经加载过
调用parent.loadClass加载class
如果#2加载失败通过findClass通过自生加载Class
1234567891011121314151617181920212223242526272829/*** name ...
Aosp小tips
关于本文
主要记录在AOSP调试学习过程中遇到的坑~
Android 14_r73userdebug 编译out of space? out of inodes? the tree size XXX
问题:
out of space? out of inodes?XX
这个报错包含有3个原因。
内存耗尽
inodes耗尽
生成的文件超过文件系统的大小限制
这里的报错主要是因为#3导致,原因如下:
img文件生成目前主要有两种方式ex4和f2fs, 图中的报错主要是由于userdata默认采用了f2fs导致大小超过了f2fs的最大限制,需要调整文件类型为ext4并且将文件的大小限制设置为合适的大小
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495[ 10% 54/ ...
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 ...