Linux 之 部署vmware workstation 与在其上面跑android操作系统

一、简介

        VMware Workstation 是为 Windows 和 Linux 系统设计的虚拟层。它允许您在 Windows 或 Linux 环境中创建和管理虚拟机。
        Vmware Workstation 大致分为两个产品:Workstation Player 和 VMware Workstation Pro
VMware Workstation Player 个人使用免费,而 VMware Workstation Pro 需要许可。前者是一种非商业工具,仅提供基本功能,而 Workstation Pro 是一种专业,更先进的虚拟化解决方案。在 Linux 和 Windows 系统上运行,并且具有相同的安装要求。此外,两者都以 64 位 Intel 和 AMD CPU 进行基于 X86 的体系结构运行。

二、下载vmware workstation player

官网网址:www.vmware.com

1、点击  资源 后,如下图

 2、点击 产品下载 后,如下图

3、点击 下载产品  后,如下图

4、点击 转至下载 后,如下图

5、选择相应的系统版本,点击 立即下载 

6、在Linux 系统下,找到安装包,执行以下命令,安装

#sudo  bash VMware-Player-Full-17.0.2-21581411.x86_64.bundle

7、为了让 VMware Workstation 无缝地工作,还需要一些额外的内核模块。因此,按以下方式安装它们。
$ sudo vmware-modconfig --console --install-all

三、在vmware 上,安装 android 操作系统

1、

        安卓操作系统的官方网站是 Android 官网,网址为:https://www.android.com/。

在 Android 官网上,您可以获取有关 Android 操作系统的最新信息、特性和更新。您还可以浏览 Android 设备、应用程序和服务的相关内容。官网提供了开发者资源、文档和工具,供开发人员学习和构建基于 Android 平台的应用程序。

请注意,Android 是由 Google 公司开发和维护的移动操作系统,因此 Android 官网是由 Google 提供的。

2、

        "Repo" 是一个用于管理多个 Git 仓库的工具,特别适用于大型项目或包含多个代码库的项目。

Repo 是由 Google 开发的,用于管理 Android 开源项目(AOSP)的代码库。它允许开发人员轻松地同步、管理和更新多个代码仓库。

使用 Repo,您可以定义一个包含多个 Git 仓库的清单文件,该清单文件描述了每个仓库的 URL、分支和路径等信息。然后,Repo 可以根据清单文件自动下载、更新和同步这些仓库的代码。

Repo 提供了一组命令行工具,使您可以执行各种操作,例如初始化代码仓库、同步代码、切换分支、提交更改等。它简化了管理多个仓库的复杂性,并提供了一种统一的方式来管理整个项目的代码。

需要注意的是,Repo 是特定于 Android 开源项目的工具,虽然它可以用于其他项目,但它的主要设计目标是为了管理 AOSP 的代码库。

3、android 源码下载与编译

1.下载android 源码前,需要安装编译依赖库和工具

安装git 

sudo apt install git

设置git 账户,如果需要往android 官网提交源码,需要用google邮箱,一般设置普通的邮箱就行。 

  1. git config --global user.email "xxxxxxx@gmail.com"

  2. git config --global user.name "xxxxx"

 2.安装 jdk,##我自己的环境是安装的 openjdk-11-jdk,还有其他的版本,请自行选择,可以参考android 源码编译的说明

sudo apt install openjdk-11-jdk

 3.配置PATH环境变量,##我自己的环境是在第5步时,直接用的root 用户,用的路径是:/usr/bin/repo 

  1. mkdir ~/bin

  2. echo "PATH=~/bin:\$PATH" >> ~/.bashrc

  3. source ~/.bashrc

 4.安装curl 库

sudo apt install curl

 5.下载repo 并设置权限

  1. curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo

  2. chmod a+x ~/bin/repo

我自己的操作是:

  1. curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > /bin/repo

  2. chmod a+x /bin/repo

6.安装python

 sudo apt install python2

 

 python2 和python3 的有些语法不同,android源码编译时,不同的版本依赖不同的python,可以根据报错,进行选择安装python的版本。我的环境是依赖 python2.

7.下载android 源码

  1. mkdir source

  2. cd source

  3. mkdir android_9

  4. cd android_9

以下命令在android_10 目录下进行。 

8.设置repo的地址,这里使用的清华源:

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'

我是直接修改的/usr/bin/repo 文件,把REPO_URL地址设置如下:

 REPO_URL = "https://gerrit.googlesource.com/git-repo"
修改为

REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'

 vim /usr/bin/repo

 


9.初始化仓库:

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b 


10.制定Android版本并初始化:

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-9.0.0_r10

 

第9步和第10步是可以统一执行为 第10步。

关于安卓版本列表,请参考此网站:

代号、标记和 build 号  |  Android 开源项目  |  Android Open Source Projecticon-default.png?t=N7T8https://source.android.com/docs/setup/about/build-numbers?hl=zh-cn#source-code-tags-and-builds内容大致如下:

执行完这一步,会在当前android_10的目录下生成一个目录 .repo/。这个目录是安卓源码的下载和版本信息的集合。

11.开始同步代码源:

repo sync

 需要4个小时以上进行同步代码,可以选择晚上进行代码同步。

12.安装编译依赖

sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache
sudo apt-get install libssl-dev

 13.开始编译

source build/envsetup.sh   //加载命令

lunch                                 //选择平台编译选项

make -j128

 执行 lunch 后,会很多选项,请输入你需要的编译选项,我选择的是 6

编译选项后面的后缀,代表版本类型:

eng: 工程机,
user:最终用户机
userdebug:调试测试机

编译成功如下所示:

14.启动模拟器

emulator

 在ubantu 上启动失败,很正常。

解决办法:

找到官方或者其他提供的sdk或者镜像更换以下文件,使用官方提供的Android10的镜像。创建完毕后找到sdk所在的相关目录sdk/system-images/android-P/google_apis/x86,然后找到我们编译好的镜像的目录,大概在./out/target/product这个目录中

linux kernel

system.img

userdata.img

ramdisk.img

四、编译源码过程中,有报错信息,以下是处理的方法 

 1.编译sepolicy报错

报错信息和 flex 相关

flex-2.5.39: loadlocale.c:130: _nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed.
Aborted (core dumped)

 解决办法:

使用源码重新编译一个flex替换掉,

# 进入flex目录
cd prebuilts/misc/linux-x86/flex/
# 解压源码,注意这里一定要建一个目录,否则解压出来的目录名会覆盖掉flex-2.5.39这个二进制文件(同名),不利于后面做替换
mkdir flex-2.5.39_src
tar xzvf flex-2.5.39.tar.gz -C ./flex-2.5.39_src
cd flex-2.5.39_src/flex-2.5.39/
# 默认配置方式编译
./configure && make
# 替换掉源码中的二进制
mv flex ../../flex-2.5.39
# 返回flex目录,清理解压出来的目录,同时清除编译中间文件
cd ../../
git clean -fd -- ./
# 回到Android编译根目录
cd ../../../../

2.编译framework报错

报错信息,信息中红色是重要信息:

 patchoatd E 06-21 15:22:26 844380 844380 image_space.cc:1761] Could not create image space with image file 'out/target/product/blueline/dex_bootjars/system/framework/boot.art'. Attempting to fall back to imageless running. Error was: Failed to mmap at expected address, mapped at 0x7fe5d0000000 instead of 0x705db000
patchoatd E 06-21 15:22:26 844380 844380 image_space.cc:1761] Attempted image: out/target/product/blueline/dex_bootjars/system/framework/boot-framework.art
patchoatd E 06-21 15:22:26 844380 844380 runtime.cc:1290] Dex file fallback disabled, cannot continue without image.
patchoatd E 06-21 15:22:26 844380 844380 patchoat.cc:485] Unable to initialize runtime

问题原因:
报错指出,mmap系统调用返回的内存起始地址与传下去的建议地址值不一致。
实际上,这个建议值在Linux kernel 5.18(Host端,即PC或工作站端)及其以后,基本是被无视掉了,导致每次创建的内存地址值,跟建议值都不一样,从而报错,而在Linux kernel 5.17及其以前的版本,建议值通常都会被接受,并按照该地址申请内存;

解决方式:
mmap系统调用时,flag添加MAP_FIXED_NOREPLACE标志位
源码修改如下:

增加的代码部分,方便copy:

#if !defined(ART_TARGET)
  } else if (expected_ptr) {
#define MAP_FIXED_NOREPLACE 0x100000
          flags |= MAP_FIXED_NOREPLACE;
#endif
 

五、继续加油 

环境配置好之后,以后就可以直接执行以下步骤,拉取代码,直接编译:

mkdir android_# 

cd android_#

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-#

repo sync

source build/envsetup.sh   //加载命令

lunch                                 //选择平台编译选项

make -j128

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值