[TOC]
工具
//安卓的tombstones触发,主要反映的是Android系统中Native层(即基于C/C++编写的代码部分)的进程发生了崩溃。
//Q:如何从linux安装adb和fastboot?
A:
sudo apt install android-tools-adb android-tools-fastboot
kernel
//编译kernel时有些配置可以打开:
#!/bin/sh
make mrproper
export KBUILD_OUTPUT=$(pwd)/out/ #输出编译结果到一个文件夹
make 100ask_imx6ull_defconfig
#printenv
make zImage -j4 V=1 2>&1 | tee ./_build_kernel_log.txt #V=1显示详细编译结果
cp $(pwd)/_output/arch/arm/boot/zImage ~/nfs_rootfs
内存问题定位
使用 procrank ,dumpsys meminfo 对比问题前后内存差异.
编译安卓
//编译android如果内存不足,会被killed,可以在Linux系统中,可以通过dd命令和mkswap命令创建一个交换文件,并使用swapon命令激活它。例如:
sudo dd if=/dev/zero of=/swapfile bs=1G count=8
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
这将创建一个8GB的交换文件。完成后,你可以通过编辑/etc/fstab文件来确保在系统启动时自动挂载该交换文件。
app的操作
pm list packages
或者,如果您想要获取更多关于每个应用程序的信息,比如权限等信息,可以使用:
pm list packages -f
如果您的设备已经获得了root权限,还可以使用以下命令来列出所有的应用程序,包括系统应用:
pm list packages -s
如果您想要查看已安装的应用程序的详细信息,包括图标、用途、包名等,可以使用:
pm list packages -3
getprop 中的版本号等信息
ro.build.version.release: Android 版本号。
ro.build.version.sdk: Android API 级别。
ro.build.version.security_patch: 安全补丁级别。
启动一个apk的命令行(以com.dfrd.avm为例)
am start -n com.dfrd.avm/.activity.MainActivity
获取触摸按键的坐标
spm8675p1_64_wifi_raite:/ # getevent
add device 1: /dev/input/event0
name: "i2c_virtio at virtio bus 90"
/dev/input/event0: 0003 0039 0000001d
/dev/input/event0: 0003 0035 00000082
/dev/input/event0: 0003 0036 0000040f
/dev/input/event0: 0001 014a 00000001
/dev/input/event0: 0003 0000 00000082
/dev/input/event0: 0003 0001 0000040f
/dev/input/event0: 0000 0000 00000000
/dev/input/event0: 0003 0039 ffffffff
/dev/input/event0: 0001 014a 00000000
/dev/input/event0: 0000 0000 00000000
这里
/dev/input/event0: 0003 0035 00000082
/dev/input/event0: 0003 0036 0000040f
/dev/input/event0: 0001 014a 00000001
是一个按下事件,坐标 x=0x82,y=0x40f.
通过命令输入按键
trinket:/ # input keyevent BACK
刷机模式
用adb reboot bootloader 命令先进刷机模式, 然后再用命令去刷写,比如NXP使用uuu命令
安卓录屏命令
adb shell screenrecord /sdcard/demo.mp4 录制的视频存放到手机sd卡里,默认录制时间为180s。按Ctrl+C结束录制。
adb shell screenrecord --time-limit 10 /sdcard/demo.mp4 说明:限制视频录制时间为10s
dumpsys
// dumpsys meminfo $pid : 查询进程的内存信息
//dumpsys media.camera :查询摄像头的能力
查看设备分辨率:
adb shell wm size
比如G59项目是
Physical size: 1920x720
查看屏幕密度(DPI):
adb shell wm density
比如G59项目是
Physical density: 160
Q:aosp代码哪里显示该代码的版本?
要确定AOSP(Android Open Source Project)代码的版本,可以通过检查代码库中的特定文件或使用一些Git命令来实现。下面是一个快速查找指南,帮助你定位版本信息:
| 信息类型 | 查找位置 | 方法/命令 | 说明 |
|---|---|---|---|
| 构建版本 (PLATFORM) | build/make/core/build_id.mk | 查看 PLATFORM_VERSION | 显示主要的平台版本,如 "Android 14" 。 |
| SDK/API 级别 | build/make/core/version_defaults.mk | 搜索 PLATFORM_SDK_VERSION | 对应Android的API级别 。 |
| 分支信息 | 代码库中的 .repo/manifests 目录 | git --git-dir .repo/manifests/.git branch -a | 列出所有可用的远程分支。 |
| 当前分支 | 任意目录(在Repo管理下) | repo info | 显示当前项目各个仓库的分支信息。 |
| 内核版本 | 设备系统设置或 /proc/version | cat /proc/version 或 设置 > 关于手机 | 这是编译该内核的源码版本信息,内核源码与AOSP主代码分离 。 |
🛠️ 操作步骤与技巧
-
查看构建版本和SDK版本 你可以直接导航到
build/make/core/目录下,查看build_id.mk和version_defaults.mk这两个文件。例如,在build_id.mk中你可能会看到类似PLATFORM_VERSION := 14的配置,这表明这是 Android 14 的代码 。 -
确定代码分支
- 要查看当前项目跟踪的是哪个分支,可以在源码根目录下执行
repo info命令。 - 如果想了解这个源码仓库支持哪些分支,可以运行
git --git-dir .repo/manifests/.git branch -a
- 要查看当前项目跟踪的是哪个分支,可以在源码根目录下执行
其他
//某些安卓项目单独升级镜像image,会因为镜像校验导致休眠唤醒和原始版本不一致,可以关闭镜像校验:
adb reboot bootloader
fastboot reboot fastboot
fastboot --disable-verification --disable-verity flash vbmeta E:\Vresion\10.4.3.105\release\ci-s31\S31a_20250906_128G_ufs_Updates\android\vbmeta.img
fastboot flash boot boot.img
fastboot flash vendor vendor.img
fastboot reboot
// 安卓的日志打印有五个等级,分别是:
- Verbose:这是最低级别,用于输出一些详细的调试信息。
- Debug:用于输出调试信息,可以在开发过程中使用。
- Info:用于输出一些重要的信息,如应用启动、网络请求等。
- Warning:用于输出警告信息,如一些不严重的错误。
- Error:用于输出错误信息。
在Android Studio中,可以直接在Logcat中看到这些等级的日志信息。
//不同项目的安卓设备树可能不同,比如集成在boot.img 中,所以保险起见,直接make kernel -j8同时生成boot.img和dtbo.img,一起升级.编译脚本中必须明确地删除自己项目的.o文件的文件夹,和dtb的文件夹,避免没有实际编译生效.
//上层log开启的标志是
--------- beginning of main
//如果出现重启,则导出的log中有关键字backtrace的类似堆栈打印:
01-01 08:01:34.745 2604 21611 F DEBUG : backtrace:
01-01 08:01:34.745 2604 21611 F DEBUG : #00 pc 00007c8c /vendor/lib/lib_omx_v4l2_common_arm11_elinux.so (V4l2Object::IsFormatSupported(unsigned int)+8)
01-01 08:01:34.745 2604 21611 F DEBUG : #01 pc 00007cdd /vendor/lib/lib_omx_v4l2_common_arm11_elinux.so
//实时搜索logcat的log,比如实时搜索 FAULT_CAM :
logcat |grep FAULT_CAM
//安卓的版本:8.0简称o版本,9.0简称p版本,以此类推
//安卓文件系统的原始路径: system/core/rootdir android9产品,busybox在 /sbin/busybox,而 /bin里面的二进制大都指向了toybox(/system/bin/下)
//adb remount执行前后的分区差异
IMX8 (android 9)
//安卓下uboot里敲fastboot 0,进入fastboot状态,可以方便升级 //安装软件后(adb install -r xxx.apk),桌面不显示图标需要: adb shell settings put system "showallapp" 1 ps -A | grep -i launcher 找到桌面进程,杀一次,就可以了,或者重启设备. 恢复简洁模式: adb shell settings put system "showallapp" 0 adb shell "am force-stop com.dftc.launcher"
//nxp imx 升级使用uuu工具,windows下升级时插入的USB会映射出一个外设:
//反复开关机,挂机测试时长时间抓log的方法 先查询logcat的使用配置项: ps -A -o ARGS 可以看到: logcat -b main -b system -b crash -f /logcache/log/logcat.log -r2048 -n 50 -v threadtime logcat -b kernel -f /logcache/log/logcat_kernel.log -r1024 -n 50 -v threadtime
如果禁用"-b main -b system -b crash"类型log,就修改 /system/etc/init.logcat.sh 去掉"-b main -b system -b crash"相关行; 如果希望kernel log不要1MB才存一次,可以修改 /system/etc/init.logkernel.sh 中的-r1024 为 -r100,即100KB存一次
//如果要清除所有缓冲区(如radio,kernel..etc),请使用以下命令 adb shell logcat -b all -c
Qualcomm
//XBL(eXtensible Boot Loader / Secondary Bootloader)是高通平台上的一个扩展引导加载程序。其主要负责芯片驱动及充电等核心应用功能的加载和初始化,对硬件环境进行初始化,并从flash中加载RPM、QSEE等镜像至内存中并执行其初始化。
此外,XBL核心是none-HLOS boot_image代码的一部分,属于高通私有代码。
//Trinket 是骁龙665移动平台的代号
QCM6125是高通骁龙670
QRD:Qualcomm Reference Design(高通参考设计)
IDP Integrated development platform 高通文档中的Integrated Development Platform(IDP)是一个用于开发、部署和运行高通芯片组应用程序的集成开发环境。它提供了一整套开发工具和库,使得开发者可以更加方便地使用高通的芯片组进行应用程序开发,包括硬件抽象层(HAL)、中间件、应用程序框架和开发工具等。IDP使得开发者能够充分利用高通芯片组的性能和功能,同时提供易于使用的开发接口和工具,以简化开发过程并加速应用程序的开发和部署。
QSC——qualcomn single chip,高通单芯片,主要是给非智能机主控的
MDM——mobile date modem,移动数据基带,主要给手机当基带,传输信号的。
MSM——mobile station modem,移动基带处理器,主要给手机当处理器,包含基带。
QSD--Qualcomm Snapdragon,高通老一代的设计体系,新的设计为MSM
具体产品相关
//对于支持休眠唤醒的产品,比如车机,一定要在对外设操作前,增加对休眠唤醒状态GPIO的判断,类似:
http://gerrit.tc.dfmc.com.cn:8080/c/QCM6125/kernel/msm-4.14/+/127648