首页 > 其他分享 >如何编译avd for macarm or winx86 内核

如何编译avd for macarm or winx86 内核

时间:2023-12-29 11:46:50浏览次数:39  
标签:macarm common winx86 device 内核 avd virtual config build

AVD:Android Virtual Device

前言

别问需求 问就是抽象

背景是pixel6好贵 买不起

备用机内核只有4.4 改了三天内核代码 只把kernelSu patch进去了 玩不起ebpf 呜呜呜

什么 我是mac m1? 有android studio的原生arm模拟器?

avd 启动!

解决痛点: 没有root 等需要自定义内核的需求 如patch kernelSu

另说:如果你只是需要root的话 使用 https://gitlab.com/newbit/rootAVD 安装magisk 是更快的选择 虽然我没用过 但是真的很快看起来

编译目标

Alt text

的内核 (x86_64与aarch64两个版本)

环境搭建

系统

wsl2 + ubuntu22.04(x86) 32g

推荐你的ubuntu有16g以上的可用内存

我不推荐使用vmware 我的vmware把cpu核数拉满了也只能吃30% 好奇怪 但是只是影响编译速度而已(

如果你有一个高性能的linux服务器就更好了

网络

需要大量访问 https://android.googlesource.com/ 获取代码与toolchains

如果你能稳定快速访问当我没说(

不要使用proxychains 很不稳定

我使用export http_proxy 等

apt

不记得apt安装过什么了(

sudo apt install git git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

我还另行配置了ssh和scp 我在mac上ssh到我的wsl进行的编译

repo的安装

mkdir ~/bin

wget https://storage.googleapis.com/git-repo-downloads/repo -P ~/bin/

chmod a+x ~/bin/repo

在~/.bashrc中添加 export PATH=~/bin:$PATH

拉取源码

BRANCH=common-android12-5.10-lts
ROOTDIR=AVD-kernel-$BRANCH
mkdir $ROOTDIR && cd $ROOTDIR
repo init --depth=1 -u https://android.googlesource.com/kernel/manifest -b $BRANCH
repo sync --force-sync --no-clone-bundle --no-tags -j$(nproc)

如果中途断了 就把整个建立的文件夹都删了再重新拉吧

真的很慢 拉取加编译后共占16g

Alt text

编译

修改config

aarch64

请看 common/build.config.aarch64

获取到如下信息

Alt text

MAKE_GOALS="
Image
modules
"

FILES="
arch/arm64/boot/Image
vmlinux
System.map
vmlinux.symvers
modules.builtin
modules.builtin.modinfo
"

然后请看 common-modules/virtual-device/build.config.virtual_device.aarch64

Alt text

如图

注释原有的MAKE_GOALS 和 FILES

追加 SKIP_CP_KERNEL_HDR=1
追加 上面获取的信息

x86_64

common/build.config.x86_64

拿到

MAKE_GOALS="
bzImage
modules
prepare-objtool
"

FILES="
arch/x86/boot/bzImage
vmlinux
System.map
vmlinux.symvers
modules.builtin
modules.builtin.modinfo
"

然后修改 common-modules/virtual-device/build.config.virtual_device.x86_64

注释原有的MAKE_GOALS 和 FILES

追加 SKIP_CP_KERNEL_HDR=1
追加 上面获取的信息

其他架构

和上面类似

make config

根据你要build的内核架构

x86_64

BUILD_CONFIG=common-modules/virtual-device/build.config.virtual_device.x86_64 \
FRAGMENT_CONFIG=common/arch/x86/configs/gki_defconfig \
build/config.sh

进入菜单后直接save 然后exit即可

aarch64

BUILD_CONFIG=common-modules/virtual-device/build.config.virtual_device.aarch64 \
FRAGMENT_CONFIG=common/arch/arm64/configs/gki_defconfig \
build/config.sh

进入菜单后直接save 然后exit即可

make原版内核

aarch64

time LTO=thin BUILD_CONFIG=common-modules/virtual-device/build.config.virtual_device.aarch64 \
build/build.sh -j$(nproc)

x86


time LTO=thin  BUILD_CONFIG=common-modules/virtual-device/build.config.virtual_device.x86_64 \
build/build.sh -j$(nproc)


time命令用来计时 不加也行(

LTO=thin比较重要,如果你的内存小于32g 加这个参数,否则不加( 反正我没加没build成功 直接给我wsl跑崩溃了

如果所有的都没报错的话 你会在shell中看到输出
类似于
Files copied to ~/AVD-kernel-common-android12-5.10-lts/out/android12-5.10/dist

然后你可以在dist中找到Image文件 或 bzImage 取决于你build出来的架构 即

Alt text

中的MAKE_GOALS

替换avd内核 尝试开机

Alt text

关闭你的avd

进入 /Users/ltlly/Library/Android/sdk/system-images/android-31/google_apis/arm64-v8a中

备份原始 kernel-ranchu

将你build出来的Image改名为kernel-ranchu

Alt text

选这个 能进入系统就算成功

如果你没进入系统 请 尝试

重新build

检查你有没有正确修改config

adb中使用uname -r 查看Alt text 你repo拉下来的源码是否与之匹配 如:common-android12-5.10-lts

修改内核

演示集成kernelSu

https://kernelsu.org/zh_CN/guide/how-to-build.html#使用-kernelsu-构建内核

在common目录下执行

curl -LSs "https://raw.githubusercontent.com/tiann/KernelSU/main/kernel/setup.sh" | bash -

来一键集成kernelSu

或者你选择修改内核的config

命令见 make config 节

修改后save exit即可

重新编译内核

aarch64

time LTO=thin BUILD_CONFIG=common-modules/virtual-device/build.config.virtual_device.aarch64 \
SKIP_MRPROPER=1 \
build/build.sh -j$(nproc)

x86


time LTO=thin  BUILD_CONFIG=common-modules/virtual-device/build.config.virtual_device.x86_64 \
SKIP_MRPROPER=1 \
build/build.sh -j$(nproc)


增加了SKIP_MRPROPER=1参数 用来跳过 make mrproper 命令(类似于更彻底的make clean)加速编译

当然你也可以删除该参数 每次都全量编译内核

替换内核 尝试开机

见上文

胜利结算画面

Alt text

Alt text

Alt text

不足之处

avd的android镜像还是特征太多了 比如系统指纹什么的都能看出来不是一台正常设备

如果要去除这些特征的话就要全量build avd的镜像啦 等我以后想逆check环境的app再重新build这些叭

参考文献

绝大多数命令魔改自
https://xdaforums.com/t/guide-build-mod-update-kernel-ranchu-goldfish-5-4-5-10-gki-ramdisk-img-modules-rootavd-android-11-r-12-s-avd-google-play-store-api.4220697/

虽然没什么用 但这是官方给出的内核build方式
https://source.android.com/docs/setup/build/building-kernels?hl=zh-cn

如果你只是想为avd安装一个magisk https://gitlab.com/newbit/rootAVD

安装repo https://blog.csdn.net/xuanwolanxue/article/details/104678027

现在最新的wsl2可以直接共享windows的ip的 也可以直接走代理 https://www.v2ex.com/t/975098?p=2

集成KernelSu https://kernelsu.org/zh_CN/guide/how-to-build.html#使用-kernelsu-构建内核

看看内核源码 https://elixir.bootlin.com/linux/v4.4.302/source

为android增加硬件断点 https://bbs.kanxue.com/thread-278647.htm#msg_header_h1_4

如果你修改的内核低于5.10 又想开启ebpf相关功能? https://blog.seeflower.dev/archives/174/#title-1

标签:macarm,common,winx86,device,内核,avd,virtual,config,build
From: https://www.cnblogs.com/FW-ltlly/p/17934456.html

相关文章

  • A2DP_AVDTP
    a2dp的架构常见的音频编解码:SBC、AAC、APTX等,负责对PCMrawdata进行编解码(编码就会有压缩率,即将rawdata减少)。经过编码后的rawdata会被传送到AVDTP层,加上这层的协议数据再传送到L2CAP层,最后会传到对端的A2DPsink,然后进过解码将rawdata丢到speaker中。 A2DP定义了两个......
  • Python报错:pkg-config could not find libraries ['avformat', 'avcodec', 'avdev
    参考:https://github.com/PyAV-Org/PyAV/issues/238https://pyav.org/docs/6.1.2/installation.html#mac-os-x  =====================  报错信息:C:\Users\liuxue>pipinstallavCollectingavUsingcachedav-0.3.3.tar.gzInstallingcollectedpackages:av......
  • avdmanager 返回了非零退出代码: 1。
    最近做了一次系统还原,很多功能都出现了异常重装了VisualStudio之后创建安卓仿真器的时候遇到问题,说“avdmanager返回了非零退出代码:1。”解决思路1搜索问题使用Google搜索,前两条是开发者社区,点进去看看2.看帖子详情不要看到问题关闭就划走,看看下面都说了什么3.......
  • 2023-11-08 Android studio下载的模拟器存放路径以及如何修改存放路径 ==》默认路径:C:
    模拟器存放默认路径:C:\Users\Administrator\.android\avd如何修改:设置一个系统变量,如图,点击Help==》EditCustomProperties 然后再弹出的文本框里输入你要存放的路径,比如我存在D盘的adv文件夹里面ANDROID_AVD_HOME=D:\\adv 我的as版本:2022.3.1Patch3 写到最后:c盘......
  • avdevice_register_all()解析备忘
    以下解析基于fmpeg-6.0。voidavdevice_register_all(void){avpriv_register_devices(outdev_list,indev_list);}从上面可以看出来,avdevice_register_all()通过avpriv_register_device注册所有输入输出列表上的设备。其中,outdev_list如下:staticconstFFOutputFormat*......
  • android studio创建avd 知乎
    在AndroidStudio中创建AVD(AndroidVirtualDevice)的步骤对于刚入行的开发者来说,创建AVD可能是一个全新的概念。AVD是一个虚拟的Android设备,用于在AndroidStudio中进行应用程序的测试和调试。下面是创建AVD的步骤:步骤描述1打开AndroidStudio2打开AVDManager3......
  • android studio avd
    如何在AndroidStudio中创建和管理虚拟设备(AVD)作为一名经验丰富的开发者,我将向你详细介绍如何在AndroidStudio中创建和管理虚拟设备(AVD)。AVD是一个用于在模拟器中运行和测试Android应用程序的虚拟设备。整体流程下面是创建和管理AVD的整体流程,我们将逐步进行。打开AndroidSt......
  • 3、修改avd模拟器的默认路径
     1、由于avd的默认路径在c盘,如图所示的位置 2、现在将位置进行更改,先在D盘创建文件夹,再将c盘文件夹的内容移动过去  3、配置环境变量 4、修改配置文件  ......
  • android-脱离AndroidStudio使用AVD
    android-脱离AndroidStudio使用AVD实际上,AVD不需要AndroidStudio图形界面也能独立运行。直接启动模拟器的方法是在终端中输入emulator-avd模拟器名称。默认情况下,emulator程序在C:\Users\users\AppData\Local\Android\Sdk\emulator\文件夹中。进入此文件夹,为emulator.exe......
  • Android AVD创建及设置中各参数详解
    设置AVD时有些参数比较模糊,特地找了篇文章,大家参考下!本文根据如下的模拟器安装做一些解释:[color=red][b]Name[/b][/color]:自定义虚拟的名称,不能有空格或者其他非法字符,否则不能创建,即CreatAVD不能高亮点击。[color=red][b]Target[/b][/color]:选择要运行的android版本(也可理解......