- 什么是Wsl
- Windows中如果进行交叉编译
- Wsl下有哪些Linux分发版
- 类似平台
- Wsl安装
- Wsl中添加Linux分发版
- Wsl中文件交互
- 修改Linux分发版镜像源
- AOSP代码下载
- AOSP源码编译
- Windows terminal(可选)
- 安装XServer,使用图形化界面
什么是Wsl
wsl是适用于 Linux 的 Windows 子系统,它可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生传统虚拟机或双启动设置开销。
更多关于Wsl,请移步到这里
Wsl可以:
- 在 Microsoft Store 中选择你偏好的 GNU/Linux 分发版。
- 运行常用的命令行软件工具(例如 grep、sed、awk)或其他 ELF-64 二进制文件。
- 运行 Bash shell 脚本和 GNU/Linux 命令行应用程序,包括:
- 工具:vim、emacs、tmux
- 语言:NodeJS、Javascript、Python、Ruby、C/ C++、C# 与 F#、Rust、Go 等。
- 服务:SSHD、MySQL、Apache、lighttpd、MongoDB、PostgreSQL。
- 使用自己的 GNU/Linux 分发包管理器安装其他软件。
- 使用类似于 Unix 的命令行 shell 调用 Windows 应用程序。
- 在 Windows 上调用 GNU/Linux 应用程序。
Windows中如果进行交叉编译
之前我们开发嵌入式或者进行安装系统开发时,大多数都会选择安装Linux系统,因为大多数嵌入式开发均采用的是安卓的平台,而安卓是基于Linux内核的,所以使用Linux开发嵌入式,有着不可替代的优势。
但是完全在Linux下开发和工作,也会存在一定的不方便。例如部分产品的刷机工具或者工作必须工具软件是没有Linux端的,所以在Linux下我们是不能够正常使用的它们的。有些朋友会说,Linux下使用Wine它不香吗?或者安装Deepin,也可以安装虚拟机呀。
而我要说的是,Linux下安装Wine它确实不香呀!另外安装虚拟机也不方便,一方面占用系统资源严重,另外对应文件交互也不是很方便。Deepin虽然说也挺不错的,但是支持的软件还是有限。那么针对这些问题,Wsl就可以完全解决你的烦恼。
Wsl下有哪些Linux分发版
Wsl目前支持以下Linux分发版:
- Ubuntu 20.04
- Ubuntu 20.04 ARM
- Ubuntu 18.04
- Ubuntu 18.04 ARM
- Ubuntu 16.04
- Debian GNU/Linux
- Kali Linux
- OpenSUSE Leap 42
- SUSE Linux Enterprise Server 12
- Fedora Remix for WSL
类似平台
multipass是一个小型的虚拟机,支持Linux,MacOS以及Windows平台,它和Wsl比较类似,占用资源较传统虚拟机大大减少,有兴趣的朋友可以去了解下:https://multipass.run/
Wsl安装
- 步骤 1 - 启用适用于 Linux 的 Windows 子系统
需要先启用“适用于 Linux 的 Windows 子系统”可选功能,然后才能在 Windows 上安装 Linux 分发。
以管理员身份打开 PowerShell 并运行:
1 | dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart |
- 启用虚拟机功能
以管理员身份打开 PowerShell 并运行:
1 | dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart |
- 下载 Linux 内核更新包
移步这里下载并安装:
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
完成后重启电脑。
Wsl中添加Linux分发版
Wsl支持从Windows store、命令、安装包安装Linux分发版本,这里主要介绍安装包和store安装方式:
从Windows store安装
点击下载成功后,直接双击安装,更多安装信息请移步这里
安装包安装
点击下载成功后,直接双击安装,更多安装信息请移步这里
Wsl中文件交互
Wsl中的Linux分发版会自动将Windows磁盘挂载到/mnt/下,比如C盘会挂载为/mnt/c。从Windows中也可以很方便的访问Linux分发版的文件,只需打开\wsl$,就可以看到相应的分发版了。
修改Linux分发版镜像源
由于默认镜像源访问速度较慢,推荐修改为清华镜像源:
1 | sudo cp /etc/apt/sources.list /etc/apt/sources.ubuntu |
更多详细请移步这里
AOSP代码下载
关于这块儿的介绍,大家可以去我之前的一篇文章中查看:国内Android源码下载编译配置
因为repo下载需要Python环境,分发版为Ubuntu20.04LTS自带的Python为3.x,所以需要安装2.x的Python
1 | sudo apt-get install python |
- 启用文件名大小写敏感
Windows文件或者文件夹时不区分大小写的,比如你之前有一个文件名为aa.txt,那么你是没办法再在相同目录下创建AA.txt,Aa.txt,aA.txt文件的。
当然了,Windows是可以支持区分大小写的,我们只需执行以下命令并传入你需要区分大小写的文件夹就可以了,另外,你没办法递归方式进行修改,但是如果你在启用大小写后新添加的目录或者文件,它会自动继承父文件夹的大小写敏感的。
使用管理员权限在当前文件夹打开PowerShell,输入命令:
1 | fsutil.exe file setCaseSensitiveInfo D:\Linux enable |
如果,你在拉代码的时候发现类似如下报错,说明你没有启用大小写敏感:
1 | [ERROR] Your file system in xxx is *not* case-sensitive! |
- 添加ssh-key时报错解决
1 | ssh-add xxx |
AOSP源码编译
由于Linux分发版中缺少一些模块,会导致编译失败,这里罗列出来,请大家提前安装(这里笔者的环境为:Win10专业版 1903,内核版本:18362.449,Linux分发版本为Ubuntu-20.04 LTS)
1 | sudo apt install zip unzip m4 make libtinfo5 libncurses5 libncurses5-dev libssl-dev |
编译可能的报错:
报错1:
fixdep: error fstat‘ing depfile: scripts/basic/.fixdep.d: Value too large for defined data type
make[2]: *** [scripts/Makefile.host:102: scripts/basic/fixdep] Error 2
make[2]: *** Deleting file ‘scripts/basic/fixdep’1
2
3
4
5
6
7# 修改kernel\msm-4.14\scripts\basic\fixdep.c,在导入sys/stat.h之前添加下面这个宏定义,修改效果如下:
#define _FILE_OFFSET_BITS 64
#include <sys/types.h>
#include <sys/stat.h>
# 或者如同报错2解决方式报错2
scripts/kconfig/conf –silentoldconfig Kconfig
***
*** Configuration file “.config” not found!
***
*** Please run some configurator (e.g. “make oldconfig” or
*** “make menuconfig” or “make xconfig”).
***
make[3]: *** [/mnt/e/Workspaces/Ecarx/Codes/qc8155-CS2-20201013/aosp-caf/kernel/msm-4.14/scripts/kconfig/Makefile:40: silentoldconfig] Error 1
make[2]: *** [/mnt/e/Workspaces/Ecarx/Codes/qc8155-CS2-20201013/aosp-caf/kernel/msm-4.14/Makefile:544: silentoldconfig] Error 2
make[1]: *** No rule to make target ‘include/config/auto.conf’, needed by ‘include/config/kernel.release’. Stop.
make[1]: Leaving directory ‘/mnt/e/Workspaces/Ecarx/Codes/qc8155-CS2-20201013/aosp-caf/out/target/product/kx11_high/obj/kernel/msm-4.14’
make: *** [Makefile:146: sub-make] Error 2
make: Leaving directory ‘/mnt/e/Workspaces/Ecarx/Codes/qc8155-CS2-20201013/aosp-caf/kernel/msm-4.14’1
2
3
4# 这个报错应该是gcc的架构不对,需要64位的而本地安装了32位的
sudo apt-get purge gcc:i386
sudo apt-get autoremove
sudo apt-get install gcc报错3
dex2oatd F art/dex2oat/dex2oat.cc] dex2oat did not finish after 2850 seconds
Zygote loaded classes=10594 post zygote classes=28
Intern table: 84066 strong; 0 weak
JNI: CheckJNI is off; globals=49 (plus 28 weak)
Libraries: (0)
Heap: 99% free, 19KB/64MB; dex2oatd F 11-29 23:29:21 24310 24317 thread_list.cc:771] Timed out waiting for threads to suspend, waited for 50.000s
Runtime aborting…
Dumping all threads without appropriate locks held: thread list lock mutator lock解决方法1,不推荐
针对出错的项目关闭odex生成,找到编译不过去的app或jar包的mk文件,加上
LOCAL_DEX_PREOPT := false
缺点:只能一个一个去找,去添加,较麻烦解决方法2,推荐
如果是boot.jar出现这个问题
在build\make\core\dex_preopt_libart_boot.mk文件中找到DEX2OAT在其后追加-j1,使用单线程编译odex,类似如下修改:1
2
3@rm -f $(dir $($(PRIVATE_2ND_ARCH_VAR_PREFIX)LIBART_TARGET_BOOT_OAT_UNSTRIPPED))/*.oat
$(DEX2OAT) -j1 --runtime-arg -Xms$(DEX2OAT_IMAGE_XMS) \
--runtime-arg -Xmx$(DEX2OAT_IMAGE_XMX) \如果是某个app出现这个问题
在build\make\core\dex_preopt_libart.mk文件中找到DEX2OAT在其后追加-j1,使用单线程编译odex,类似如下修改:1
2
3
4$(hide) mkdir -p $(dir $(2))
$(hide) ANDROID_LOG_TAGS="*:e" $(DEX2OAT) -j1 \
--runtime-arg -Xms$(DEX2OAT_XMS) --runtime-arg -Xmx$(DEX2OAT_XMX) \
--class-loader-context=$(DEX2OAT_CLASS_LOADER_CONTEXT) \也可使用变量判断当前HOST_CROSS_OS变量是否为windows,如果是的话使用单线程编译
因为这编译这类文件的数量不多,因此不用担心影响总体编译效率
Windows terminal(可选)
Windows 终端是一个面向命令行工具和 shell(如命令提示符、PowerShell 和适用于 Linux 的 Windows 子系统 (WSL))用户的新式终端应用程序。 它的主要功能包括多个选项卡、窗格、Unicode 和 UTF-8 字符支持、GPU 加速文本呈现引擎,你还可用它来创建你自己的主题并自定义文本、颜色、背景和快捷方式。
点击这里直接下载双击安装即可:
Windows terminal
更多详细介绍请移步这里
安装XServer,使用图形化界面
有的朋友可能对于Linux的字符界面操作并不熟悉,所以使用起来可能是比较费劲的,所以就想问Wsl是否支持图形化界面的使用的呢?答案是:支持:
1 | sudo apt-get install xfce4 xrdp xorg |