打开电脑 启用或关闭Windows 功能
额外勾选 Windows 虚拟监控平台,适用于Linux的Windows 子系统,虚拟机平台,然后点击确定,如图,然后点击确定,进行重启。
打开 Microsoft Score应用程序,搜索 WSL, 选择安装ubuntu,我这边选择的是 Ubuntu 20.04.4 LTS,安装完成后如果不想将C盘作为挂载的虚拟硬盘先不要打开 Ubuntu,需要移动 Ubuntu的位置,保存在其他盘,在其他盘进行启动,详见步骤3;如果默认安装在C盘,会默认分配250G 挂载到 Ubuntu。
管理员模式打开Windows 终端(PowerShell),指令执行如图
cd C:\Program Files\WindowsApps\ #进入Ubuntu 安装的根目录
dir CanonicalGroupLimited* #列出以CanonicalGroupLimited 开头的文件
dir .\CanonicalGroupLimited.Ubuntu20.04LTS_2004.4.5.0_x64__79rhkp1fndgsc\ #通过tab键补全命名以CanonicalGroupLimited 开头的路径,并罗列该文件夹下所有的子文件,看哪个文件夹包含 ubuntu2004.exe 可执行文件
mkdir e:\ubuntu20.04 #在对应盘符下创建一个存放ubuntu的路径,我这边在 e 盘下创建了对应的目录
copy .\CanonicalGroupLimited.Ubuntu20.04LTS_2004.4.5.0_x64__79rhkp1fndgsc\* e:\ubuntu20.04\ #将包含ubuntu2004.exe 文件的文件夹下面的所有文件复制到你所创建的目录,原有的Ubuntu 在Microsoft Score中进行卸载了
SWL默认给虚拟硬盘分配的空间为256G,在后续的源码编译时会提示硬盘空间不够,需要开始时扩大所挂载的虚拟硬盘空间
wsl --shutdown #终止WSL 实例
Get-AppxPackage -Name "**" | Select PackageFamilyName #如果不知道 *ext4.vhdx* 的路径,可以用该指令进行检索
diskpart #可以对挂载磁盘进行操作
Select vdisk file="" #pathToVHD代表ext4.vhdx的路径,选择挂载的虚拟盘,本地执行 Select vdisk file="E:\ubuntu20.04\ext4.vhdx"
detail vdisk #查看挂载的虚拟盘的大小,默认256G
expand vdisk maximum=<你需要的大小> #设置你想要的虚拟盘大小,本地执行 expand vdisk maximum=352000
detail vdisk #再次查看分配的虚拟盘大小
exit #退出diskpart
df -h #查看当前的挂载情况
sudo mount -t devtmpfs none /dev
mount | grep ext4
sudo resize2fs /dev/sdX M #X可能代表a,b,c,sizeInMegabytes代表扩展后的大小,与前面保持一致即可,本地执行sudo resize2fs /dev/sdb 352000M
df -h 查看分配的虚拟硬盘扩容完成
虚拟机安装时会默认安装实际物理内存的一半,本地 16G 内存,给虚拟机分配的内存约为8G, 虚拟内存不够,编译时会报错,无法构建成功,需要使用 swap 将部分硬盘当作内存使用。Ubuntu 中执行如下指令。
free -m #查看当前 *swap* 的大小
sudo swapoff /var/swap
sudo rm /var/swap
sudo fallocate -l 16G /var/swap
sudo chmod 600 /var/swap
sudo mkswap /var/swap
sudo swapon /var/swap
sudo vim /etc/fstab #编辑/etc/fstab 添加如下内容,
/var/swap swap swap defaults 0 0
:: 源码编译构建时可以新开 *Ubuntu* 命令窗口,执行 top 指令,可以查看修改后的 *SWAP*是否被使用,如果未被使用,进行如下处理,最好直接做如下处理
sudo vim /etc/sysctl.conf #编辑/etc/sysctl.conf ,当内存剩余设定值时启用 *SWAP*,
vm.min_free_kbytes=1500000 #当内存为1.5G时启用SWAP内存
每次重启之后执行 sudo swapon /var/swap 指令进行挂载,或按照下面的步骤进行自动挂载
sudo vim /etc/systemd/system/rc-local.service ##创建systemd的服务脚本
## 在/etc/systemd/system/rc-local.service 中添加如下内容:
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
sudo vim /etc/rc.local ## 创建rc.local 文件
### 在rc.local 文件中添加如下内容
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# 开机启动的命令
swapon /var/swap ## 开机进行 swap 挂载
exit 0
sudo systemctl enable rc-local.service ## 启动创建的服务
sudo chmod +x /etc/rc.local ## 给/etc/rc.local 权限
sudo apt update
sudo apt install python-is-python3 #Ubuntu默认安装python3,编译时会提示没有python,执行该指令处理没有python的情况
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
sudo apt install apt-file #检索下是否有libncurse.s0.5,如果没有,安装依赖libncurses5
sudo apt-file find libncurse.s0.5
sudo apt install libncurses5
sudo apt install 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 ## 安装需要的依赖包
git config --global user.name "xxxxxxx"
git config --global user.email "[email protected]"
repo init -u https://android.googlesource.com/platform/manifest #官方初始化基线,由于墙无法正常初始化,使用下面的指令进行初始化
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest #中科大镜像源,如果提示无法连接到 gerrit.googlesource.com,可以执行 vim ~/bin/repo 编辑该文件,将 REPO_URL 的链接替换为: REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'
repo sync #同步代码,末尾可以加 -jX,eg:repo sync -j4 X代表同步代码时开辟的线程数,建议不要 repo sync -j4
::代码同步完成后,进行编译构建
. build/envsetup.sh #或者 source build/envsetup.sh
lunch #lunch后会罗列所有的分支,输入序号选择你要编译的分支,或者直接 lunch <分支名>;本地执行 lunch aosp_x86_64-eng
make -j12 #进行编译,建议不要过大,make -j8