虚拟机中通过模拟器调试android kernel

Android内核崩溃分析:手把手教你用Crash工具调试SYS_COREDUMP(附常见命令大全) 本文详细介绍了如何使用Crash工具分析Android内核崩溃,特别是针对SYS_COREDUMP文件的解析与调试。从环境搭建、工具链配置到高级调试技巧,提供了一套完整的崩溃分析工作流,帮助开发者快速定位和解决内核恐慌问题。 阅读详情
  1. 配置虚拟机环境

虚拟机安装ubuntu(此处略),需要注意的是虚拟机要开启嵌套虚拟化(即在虚拟机中再次使能虚拟化功能)

  • Hyper-v

停止虚拟机后使用get-vm 获取虚拟机名字,然后通过

Set-VMProcessor -ExposeVirtualizationExtensions $true -VMName ubuntu20.04命令即可(ubuntu20.04是我们的虚拟机名字)
Set-VMProcessor -ExposeVirtualizationExtensions $true -VMName ubuntu20.04可以获取虚拟功能是否开启
  • VMware虚拟机在虚拟机设置界面就有配置(略)

  1. 配置并下载android代码

  1. 代码下载参考

https://blog.youkuaiyun.com/qq_26216519/article/details/128695630

https://blog.youkuaiyun.com/code_lyb/article/details/128285357?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-128285357-blog-128695630.pc_relevant_multi_platform_whitelistv3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-128285357-blog-128695630.pc_relevant_multi_platform_whitelistv3&utm_relevant_index=2

可使用国内镜像源替换android源(git config --global url.https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/.insteadof https://android.googlesource.com)

  1. 切换分支

查看可切换的分支

cd .repo/manifests
git branch -a | cut -d / -f 3

以 android-12.1.0_r8 分支为例

repo init -b android-12.1.0_r8
repo sync -c --no-tags -j6   # 如果不需要与服务器数据一致,可以不运行该步
repo start android-12.1.0_r8 --all

查看切换结果

repo branches
  1. 编译

source ./build/envsetup.sh
lunch sdk_car_x86_64-eng   	
m all -j$(nproc)
emulator -verbose -show-kernel -selinux permissive -writable-system
  1. 内核下载和替换

https://source.android.google.cn/docs/setup/build/building-kernels?hl=zh-cn

https://www.codeinsideout.com/blog/android/build-aosp/

下载:

repo init -u https://android.googlesource.com/kernel/manifest -b BRANCH

【实际上用tsinghua AOSP源代替】:

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/kernel/manifest -b x
repo sync

修改内核配置:

当我们需要修改内核config的时候,在gki下使用以下步骤进行修改:

~/android_kernel/common$ make ARCH=x86 gki_defconfig
~/android_kernel/common$ make ARCH=x86 menuconfig
~/android_kernel/common$ make ARCH=x86 savedefconfig
~/android_kernel/common$ cp defconfig arch/x86/config/gki_defconfig

编译

https://source.android.google.cn/docs/setup/build/building-kernels?hl=zh-cn#customize-build

BUILD_CONFIG=common/build.config.gki.x86_64 LTO=none build/build.sh 
BUILD_CONFIG=common-modules/virtual-device/build.config.virtual_device.x86_64 build/build.sh  (android12构建virtual_device内核)
tools/bazel build //common-modules/virtual-device:virtual_device_x86_64_dist(android13构建virtual_device内核)
  1. 替换自己编译的kernel启动emulator

emulator -verbose -show-kernel -selinux permissive -writable-system -nocache -kernel out/android12-5.10/dist/bzImage  (不关闭cache则不会从kernel启动)
  • 也可以通过修改device\generic\goldfish\x86_64-kernel.mk文件中KERNEL_MODULES_PATH和 EMULATOR_KERNEL_FILE将kernel和kernel ko加入到emulator镜像中重新编译aosp系统,而无需定制emulator的启动命令。

3.调试代码

调试android kernel见:

https://blog.youkuaiyun.com/fightingup/article/details/128906416?spm=1001.2014.3001.5501

linux下利用adb连接Android模拟器查看内核版本、cpu体系架构版本、删除密码锁 在前面的两篇文章中,讲述了编译android源码和内核源码,此篇文章建立在之前的基础上,不清楚的请先转战: 源码编译 内核编译 --------------------------------------------------------------------------------------------- 在使用了下面的命令启动了模拟器之后: export PATH= 阅读详情

相关推荐

Ubuntu下编译goldfish内核并加载到Android模拟器

Linux内核是Android系统的核心组件,其定制化编译是驱动开发与系统优化的基础。goldfish作为Android官方模拟器专用内核,集成了Binder IPC、ashmem等关键模块,为开发者提供了标准化的实验环境。通过交叉编译工具链配置,开发者可以在Ubuntu环境下完成内核编译,并加载到Android模拟器进行验证。这一技术方案特别适用于驱动开发学习、内核模块调试等场景,其中NDK工具链的选择与环境变量配置是关键环节。实际应用中需注意goldfish内核与真实设备的差异,特别是在GPIO、时钟模

weixin_30764883的博客 561

Android Kernel 编译与调试指北

经过一步步的摸索,将Linux内核成功运行到了Cuttlefish中,在Cuttlefish的环境下,可以调试内核,调试Native代码,调试Framework代码,也可以当作你的常用“开发机”使用。该文章是笔者学习中的一个总结,由于知识面的狭隘总有认识不到的错误产生,请大家不吝赐教。如果大家学习中遇见问题,也欢迎大家交流沟通。

Eqiqi的博客 4433

Android启动流程详解:从Kernel到init的完整链路

操作系统启动是嵌入式与移动开发中最基础也最关键的环节,它涉及硬件上电、引导加载、内核初始化和用户空间接管等多个阶段。理解启动原理,不仅有助于排查开机异常,更是深入系统架构的钥匙。本文将围绕Android系统启动中的核心链路,剖析Kernel启动阶段如何完成汇编入口、内存初始化与驱动加载,以及init进程如何作为一号进程解析rc脚本、搭建属性服务并最终孵化Zygote。通过掌握控制权交接的边界与关键日志定位方法,开发者可以快速判断开机问题发生在哪一层,从而高效解决启动卡死、重启循环等工程实践难题。本文旨在为F

weixin_34062469的博客 386

Android内核的编译和调试

一、Android内核源码的选择 Android手机设备内核源码的调试需要外部硬件设备的支持,调试步骤比较麻烦。相对来说,Android模拟器内核源码的调试就比较简单了,这里以Android模拟器内核源码的调试为例。首先创建一个Android API 19(Android 4.4.x版本)的Android模拟器,然后运行该Android模拟器。在 ubuntu 14.04.5 系统或者 Win

Fly20141201. 的专栏 1万+

Android模拟器启动失败排查与解决方案

Android模拟器是移动应用开发中的重要工具,其工作原理基于虚拟化技术实现硬件模拟。在Windows平台上,Hyper-V和HAXM等硬件加速技术直接影响模拟器性能。当遇到模拟器启动失败时,通常需要检查显卡驱动兼容性、内存分配和OpenGL渲染模式等关键技术点。本文通过实际案例,详细分析了模拟器崩溃的常见原因,包括Hyper-V配置冲突、NVIDIA驱动兼容性问题以及Vulkan渲染异常等。针对开发环境搭建这一高频需求,特别介绍了版本控制策略和性能优化配置等工程实践方法,帮助开发者快速定位和解决模拟器启动

weixin_30924087的博客 375

安卓模拟器过检测:设备指纹与自动化测试环境适配

运行环境识别与设备指纹是移动端风控和自动化测试共同面对的基础问题。应用通常通过 Android Build、getprop 系统属性、文件与进程残留、传感器读数、电池曲线、网络与 SIM 信息、Root/Frida/Xposed 痕迹等维度,判断当前环境是否与真机一致。理解这些检测原理的价值在于:既能提升自动化测试与兼容性验证的稳定性,也能在云真机、群控、RPA 等场景中减少环境误判导致的启动拦截和流程中断。围绕模拟器过检测,实际落地往往需要对齐设备指纹、清理专属文件、补齐传感器并保持网络标识自洽。针对雷电

weixin_34117211的博客 295

ubuntu中android源码编译启动模拟器黑屏

如题,android源码编译启动模拟器黑屏,是什么原因啊,是如何来解决的?

lang0728的专栏 5251

CarPlay协议模拟器:Linux/Android车机端开发与调试实战

CarPlay作为苹果车载互联协议,其封闭性长期制约非认证车机的开发效率。理解CarPlay通信原理,关键在于掌握USB CDC ACM与AVB多协议栈协同机制、动态会话协商(如R18.1版本支持的分辨率自适应)及TLS信令加密流程。该技术具备显著工程价值:绕过MFi认证周期,实现UI交互验证、音视频流压测与HID事件仿真,支撑Linux USB Gadget或Android USB Host API等轻量级协议栈落地。典型应用场景包括车载HMI投屏适配、SoC性能瓶颈定位、量产前EMC/温升鲁棒性验证。本

weixin_33912638的博客 308

Ubuntu中玩转Android模拟器

近来研究了下Android emulator,就是Android Studio中用于调试App的虚拟机AVD(Android Virtualized Device)。本来是件挺平淡无奇的事情,但非要给生活比个””耶…..”(^-^)V 需求是,在Linux OS中,使用自定义的Android Kernel! 由于烂樱桃本人只略懂一丢虚拟化技术,对于Android算是一窍不通,所以,本文主要记录步骤为主,木有原理性的东西。 0. 准备 安装Android Studio 到Android Studio 官网

linuxarmsummary的专栏 1万+

全志平台Android 系统调试方法(5)内核异常调试

1. 前言 这里总结几种内核异常时,常用的几种调试方法 2. Watchdog softlockup linux-3.4\Documentationlockup-watchdogs.txt (1) Linux3.4 Watchdog softlockup配置 Munuconfig配置 CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 检测到softlockup后不触发内核panic; 配置1会触发内核panic Cmdline传参 softlockup

jzwjzw19900922的博客 2146

VMware虚拟机安装Android x86教程:从配置到调优的完整指南

虚拟机技术是现代开发测试中常用的系统隔离方案,通过模拟完整硬件环境,开发者可以在不干扰宿主机的前提下运行多种操作系统。Android x86作为将安卓系统移植到x86架构的开源项目,与虚拟机结合后,为应用测试、旧版本APK兼容性验证以及自动化调试提供了轻量可控的实战平台。与商业模拟器相比,虚拟机方案具备更完整的系统权限和更接近原生的性能表现,尤其适合需要深度定制或获取Root权限的技术场景。本文基于VMware Workstation Pro实践,从新建虚拟机的关键参数设置、ISO镜像选择,到分区格式化、首

weixin_34095889的博客 332

Windows 10 运行 Android 应用终极指南:把 Windows 11 的安卓子系统搬进老电脑

微软曾把安卓子系统(Windows Subsystem for Android,简称 WSA)列为 Windows 11 的独占功能,理由很简单:老系统"带不动"。但开源项目 WSA-Windows-10 偏偏不信这个邪——它把整套 WSA 逆向移植到了 Windows 10 上,让你不换系统、不换电脑,就能在 Windows 10 运行 Android 应用,且体验接近原生、资源占用远低于传统模

gitblog_00752的博客 1068

android 的linux 内核修改

该文档描述了android内核对标准linux内核的修改,对希望学习android内核的同学有帮助。

电脑变身安卓手机:模拟器全解析

安卓模拟器是一种让电脑模拟安卓手机环境的软件工具。它通过在电脑上虚拟出安卓手机的硬件和操作系统,让用户能够像使用真手机一样运行安卓App。主要用途包括开发测试App、在电脑上玩手游以及体验安卓系统。常见的模拟器分为官方开发工具(如Android Emulator)和面向普通用户的第三方模拟器(如雷电、蓝叠等)。简单来说,它就是让电脑变身为一台虚拟安卓手机的软件。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 3977

半导体制造技术导论(第二版)萧宏 第五章集成电路加热工艺答案

第二次退火是在较高温度下进行,并将电阻系数较高的c49碳化硅转变为电阻系数较低的c54碳。水平式高温炉加热、垂直式高温炉加热(即传统的管式炉加热)、快速加热工艺RTP、激光镭射。8. 集成电路芯片制造过程中,会使用垫底氧化层、阻挡氧化层、栅氧氧化层、屏蔽氧化层和全。氧化是最重要的加热过程之一,是一种添加工艺,将氧气加入到硅晶圆后,在晶圆表面形成二氧。为了满足元器件性能的要求,必须利用退火工艺将晶格的损伤修复,使其恢复单晶结构并激活掺。工艺氮气气流下将晶舟推入炉管,升高温度,稳定温度;

goal_achieving的博客 1863

侧杆试验 - 高速撞击 - 显式动力学 - ANSYS Workbench

显式动力学是一种时间积分方法,用于在速度很重要时执行动态模拟。显式动力学考虑快速变化的条件或不连续事件,例如自由落体、高速撞击和施加的负载。由于这些“非线性动力学”已集成到模拟中,因此显式动力学是模拟高度瞬态物理现象的首选。有些侧面碰撞是指车辆侧向撞上路边的坚硬物体,如树木或电线杆。这通常是由于驾驶员失去控制、超速、误判拐角或在湿滑路面上打滑造成的。

jianqimingtian的博客 1289

android AVD 启动时报错:ERROR: missing a kernel file! Please ensure the file “kernel-qemu” is in the same

说明:SDK自带的AVD Manager存在很大问题,推荐使用Genymotion模拟器或【直接真机调试最方便】 错误参考文章:https://blog.youkuaiyun.com/yongchengphy/article/details/80458639 解决办法: 第一步:必须添加两个环境变量: ANDROID_SDK_ROOT = D:\software\android-sdk(S...

weixin_43343144的博客 3168

【maxENT】从数据到地图:R语言实现最大熵物种分布建模全流程解析

本文详细解析了如何使用R语言实现最大熵模型(MaxEnt)进行物种分布建模的全流程。从数据准备、环境变量处理到模型训练与参数调优,再到模型评估与结果可视化,提供了实用的代码示例和避坑指南。特别适合生态学研究者利用最大熵模型处理物种分布数据,提升研究效率。

weixin_27244795的博客 214

Android模拟器安装Magisk:安全高效的ROOT测试环境搭建指南

在Android开发与安全研究领域,获取系统级权限(ROOT)是进行深度测试和分析的基础需求。传统ROOT方案通过修改系统分区实现,但存在风险高、不可逆等问题。Magisk框架采用Systemless设计理念,在不直接修改系统分区的情况下实现ROOT,提供了更安全、可逆的权限管理方案。其核心价值在于支持模块化扩展和动态环境修改,适用于应用行为测试、安全分析、系统定制等多种场景。本文聚焦于Android Studio模拟器环境,通过修补Boot镜像的技术路径,详细解析如何构建一个可无限复现、零风险的Magis

weixin_33922672的博客 323

⭐️白嫖的阿里云认证⭐️ 【真题&参考答案】:大模型Clouder认证:利用大模型提升内容生产能力

【摘要】真题「大模型Clouder认证:利用大模型提升内容生产能力」

davidkorhenn的博客 1921

OpenCL编译环境配置

在 Linux 系统上配置 OpenCL 开发环境需要安装适当的驱动、运行时和开发工具。

深之JohnChen的专栏 1998

Docker-Android架构革命:容器化Android模拟器的技术范式转变

在移动应用开发和测试领域,传统Android模拟器面临着资源消耗巨大、环境配置复杂、测试环境不一致等系统性挑战。开发团队往往需要在本地工作站上维护多个Android SDK版本、不同的设备配置,以及复杂的依赖关系链。这种分散的环境管理方式不仅降低了开发效率,更在持续集成和云原生转型的浪潮中显得格格不入。Docker-Android项目通过容器化技术重构了Android模拟器的部署架构,实现了从本地

gitblog_00295的博客 978

如何用DETR(detection transformer)训练自己的数据集

DETR(detection transformer)简介 DETR是Facebook AI的研究者提出的Transformer的视觉版本,是CNN和transformer的融合,实现了端到端的预测,主要用于目标检测和全景分割。 DETR的Github地址:link

weixin_50233398的博客 3万+

使用VMware Workstation与GDB调试Linux虚拟机启动过程实战指南

内核调试是深入理解操作系统底层运行机制的关键技术,尤其在系统启动、驱动加载等早期阶段,传统日志调试手段往往失效。其核心原理是通过调试器与目标系统建立通信通道,实现对代码执行流程、内存状态和寄存器值的实时监控与控制。这项技术的核心价值在于能够对系统初始化过程进行逐指令跟踪,为排查启动故障、学习内核原理提供了不可替代的视角。在虚拟化环境中,调试启动过程的需求尤为常见,例如诊断虚拟机启动卡死、服务初始化失败等疑难问题。本文聚焦于如何在普及率极高的VMware Workstation环境中,通过配置虚拟串口与GDB

weixin_30443813的博客 431

如何用 Claude Code 阅读和理解陌生代码

摘要: 在接手陌生代码时,Claude Code能显著提升理解效率。核心策略是结构化拆解而非逐行阅读: 从整体入手:先扫描目录结构、定位核心模块,建立项目地图; 聚焦关键路径:通过数据流追踪、异常逻辑分析,识别技术债与风险点; 规避常见错误:避免抽象提问或一次性提交全部代码,应分模块精准提问; 高阶应用:可生成逻辑分层图、标记高复杂度区域,甚至定制阅读顺序。 最终目标是通过结构优先的提问策略,将理解周期从数天压缩至数小时。

sg_knight的专栏 1019

从原理到落地:监控 SAP OData bgRFC 队列的全景实践指南

摘要(150字) 本文系统讲解SAP Gateway/Backend场景中bgRFC队列的监控方法。内容涵盖:1)监控必要性——确保异步可靠传输,及时识别失败消息;2)两种服务质量(EO/EOIO)对监控策略的影响;3)通过事务码SBGRFCMON和SPRO路径访问监控界面;4)关键授权S_BGRFC的配置要求;5)详细操作指南包括筛选条件和动作选项;6)标准巡检脚本;7)三个典型案例(认证错误、顺序阻塞、调度压力)的诊断与修复方案。全文提供完整的监控方法论和实战指导。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 284
上一篇: qemu调试linux内核
下一篇: RCU设计
fightingup
博客等级 码龄17年 284粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值