完美调试android-goldfish(linux kernel) aarch64的方法

环境要求

  • Mac m1
  • Mac m1 中 虚拟机安装aarch64 ubuntu22.02
  • Mac m1安装OrbStack,并在其中安装 ubuntu20.04(x86_64)

构建文件系统

在虚拟机 aarch64 ubuntu22.02中构建

安装必要的库

sudo apt-get install libncurses5-dev  build-essential git bison flex libssl-dev dtc bison flex gcc make bc g++ vim git bc flex bison libssl-dev dwarves libelf-dev xz-utils wget

使用busybox-1.35.0,先配置make menuconfig,设置

 Settings  --->[*] Build static binary (no shared libs)

然后使用下面的脚本生成文件系统

cd busybox-1.35.0
sudo rm -rf _install
make install -j32
cd _installmkdir etc dev lib
cd etccat > profile << EOF
#!/bin/sh
export HOSTNAME=bryant
export USER=root
export HOME=/home
export PS1="[$USER@$HOSTNAME \W]\# "
PATH=/bin:/sbin:/usr/bin:/usr/sbin
LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
export PATH LD_LIBRARY_PATH
EOFcat > inittab << EOF
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
EOFcat > fstab << EOF
#device  mount-point    type     options   dump   fsck order
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
debugfs /sys/kernel/debug debugfs defaults 0 0
kmod_mount /mnt 9p trans=virtio 0 0
EOFmkdir init.d
cd init.d
cat > rcS << EOF
mkdir -p /sys
mkdir -p /tmp
mkdir -p /proc
mkdir -p /mnt
/bin/mount -a
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
EOFchmod 777 rcScd ../../dev
sudo mknod console c 5 1cd ..
find . | cpio -o --format=newc > ../rootfs.img

linux kernel 编译 && 调试

在虚拟机 aarch64 ubuntu22.02中构建
和x86_64中设置一致(本身就在aarch64中,不需要配置交叉编译工具,直接使用gcc编译

启动脚本(-kernel-initrd 根据自己实际的位置改一改)

qemu-system-aarch64 \-cpu cortex-a72 \-machine type=virt \-nographic -smp 2 -m 2048M \-kernel linux-5.18/arch/arm64/boot/Image \-append "nokaslr root=/dev/ram rdinit=/linuxrc console=ttyAMA0" \-initrd busybox-1.35.0/rootfs.img \-device virtio-scsi-device -s -S

在这里插入图片描述

android goldfish 编译 && 调试

所需环境 Mac m1 OrbStack ubuntu20.04(x86_64)

下载编译工具android NDK https://github.com/android/ndk/wiki/Unsupported-Downloads
用的是 android-ndk-r18b

编译环境配置

sudo apt install gcc g++ cmake make perl ruby libncurses5-dev gcc make bc g++ vim git bc flex bison libssl-dev dwarves libelf-dev xz-utils wget git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip openjdk-8-jdk

下载goldfish源码,并提取android-goldfish-4.4-dev

git clone https://android.googlesource.com/kernel/goldfish.git
git checkout -b android-goldfish-4.4-dev remotes/origin/android-goldfish-4.4-dev

配置goldfish

export PATH=/Volumes/TwoT/android_kernel/android-ndk-r18b/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin:$PATH
export CROSS_COMPILE=aarch64-linux-android-
make ARCH=arm64 arm64_ranchu_defconfig

修改.config

CONFIG_DEBUG_RODATA=n
CONFIG_RANDOMIZE_BASE=n

编译

make \ARCH=arm64 \CC=/Volumes/TwoT/android_kernel/android-ndk-r18b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang \CLANG_TRIPLE=aarch64-linux-gnu- \CROSS_COMPILE=/Volumes/TwoT/android_kernel/android-ndk-r18b/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android- \-j16

启动调试 在虚拟机 aarch64 ubuntu22.02

qemu-system-aarch64 \-cpu cortex-a72 \-machine type=virt \-nographic -smp 2 -m 2048M \-kernel /media/psf/TwoT/android_kernel/test/goldfish/arch/arm64/boot/Image \-append "nokaslr root=/dev/ram rdinit=/linuxrc console=ttyAMA0" \-initrd busybox-1.35.0/rootfs.img \-device virtio-scsi-device -s -S

在这里插入图片描述

其他的问题

为什么不在mac m1直接模拟执行?

下一个断点,继续运行,会就直接崩溃了,有大佬解决了,告知一些

poc的编写

  • 需要ndk静态编译
  • 需要在Mac m1上的android studio中创建aarch64模拟器,抽取里面system的文件,放到文件系统中
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/433296.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【重点】【DP】123.买卖股票的最佳时机III

题目 法1&#xff1a;单次遍历&#xff0c;Best! class Solution {public int maxProfit(int[] prices) {int f1 -prices[0], f2 0, f3 -prices[0], f4 0;for (int i 1; i < prices.length; i) {f1 Math.max(f1, -prices[i]);f2 Math.max(f2, f1 prices[i]);f3 Ma…

Python使用pip命令安装外部库-项目内安装外部库-全局安装外部库

一、前言 在进行Python项目开发时需要安装一些外部库来扩展项目功能&#xff0c;因此需要了解pip命令的详细使用。 二、基本语法 1.安装库 pip install 包名 2.安装特定版本 pip install 包名版本号 3.升级库 pip install --upgrade 包名 4.卸载库 pip uninstall 包名 5.查看已…

Ubuntu使用Docker部署Redis并实现远程访问本地数据库

文章目录 前言1. 安装Docker步骤2. 使用docker拉取redis镜像3. 启动redis容器4. 本地连接测试4.1 安装redis图形化界面工具4.2 使用RDM连接测试 5. 公网远程访问本地redis5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 前言 本文主要介绍如何在Ub…

如何快速搭建实用的爬虫管理平台

目录 一、前言 二、选择合适的爬虫框架 三、搭建数据库 步骤1 步骤2 步骤3 四、搭建Web服务器 步骤1 步骤2 步骤3 步骤4 五、管理爬虫 六、总结 一、前言 爬虫是互联网数据采集的关键工具&#xff0c;但是随着数据量的增加和需求的多样化&#xff0c;手动运行和管…

Chapter 8 - 1. Congestion Management in TCP Storage Networks

This chapter covers the following topics. 本章包括以下主题。 Understanding congestion in TCP storage networks. Detecting congestion in TCP storage networks. Traffic patterns with iSCSI and NVMe/TCP and correlation with network congestion. Preventing co…

【计算机图形学】实验五 一个简单的交互式绘图系统(实验报告分析+截图+源码)

可以先看一看这篇呀~【计算机图形学】专栏前言-CSDN博客https://blog.csdn.net/m0_55931547/article/details/135863062 目录 一、实验目的 二、实验内容

Redis(八)哨兵机制(sentinel)

文章目录 哨兵机制案例认识异常 哨兵运行流程及选举原理主观下线(Subjectively Down)ODown客观下线(Objectively Down)选举出领导者哨兵选出新master过程 哨兵使用建议 哨兵机制 吹哨人巡查监控后台master主机是否故障&#xff0c;如果故障了根据投票数自动将某一个从库转换为新…

开发微信小程序,将图片下载到相册的方法,saveImageToPhotosAlbum怎么用

在开发微信小程序的时候&#xff0c;经常能看到小程序里面有下载按钮&#xff0c;如何将小程序中的图片下载到手机相册中那&#xff0c;下面给大家说一下怎么做&#xff0c;代码如何去写。 一、到微信小程序后台开启“用户隐私保护指引” 1.进入小程序后台&#xff0c;侧拉拉到…

Ubuntu中安装OpenSSL

Ubuntu中安装OpenSSL 参考&#xff1a;linux上安装Openssl步骤详解_linux安装openssl-CSDN博客 下载&#xff1a; https://www.openssl.org/source/openssl-3.0.1.tar.gz 解压&#xff1a; tar -xzvf xxxx.tar.gz 安装&#xff1a; cd openssl-3.0.12 ./config make -j3…

计算机毕业设计 | SpringBoot 求职招聘管理系统(附源码)

1&#xff0c;绪论 1.1 开发背景 高学历人群是网络求职者的主体&#xff0c;且结构趋向固定。而在疫情肆虐的今日&#xff0c;线上招聘成了越来越多企业和个人选择的方式。在疫情期间线下招聘转为线上招聘&#xff0c;是疫情防控的需要。不能否定的是新的招聘模式的出现一定会…

jenkins发布失败

今天用jenkins发布项目时失败了&#xff0c;而前几天还好好的。 云控制台看了下&#xff0c;发现根本就没打包。 报错如下&#xff1a; 从控制台可以看出&#xff0c;项目依赖没有下载下来&#xff0c;所以打包失败了。 根本原因是&#xff1a;在配置中给yarn指定的淘宝仓库…

MongoDB日期存储与查询、@Query、嵌套字段查询实战总结

缘由 MongoDB数据库如下&#xff1a; 如上截图&#xff0c;使用MongoDB客户端工具DataGrip&#xff0c;在filter过滤框输入{ profiles.alias: 逆天子, profiles.channel: }&#xff0c;即可实现昵称和渠道多个嵌套字段过滤查询。 现有业务需求&#xff1a;用Java代码来查询…