wsl2-ubuntu20编译Lineage17(Android10)

news2024/11/19 6:16:43

WSL2安装Ubuntu20

wsl2安装

安装Ubuntu20

wsl.exe --list --online 列出当前支持的所有系统,不过这个命令是从https://raw.githubusercontent.com/microsoft/WSL/master/distributions/DistributionInfo.json来获取,所以有很大概率会失败。失败就不看了,编译使用的系统一般都是ubuntu

wsl --install Ubuntu-20.04 安装ubuntu20,接着等待提示,输入用户名和两次密码
在这里插入图片描述

更改sudo不需要密码

sudo chmod +w /etc/sudoers 给该文件增加可写属性

sudo vim /etc/sudoers 编辑文件,在最后一行增加kanade ALL=(ALL) NOPASSWD: ALL

其中kanade是我的用户名,你需要换成你刚才装系统指定的,如果不在最后一行增加的话,可能会被后面的覆盖掉不生效

sudo chmod -w /etc/sudoers 恢复该文件不可写

换源和更新软件包

sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak
sudo vim /etc/apt/sources.list 编辑该文件

清华Ubuntu软件源 ubuntu版本选择20.04,如何将下面的内容复制进来

sudo apt update && sudo apt upgrade -y 更新软件包

安装gui

我们编译系统肯定是先编译x86_64位的,在电脑上跑成功了,在编译手机的。所以是需要图形化界面运行emulator avd的

  1. 禁用WSLg : 编辑Windows的c:\users\用户名\.wslconfig文件(不存在创建它),增加下面的内容,如何关闭wsl,重启电脑
[wsl2]
guiApplications=false
  1. sudo apt install tasksel 这个包就是列举出所有的桌面环境让你选择安装的
  2. sudo tasksel
    空格是选中,上下键切换,tab切到OK键。这里我就勾选Ubuntu desktop,其他的也不知道是啥
    在这里插入图片描述
  3. sudo apt install tigervnc-standalone-server 安装vncserver
  4. vncpasswd sudo -H vncpasswd sudo -H -u gdm vncpasswd 设置vnc的密码,文章说要设置三次(当前用户、root和gdm)。输入两次密码后会提示要不要设置只能看不能操作的密码,选n跳过就行
  5. sudo mv /usr/bin/Xorg /usr/bin/Xorg_old sudo vim /usr/bin/Xorg_new 备份旧配置文件和编辑新配置文件
#!/bin/bash
for arg do
  shift
  case $arg in
    # Xvnc doesn't support vtxx argument. So we convert to ttyxx instead
    vt*)
      set -- "$@" "${arg//vt/tty}"
      ;;
    # -keeptty is not supported at all by Xvnc
    -keeptty)
      ;;
    # -novtswitch is not supported at all by Xvnc
    -novtswitch)
      ;;
    # other arguments are kept intact
    *)
      set -- "$@" "$arg"
      ;;
  esac
done

# Here you can change or add options to fit your needs
command=("/usr/bin/Xvnc" "-geometry" "1920x1080" "-PasswordFile" "${HOME:-/root}/.vnc/passwd" "$@")

systemd-cat -t /usr/bin/Xorg echo "Starting Xvnc:" "${command[@]}"

exec "${command[@]}"

sudo chmod 0755 /usr/bin/Xorg_new
sudo ln -sf Xorg_new /usr/bin/Xorg
7. sudo vim /etc/wsl.conf 编辑配置,开启systemd

[boot]
systemd=true
  1. sudo vim /etc/gdm3/custom.conf 取消注释,并修改为你的用户名
AutomaticLoginEnable=true
AutomaticLogin=[your username without the brackets]
  1. wsl --shutdown 关机如何重启

注意事项

开启systemd之后,wsl就需要执行正常的关机(shutdown now|poweroff)或者在gui里面点关机。如何再执行wsl --shutdown, 如果直接执行wsl --shutdown可能会造成系统损坏。不过我也没试,反正我每次关机都执行shutdown now

vnc客户端

我用的是realvnc,也就是VNC viewer。其他几个应该也差不多

地址填:127.0.0.1:5900
密码填vncpasswd设置的密码

安装7z

sudo apt install p7zip-full p7zip-rar

主要是方便, 压缩7z a ,解压7z x ,大部分格式都支持,不用记tar的参数

安装Android studio

安装它的目的只是为了确认avd可以正常开启,排除到时候自己编译的镜像起不来是环境的问题。安装就不赘述了,下载文件解压放到一个目录就能用了

随便创建一个avd,运行看正不正常

wsl和电脑互传文件

https://blog.csdn.net/henryhu712/article/details/115060211

禁止锁屏

https://www.jb51.net/os/Ubuntu/747669.html

安装kvm相关包

https://linux.how2shout.com/how-to-install-qemu-kvm-on-ubuntu-22-04-20-04-lts/

编译准备工作

安装依赖

https://source.android.google.cn/setup/build/initializing?hl=zh-cn
sudo apt-get install -y 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

https://wiki.lineageos.org/build_guides.html
sudo apt install -y bc bison build-essential ccache curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev liblz4-tool libncurses5 libncurses5-dev libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev

https://lineage.youd.dev/283946/2/emulator.html
sudo apt install -y bc bison build-essential ccache curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev liblz4-tool libncurses5 libncurses5-dev libsdl1.2-dev libssl-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc yasm zip zlib1g-dev

sudo apt install openjdk-8-jdk 文档说Lineage17依赖jdk1.9,而且源码自带。这个可能不需要安装了

sudo apt install python2 安装完做个链接 sudo ln -s /usr/bin/python2 /usr/bin/python

安装完环境可以做个备份

wsl --export Ubuntu-20.04 Ubuntu-20.04.tar

导入,D:\WSL是指定导入的路径。也就是可以通过导出文件再导入的方式将wsl安装在C盘外。位置任意指定
wsl --export Ubuntu-20.04 D:\WSL Ubuntu-20.04.tar

创建一个vhd磁盘

因为源码文件较大,所以我这里创建一个虚拟磁盘文件来装源码。

我使用的是Hyper-v管理器新建一个磁盘,选固定大小,最好不用动态扩展的。源码大概90G,所以弄个250G的就差不多。

实际我是创建了一个100G的磁盘,因为我可能需要对源码进行修改,有时候哪里改错了就重新复制一份。不过这样的话,编译前需要用Hyper-v管理器对磁盘扩容到250G,然后在wsl里用GParted将增加的150G扩容

说一下为什么不用动态扩展,要选固定大小。性能问题是一个原因,不过差距很小,最大的问题是动态扩展如果文件频繁变动会导致磁盘文件大小无限增加。可以通过压缩回收空间,但很麻烦。举个例子,本来虚拟机磁盘里的文件总共只占了150G,但是外面的磁盘文件.vhdx的大小已经到两百多G了

挂载到wsl

wsl --mount --vhd .\Aosp-git.vhdx --bare

–vhd 后面跟的就是虚拟磁盘的路径,可以在wsl开机前挂载,也可以在开机后挂载。挂载多个磁盘运行多次就可以

卸载磁盘 wsl --unmount .\Aosp-git.vhdx

分区的话,我喜欢用GParted sudo apt-get install gparted,在gui里搜索一下就能看到

创建完分区后创建个文件夹,用mount命令挂载到这个文件夹

repo和git配置

同步源码

https://mirrors.tuna.tsinghua.edu.cn/help/lineageOS/

mkdir LineageOs17
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/LineageOS/android.git -b lineage-17.1

等待完成后需要修改.repo/manifests/default.xml文件内容,需要修改的内容请看上面的网站

修改完之后开始同步源码:repo sync -c -c表示只拉取当前分支

我感觉同步完成后.repo文件夹也没什么用了,因为我也不需要使用repo仓库的啥功能。这样能减少一半的磁盘空间

编译

编译命令

source build/envsetup.sh

lunch lineage_<arch>-eng 最开始肯定先编译x86_64版本的测试是否正常lunch lineage_x86_64-eng

export SKIP_ABI_CHECKS=true 见下面的错误1

mka
在这里插入图片描述

错误1

在这里插入图片描述
https://forum.xda-developers.com/t/help-building-rom-error.3947500/

错误原因不知道,搜遍解决方法只有跳过检查。终端执行export SKIP_ABI_CHECKS=true 再执行mka就能编译成功

运行模拟器

emulator 注意必须在当前终端才能运行,如果更换终端需在执行一遍source build/envsetup.shlunch lineage_<arch>-eng

不出意外的话,模拟器就能正常打开了
在这里插入图片描述

mka sdk_addon 编译avd能使用的包,是一个zip包。和在Android studio下载的System image包结构是一样的。使用的话,先下载一个不包含谷歌框架的x86_64的Android10, 如何将zip包里的内容替换~/Android/Sdk/system-images/android-29/default/x86_64。新建一个模拟器测试看能不能正常启动

参考文章:

  • WSL2 with GUI using Xvnc
  • disable WSLg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/444843.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解忧杂货铺(三):工作相关资源搜集

1、概述 此文档记录一些对自己很有用的小工具或者其他资源的链接 2、资源 2.1 Hightec生成HEX的方法 Hightec生成HEX的方式https://blog.csdn.net/qq_31225611/article/details/113696362 2.2 UML各个图解析 UML图https://blog.csdn.net/qq_35423190/article/details/1250…

ChatGPT: 深入解读OpenAI的语言模型技术

ChatGPT: 深入解读OpenAI的语言模型技术 引言 引言部分旨在介绍ChatGPT是什么&#xff0c;为什么它是近年来最受欢迎的语言模型之一&#xff0c;并概述本文的主要内容。 1.1 简介 ChatGPT是由OpenAI开发的一种基于深度学习技术的对话生成模型。它采用了最先进的自然语言处理技…

python之流程控制练习题(二)

1、计算1~100的和&#xff08;包含1和100&#xff09;2、计算1~6的乘积&#xff08;包含1和6&#xff09;3、计算1~100之间偶数的和&#xff08;包含1和100&#xff09;4、计算1~100之间可以被3又能被5整数的数的个数&#xff08;包含1和100&#xff09;5、使用循环&#xff0c…

Uboot、Linux BSP定制,最小系统移植

目录 一、linux操作系统支持哪些处理器 二、linux支持哪些版本 三、linux支持哪些外设IP 四、 现有操作系统举例 一、linux操作系统支持哪些处理器 目前已经linux SOC有Cortex-A5x2 Cortex-A9x4,Cortex-A53x4&#xff0c;Riscv-v 二、linux支持哪些版本 已经支持的linux版…

氧气与肠道菌群失调

谷禾健康 健康的肠道微生物群特点是氧气含量低&#xff0c;并且存在大型专性厌氧菌细菌群落&#xff0c;这些共生菌通过限制肠道病原体的扩张为宿主提供益处。 那么是什么导致肠道健康走下坡路&#xff0c;是什么原因引起肠道菌群失调&#xff0c;在科学界一直有2种观点&#x…

转化率暴增的秘密,如何使用营销自动化?

我们生活在自动化时代&#xff0c;聪明的公司正在利用技术将手动流程转变为自动流程。营销自动化是指使用软件、插件、人工智能和分析工具来执行常见和重复的营销流程&#xff0c;例如发送电子邮件和为网站访问者部署应用内消息。 而SaleSmartly&#xff08;ss客服&#xff09…

Linux用户的分类与家目录,ls、pwd、cd、mkdir、touch、rmdir、rm指令与选项等

Linux中用户的分类与用户的家目录 在Linux当中&#xff0c;用户的分类只分为两类&#xff0c;一类叫做超级用户root&#xff0c;还有就是其他也就是传说中的普通用户。我们刚刚登进去时&#xff0c;默认所处的目录是***/root或者/home/用户名***&#xff0c;比如说/root, /hom…

deepstream开发学习笔记: 追踪越界

main.cpp 文件解析 1. 创建元素前的准备 GStreamer是一个开源的流媒体框架&#xff0c;用于构建音频和视频流应用程序。它提供了一组库和工具&#xff0c;可以通过它们将多个组件&#xff08;element&#xff09;组合在一起以构建流媒体应用程序。以下是对几个常见组件的简要解…

仅需三步,快速打造指标数据应用

Kyligence Zen 一站式指标平台&#xff0c;致力于通过低代码的使用体验&#xff0c;帮助企业简洁高效地开发指标数据应用&#xff0c;将数据价值转化为业务洞察。 下面我们以零售交易和绩效管理场景为例&#xff0c;一起来看下如何通过简单三步&#xff0c;快速打造指标数据应用…

初始Sentinel

目录 雪崩问题及解决方案 服务保护技术对比 Sentinel介绍和安装 微服务整合Sentinel 雪崩问题及解决方案 微服务调用链路中的某个服务故障&#xff0c;引起整个链路中的所有微服务都不可用&#xff0c;这就是雪崩。 解决雪崩问题的常见方式有四种&#xff1a; 超时处理&…

ubuntu(20.04)-shell脚本(3)-sed-mysqldump

1.sed cmd&#xff1a; sed 选项 ‘指令’ 文件 sed指令保存到文件中&#xff1a;sed 选项 -f 包含sed指令的文件 文件 sed的常用选项&#xff1a; -r&#xff1a;使用扩展正则表达式 -e&#xff1a;它告诉sed将下一个参数解释为一个sed指令&#xff0c;只有当命令行…

day14 信号机制(下)

目录 信号集、信号的阻塞 信号集、信号的阻塞 有时候不希望在接收到信号时就立即停止当前执行&#xff0c;去处理信号&#xff0c;同时也不希望忽略该信号&#xff0c;而是延时一段时间去调用信号处理函数。这种情况可以通过阻塞信号实现。 信号的阻塞概念&#xff1a; 信号…

234:vue+openlayers 加载本地shp数据,在map上显示图形

第234个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers中利用shapefile读取本地的shp数据,并在地图上显示图形。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 文章目录 示例效果安装引用配置方式示例源代码(共143行)相关API参考:专栏…

自然语言处理 —— 03 统计语言模型

一、背景 统计语言模型的理论基础是信源-信道模型,这两个模型都基于马尔可夫假设,即当前的事件只依赖于前面的一些事件。在统计语言模型中,当前的单词只依赖于前面的一些单词,而在信源-信道模型中,接收端只能看到传输过程中的有限的信息,而不知道整个传输过程。信源-信…

ASEMI代理ADI亚德诺AD8638ARJZ-REEL7车规级芯片

编辑-Z AD8638ARJZ-REEL7芯片参数&#xff1a; 型号&#xff1a;AD8638ARJZ-REEL7 偏移电压&#xff1a;3μV 输入偏置电流&#xff1a;1.5 pA 输入失调电流&#xff1a;7 pA 输入电压范围&#xff1a;−0.1~ 3V 共模抑制比&#xff1a;133 dB 输入电阻&#xff1a;22.…

Nuxt3中使用swiper

参考&#xff1a;nuxt3&#xff1a;swiper实现轮播效果_nuxt 使用swiper_snowli的博客-CSDN博客再引入swiper时&#xff0c;尝试了npm 包&#xff1a; swiper、vue-awesome-swiper等&#xff0c;尝试在nuxt3里增加plugin的方式引入&#xff0c;都没有成功&#xff0c;个人感觉应…

材料科学基础名词解释|第二章 晶体缺陷

第二章 晶体缺陷 1、空位形成能&#xff1a;在某一空位周围的原子&#xff0c;它们在靠近空位一侧失去了正常的原子作用力&#xff0c;平衡位置向空位存在的地方移动&#xff0c;引起空位周围晶格畸变&#xff0c;系统能量增高&#xff0c;这部分增高的能量叫做空位形成能。 …

【CSDN周赛】第46期题解

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 本文章收录于专栏 【CSDN周赛】 本篇文章目录 &#x1f30f;一、吃吃吃&#x1f338;题目描述&#x1f338;题解 &#x1f30f;二、n …

论文的总体结构及质量控制

要写出一篇高质量AI领域的论文&#xff0c;首先要搞清楚论文由哪几部分组成&#xff0c;即论文的总体结构。同时&#xff0c;还要了解AI论文的质量评价与质量控制的指标。这样做的目的是为了弄明白AI论文的结构以及什么样的AI论文才是好的论文。 通常一篇AI论文的总体结构主…

React 列表 Keys

列表 & Keys 列表 React 列表可以使用 JavaScript 的 map() 方法来创建。如下&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"UTF-8" /> <title>React demo</title> <script src"https://cdn.static…