admin 管理员组文章数量: 887021
一、前言
听说win10合入了Linux作为一个子系统,起初只以为是类似虚拟机的实现机制,想必对性能的提高也很有限。但是稍微了解却发现是并不是虚拟机的那种机制,而是可以完全发挥Host机器的性能,这无疑是用虚拟机进行学习Linux平台上的东西的完美的替代品。但仍然担心这个子系统并不如我所期望的那样完美,所以尝试着编译一下Android这个系统吧,如果能够编译Android成功,那么基本上也可以作为完美的替代品。
二、从Windows7升级到Windows 10
由于之前对于win10各种各样传言的不喜欢,一直没有升级win10,生怕面临余生被强制更新所统治的恐怖。然而公司已经普遍采用win10了,用了一段发现有些地方的确是慢,但并没有达到传说中的无法忍受的程度,更何况,还有Linux子系统,所以下定决心,将自己的win7升级为win10.
这个小节稍微提一下如何最大可能“纯净的”升级win10。
必备工具:
(1)windows10系统镜像。
(2)一个U盘(容量随意)。
这里要注意,有人会选择GHOST镜像,但我一向是对GHOST镜像敬而远之。GHOST镜像会集成很多用不上的东西,各种自以为是的对系统配置的修改,还有各种乱七八糟的预装应用。不过现在想找到“纯洁”的windows10安装镜像也很难了,我也只找到了差强人意的iso镜像。不过好歹是个安装盘。
一句话概括,用老毛桃U盘启动工具将U盘制作成一个WInPE的启动U盘,之后在WinPE里面装载镜像,进行安装。建议最好格式化C盘,提前备份好一切:桌面,我的文档,C盘目录其他应用等等。
这里注意一下:制作U盘启动的时候,会提示你是否要加入UEFI引导,不要选。我一开始想试一下,结果就是一直停在了99%等了N久N久,然后强制关闭后U盘变砖了。想必这个UEFI并不是支持所有的U盘,而我们的场景也没有这个需要,还是别给自己引入额外的问题了。之后是用分区助手的分区表恢复才弄好的。
装好以后,激活,就不说了。不纯洁的镜像大概也会预装数个应用,先全删了。后面有需要再装。预装的应用由于版本的问题,一般都是需要更新的。而且鬼知道装到了哪里,索性先全卸了。
win10装好了,其他的细节就不多说了。
有什么问题可以留言询问,后面有空了我再完善细节。
三、在Windows10中安装Linux子系统
这里我一开始是搜索CSDN和百度上的教程,但搜到的教程都已经过期了,很多步骤都不对。这里我的建议是:
直接去官方看安装教程
我的教程也会过期,所以这里直接给出官方地址。
安装wsl: https://docs.microsoft/en-us/windows/wsl/install-win10
手动安装WSL(适合微软商店不可用):https://docs.microsoft/en-us/windows/wsl/install-manual
WSL:Windows Subsystem for Linux
之前使用WSL1,编译没有成功。但是网上看到有别人编译成功了。不过现在出了WSL 2,据说是一个完整的Linux内核,相比1有很大的进步,看下面是官方的比较,所以我们升级2再试试:
https://docs.microsoft/en-us/windows/wsl/compare-versions
Comparing features
Feature | WSL 1 | WSL 2 |
---|---|---|
Integration between Windows and Linux | ✅ | ✅ |
Fast boot times | ✅ | ✅ |
Small resource foot print | ✅ | ✅ |
Runs with current versions of VMware and VirtualBox | ✅ | ✅ |
Managed VM | ❌ | ✅ |
Full Linux Kernel | ❌ | ✅ |
Full system call compatibility | ❌ | ✅ |
Performance across OS file systems | ✅ | ❌ |
然后如果我们之前已经下载了WSL 1,首先要删掉之前的WSL 1,安装WSL2:
win10 1903版本之后无法使用lxrun命令,有两种方法删除子系统:
1. wslconfig /l 查看要删除的子系统名称,例如Ubuntu-18.04,wslconfig /unregister Ubuntu-18.04即可删除
2. 手动删除
PowerShell:
rm -Recurse $env:localappdata/lxss/
Cmd:
DEL /S %localappdata%\lxss\
我是直接使用上面的wslconfig /unregister Ubuntu-18.04就删掉了。
下面开始安装WSL教程:
之前提供了手动下载的方法,WSL2貌似可以直接使用微软商店。如果你的微软商店不可用,可以看下面的手动安装教程。
第一步: - 使能Window子系统
以管理员权限运行一个Power Shell,输入如下命令:
PowerShellCopy
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
第二步: - 更新到WSL 2
WSL 2需要满足几点前提条件:
系统版本需要满足 x64xit: Version 1903 或者更高版本, with Build 18362 or higher.
查看自己版本的方法:
win+R,输入winver。
简单的说,更新版本到1903以后,就到WSL 2了。
第三步 - 使能虚拟特性
在安装WSL 2之前,必须使能“虚拟机特性”:
以管理员权限运行 PowerShell执行下面的命令:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
完成之后,重启。重启完成后你的机器就安装了WSL并且更新到WSl 2了。
第四步 - 下载WSL2 Linux内核更新包(如果是ARM64要下对应的版本)
1. 下载最新的包:
WSL2 Linux kernel update package for x64 machines
2. 执行上面第1步下载的更新包。
安装完成。
第五步 - 设置WSL 2作为你的默认版本
以管理员权限运行PowerShell,并输入如下命令。这个命令的作用是设置WSL 2作为安装新的Linux的默认版本。
wsl --set-default-version 2
第六步 - 安装你的Linux发行版本
注意,这部分可以使用微软商店,如果微软商店不可用,就用下面的手动安装教程。
打开微软商店选择喜欢的Linux发行版:
下面给出官网给出的一些常用版本,我下的是Ubuntu 18.04.点击链接会自动打开微软商店,需要有可用的微软账户。
- Ubuntu 16.04 LTS
- Ubuntu 18.04 LTS
- Ubuntu 20.04 LTS
- openSUSE Leap 15.1
- SUSE Linux Enterprise Server 12 SP5
- SUSE Linux Enterprise Server 15 SP1
- Kali Linux
- Debian GNU/Linux
- Fedora Remix for WSL
- Pengwin
- Pengwin Enterprise
- Alpine WSL
如果微软商店不可用,或者不想用,也可以手动下载Linux发行版本,如下
手动安装教程:
https://docs.microsoft/en-us/windows/wsl/install-manual
选择想要的版本,下载,安装。
简单的一句话概括:下载你喜欢的Linux发行版的安装包,安装之。(在WSL1中需要把下载的这个放到希望成为根目录的地方安装,WSL2中直接安装就行,WSL1需要注意:
进入下载的文件所在的目录,这个目录也是你未来Linux系统的根目录。所以尽量避免目录路径太深,以及包含中文。虽然我也不知道包含中文有什么问题,不过能免则免吧)。
我选择了Ubuntu18.04.然后进入命令行,用cd命令进入到这个目录,执行下面的命令:
Add-AppxPackage .\app_name.appx
Add-AppxPackage是win10的一个程序,这条命令直接调用。后面那个.\app_name.appx是你自己下载的发行版的名字,要注意替换成你自己上一步下载的那个文件。
最后再强调一下:这个目录,会成为你Linux系统中的根目录。
装好以后,在终端中输入命令bash,即可进入Linux系统,无缝切换,完美。好了,你已经进入Linux世界了,就是这么简单。
这里可能会有一些出入,手动那部分是上次WSL 1的时候写得,WSL2直接用的微软商店。
第七步 - 启动Linux
WSL 1中的启动方法是在命令行中输入bash。WSL 2则是运行安装的那个发行版本。比如我的是Ubuntu18.04,可以在程序里找到,也可以在微软商店里找到。当然也可以使用命令行来启动,在命令行中输入ubuntu1804,就会启动Linux内核了。这个命令具体会依据你安装的发行版而变化。
这里遇到一个问题:
使用WSL2出现“参考的对象类型不支持尝试的操作”的解决方法
这也是我遇到的问题,直接引用一下:
========源地址:https://blog.csdn/weixin_43347283/article/details/107006275===================
问题:
参考的对象类型不支持尝试的操作。(The attempted operation is not supported for the type of object referenced.)
解决方法:
1. 临时解决方案(不推荐):
以管理员身份运行CMD,输入:
netsh winsock reset
重启计算机即可修复。
2. 比较长期解决的方案(推荐):
(使用到目前,仍未出现问题)
(1)下载此软件:
www.proxifier/tmp/Test20200228/NoLsp.exe
(因需要梯子访问下载,有些朋友不方便,所以我上传到百度云分享在这里:)
(链接:https://pan.baidu/s/1bVZ0OXZPxEt8l1IHYaFK3A ,提取码:vjge)
(2)管理员身份运行CMD输入:
NoLsp.exe C:\windows\system32\wsl.exe
- 1
请自行注意NoLsp.exe程序的位置,以及你的wsl.exe位置。
产生原因和解决方法分析:
代理软件和wsl2的sock端口冲突,使用netsh winsock reset重置修复。
Proxifer开发人员解释如下:
如果Winsock LSP DLL被加载到其进程中,则wsl.exe将显示此错误。最简单的解决方案是对wsl.exe使 用WSCSetApplicationCategory
WinAPI调用来防止这种情况。在后台,该调用在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\AppId_Catalog中为wsl.exe创建一个条目。
这将告诉Windows不要将LSP DLL加载到wsl.exe进程中
上述解决方案来自于:
1.https://github/microsoft/WSL/issues/4177
2. https://answers.microsoft/zh-hans/insider/forum/all/wsl2%E5%AE%89%E8%A3%85kali/b6dd4c62-1130-4a7c-9462-1e9e5f38dab2?auth=1
知乎回答可见以下链接,也是本人:
https://zhuanlan.zhihu/p/151392411
========源地址:https://blog.csdn/weixin_43347283/article/details/107006275===================
下面应该就可以正常运行Linux子系统了。
首次启动会让你设置一个用户,我是直接敲回车。进入默认会使用Root账户。有的人可能不太习惯登录就是root账户,可以通过
useradd 【用户名】添加一个账户,然后在PowerShell中使用命令修改默认登录的账户。
useradd的用法:https://wwwblogs/zknublx/p/9360821.html
设置默认的登录用户:
新版本lxrun不能用了,换成了WSLConfig。
比如说我先用root登录了,然后用useradd adminabc 添加了一个账户。
然后关掉WSL,在管理员权限下配置WSL默认的登录账户为上面添加的这个adminabc,这样会有一个home文件夹,而且避免rm / * -rf之类的恐怖操作。执行下面的命令:
ubuntu1804 config --default-user grf123
ubuntu1804 config --default-user adminabc
主要是这个config的参数,如果你安装了其他的发行版,记得改哦。
如果大家发现摁Tab不能补全命令,记得执行一下bash哦,要知道,我们平时常用的其实是在bash里面,跟原始的终端是不一样的。
安装好之后,进入Ubuntu,根目录是位于这个目录,找了好久:
C:\Users\Administrator\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState
默认安装完成后,Linux系统是位于系统盘,如果看上面的目录可以看到是一个虚拟硬盘,可以扩大,但是不好缩小。
所以就搜了一下,怎样修改安装目录,让它可以安装到空间比较大的盘里去。
原文地址:https://blog.csdn/w851685279/article/details/108904106?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~sobaiduend~default-1-108904106.nonecase&utm_term=wsl2%E6%94%B9%E5%8F%98%E5%AE%89%E8%A3%85%E4%BD%8D%E7%BD%AE&spm=1000.2123.3001.4430
1. 查看已安装的linux发行版本
wsl -l --all -v
2. 导出分发版为tar文件到d盘
wsl --export Ubuntu-20.04 d:\wsl-ubuntu20.04.tar
3. 注销当前分发版
wsl --unregister Ubuntu-20.04
4. 重新导入并安装WSL在D盘
wsl --import Ubuntu-20.04 d:\wsl-ubuntu20.04 d:\wsl-ubuntu20.04.tar --version 2
5. 设置默认登陆用户为安装时用户名
ubuntu2004 config --default-user USERNAME
6. 删除wsl-ubuntu20.04.tar
del d:\wsl-ubuntu20.04.tar
好了,现在就进入Linux的世界了,首先开始配置源吧。
四、配置Linux更新源
不要以为这一段不重要,实际上Linux子系统的源跟我们平常配置的不是完全相同。为了安装一个g++我也是试了好几个源。阿里和阿里的源之间还有微小的不同。这不同就体现在一个能安装g++一个装不上。
这里直接给出我最后安装上g++的源:
deb http://mirrors.aliyun/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun/ubuntu/ bionic-backports main restricted universe multiverse
节省大家时间。
然后sudo apt update之类的我就不细说了。
五、尝试编译Android 7.
为什么选择android 7呢,因为我之前对7比较熟悉,而且买的书也是用的这个版本。所以先尝试7.当然最终我并没有成功编译出来,不过把遇到的问题和解决方法做个记录,供大家参考吧。
首先是获取Android源码,由于众所周知的原因,使用清华源的:
https://mirror.tuna.tsinghua.edu/help/AOSP/
这里贴一下清华镜像的说明:
参考 Google 教程 https://source.android/setup/build/downloading, 将 https://android.googlesource/
全部使用 https://aosp.tuna.tsinghua.edu/
代替即可。
由于使用 HTTPS 协议更安全,并且更便于我们灵活处理,所以强烈推荐使用 HTTPS 协议同步 AOSP 镜像。
由于 AOSP 镜像造成CPU/内存负载过重,我们限制了并发数量,因此建议:
- sync的时候并发数不宜太高,否则会出现 503 错误,即
-j
后面的数字不能太大,建议选择4。 - 请尽量选择流量较小时错峰同步。
- 2017-08-28 : 更新镜像大小信息
- 2016-06-24 : 关闭 git:// 协议,仅支持 HTTPS
- 2016-04-03 : 删除每月初始化包中的冗余内容,使用方法更新
- 2015-12-21 : 增加每月初始化包,少量修正文档错误
- 2015-10-13 : 修复上游替换文档错误
- 2015-10-13 : 修复次级镜像文档错误
- 2015-10-09 : 恢复 git://aosp.tuna.tsinghua.edu/aosp/ 访问
- 2015-10-08 : 镜像地址更新为 https://aosp.tuna.tsinghua.edu/ (结尾没有/android)
如果需要某个版本的android代码,使用如下命令即可:
repo init -u https://aosp.tuna.tsinghua.edu/platform/manifest -b android-4.0.1_r1
这个-b的列表,大家可以参考“源代码标记和列表”网站,我这里给列一下:
https://source.android/source/build-numbers#source-code-tags-and-builds
细分版本 | 分支 | 版本 | 支持的设备 |
---|---|---|---|
OPR5.170623.007 | android-8.0.0_r17 | Oreo | Nexus 6P |
OPR4.170623.009 | android-8.0.0_r16 | Oreo | Nexus 5X |
OPR3.170623.008 | android-8.0.0_r15 | Oreo | Pixel XL、Pixel |
OPR1.170623.027 | android-8.0.0_r13 | Oreo | Pixel XL、Pixel、Pixel C |
OPR6.170623.021 | android-8.0.0_r12 | Oreo | Nexus Player |
OPR6.170623.019 | android-8.0.0_r11 | Oreo | Nexus 6P |
OPR4.170623.006 | android-8.0.0_r10 | Oreo | Nexus 5X |
OPR3.170623.007 | android-8.0.0_r9 | Oreo | Pixel XL、Pixel |
OPR1.170623.026 | android-8.0.0_r7 | Oreo | Pixel XL、Pixel、Pixel C |
OPR6.170623.013 | android-8.0.0_r4 | Oreo | Nexus 5X、Nexus 6P |
OPR6.170623.012 | android-8.0.0_r3 | Oreo | Pixel XL、Pixel |
OPR6.170623.011 | android-8.0.0_r2 | Oreo | Pixel XL、Pixel |
OPR6.170623.010 | android-8.0.0_r1 | Oreo | Pixel C |
NZH54D | android-7.1.2_r33 | Nougat | Pixel XL、Pixel |
最新的应该已经到了android11,不过这个网站还没更新,之后我再更新一下。我先选7.1的版本:
repo init -u https://aosp.tuna.tsinghua.edu/platform/manifest -b android-7.1.2_r33
注意:在repo sync的时候,可能由于网络原因,经常会有错误:
repo sync的时候回报这个错误,原因是该路径下的.git文件没有下载完成。
Checking out projects: 88% (465/528) platform/prebuilts/clang/host/darwin-x86error: Cannot checkout platform/prebuilts/clang/host/linux-x86: ManifestInvalidRevisionError: revision refs/tags/android-7.1.2_r33 in platform/prebuilts/clang/host/linux-x86 not found
由于repo sync很容易受到网络影响而失败,即使是国内的源也可能会出现失败,所以大家多sync几次,直到出现明确告诉你,sync成功了,再开始编译。凡是有报错的都多sync几遍。
Fetching projects: 100% (529/529), done.
Checking out files: 100% (8484/8484), done.orm/prebuilts/sdkChecking out files: 2% (242/8484)
Checking out files: 100% (539/539), done.tform/system/coreChecking out files: 28% (154/539)
Checking out files: 100% (421/421), done.tform/system/tpmChecking out files: 18% (77/421)
Checking out files: 100% (15774/15774), done.m/test/vtsChecking out files: 44% (6985/15774)
Checking out files: 100% (25/25), done.latform/tools/external/fat32libChecking out files: 32% (8/25)
Checking out projects: 100% (528/528), done.
repo sync has finished successfully.
repo sync has finished successfully,这样就完全sync了代码了。不放心可以再sync一次。然后再开始编译。我之前有几次就是其实没有sync完成, 就开始编译,各种莫名其妙的错误。
解决方法就是进入这个目录,执行repo sync .让repo 单独再sync一下当前目录即可。最后面是有一个“.”的参数,表示同步当前目录。总之一定要注意,要完完整整的sync好代码,再开始进行编译工作。
这里给出一个编译指导的网站:
https://developer.sony/develop/open-devices/guides/aosp-build-instructions/#build-aosp-nougat-7-1
其实应该第一时间查看这类网站的,我也是遇到问题解决不了到处搜索才找到的这个网站,这里先放出来。有不知道怎么编译Android的,先看下上面相对比较正规的文档,一步一步照着做吧。
这里我copy一下android 7的编译步骤:
To prevent errors generated by having the wrong version of Java installed on your computer, we will start by removing any conflicting Java version and adding the correct version. Java 8 is needed to build Android 7.x.x.
(人话:为了避免JAVA版本导致的问题,编译Android 7.x.x的版本需要Java 8的环境,而且要open-jdk,与早期版本不同。简单的说,下面的步骤先把已有的java给清除了,再按照open-jdk8)
- On your computer: In a terminal window, enter the following command:
sudo apt-get purge openjdk-* icedtea-* icedtea6-*
- A guide will appear on the screen. Follow the instructions to remove Java.
- Once Java is removed, install the correct version of Java by entering the following commands in a terminal window:
sudo apt-get update sudo apt-get install openjdk-8-jdk java -version
You should now see something similar to the following in your terminal window:
java version "1.8.0_91" OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-0ubuntu4~14.04-b14) OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)
Java环境装好了,还要安装编译所需要的各种工具库,有的能装成功,有的装不成功,有的需要更新源,有的需要找替代品,自己搜一下吧。
sudo apt-get install bison g++-multilib git gperf libxml2-utils make zlib1g-dev:i386 zip liblz4-tool
编译的步骤就不多说了。编译的时候我还遇到一些问题:
有一个提示是:
/bin/bash: prebuilts/misc/linux-x86/bison/bison: cannot execute binary file: Exec format error
看起来像是无法执行这个prebuilt目录下的bison,我进去执行发现国真不行。原因是这个应用是32位程序,64位下运行需要安装运行库。猜测就是上面那个带386的东西。最后是在这里找到了解决方法:
https://wwwblogs/JiuHuan/p/10073632.html
现在能够运行32位程序了。然后又编译,又报错,找不到好的解放办法,我觉得Linux子系统跟原生还是有些差距吧。这个先放着,我去试试编译android 10看看。
目前编译android 7的进展就到这里了,找不到好的解决办法,如果有大神知道怎么回事,还请点拨一下。
六、尝试编译android 10
我想10毕竟新一些,没准一些过时的东西已经不用了,说不定能编的过呢。过了再更新这个教程。
版权声明:本文标题:Win10 Linux子系统编译Android系统源码 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1729149255h1323869.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论