如何安装WSL2,安装Ubuntu并搭建Tina Linux编译环境

系统要求

主机硬件需要支持虚拟化(不会还有不支持硬件虚拟化的电脑吧)。
运行 Windows 10 系统版本 21H2 或者以上版本(我的电脑右键,选择属性查看系统版本号)。
最低的WSL安装要求,官方只要求是 19041 及更高版本,但是为了能体验更完善的USB外设访问功能,建议升级

wsl_win10

WSL2的优势

  1. 彻底重构wls一代,速度比上一代快20%
  2. 支持原生Docker安装,启动(相当于完整的linux系统)
  3. win10文件管理器可访问linux系统文件
  4. 搭配vs code的插件vs remote可以超低延迟、急速开发基于linux系统的开发环境
  5. 搭配ccache可以超快速完成esp32等常规mcu的编译工作。
  6. 对USBIP的支持更好,可以更便利的访问主机USB设备

一、安装WSL子系统

1.1 启用WSL子系统功能
以管理员身份打开 PowerShell 工具并运行以下命令。

idism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

1.2 启用“虚拟机平台”
以管理员身份打开 PowerShell 工具并运行以下命令。

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

1.3 设置 WSL 2 为默认值
以管理员身份打开 PowerShell 工具并运行以下命令。

wsl --set-default-version 2

1.4 下载内核更新包并安装
内核更新包链接

1.5 重启系统

二、安装Ubuntu-22.04

可以选择自己喜欢的Ubuntu版本,本教程使用22.04版本(低版本可能在部分应用安装时需要修改命令,选择低版本的请自行搜索教程)

2.1 打开应用商店,搜索 Ubuntu-22.04 并安装

2.2 安装完毕后,打开Ubuntu-22.04并等待安装完毕

2.3 添加常规用户

安装完毕后会提示添加用户名和设置密码,自己输入用户名和密码就可以了

2.4 解压美化配置包

下载附件里的user.tar.gz包,执行以下命令(需要自行替换存储路径把path替换成类似/mnt/c/User/XXXX/Download)
user.tar.gz (2.2 MB)

wsl下,会自动挂载寄主机硬盘到/mnt目录下

tar -xf path/user.tar.gz ~/

如果需要美化VIM的,可以下载vim.tar.gz包,执行以下命令

tar -xf path/vim.tar.gz ~/

2.5 美化后界面截图

bash

vim

三、安装Windows Terminal Preview

3.1 打开应用商店,搜索 Windows Terminal Preview 并安装

3.2 下载附件里的FiraCode字体,并安装到系统中

3.3 打开Windows Terminal Preview ,修改设置

因为powerline-go使用了特殊分隔符号,需要启用支持该分隔符号的字体,这里我们需要修改界面使用的字体。

四、Ubuntu里安装docker

4.1 更换Ubuntu的软件源

在Ubuntu终端里执行以下命令

sudo sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list
sudo sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list

4.2 添加docker源

执行以下命令

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
   "deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
sudo apt update

4.3 安装docker-ce

sudo apt install -y docker-ce

4.4 开启docker服务

sudo service docker start

4.5 给普通用户添加docker运行权限(把当前用户添加到docker组,拥有docker相关权限)

sudo gpasswd -a $USER docker

4.6 关闭终端后重新开启终端,shell会更新用户属性。此时可以使用docker命令了

拉取tina编译环境

docker pull walker2048/tina_env

4.7 运行tina编译容器

docker run -it --name tina_build  \
  --net=host                      \
  --privileged                    \
  -v /mnt/IoT:/mnt                \
  walker2048/tina_env

参数解析:
run 参数: 告诉docker需要创建容器
-it 参数: 创建完毕后自动运行容器时,使用命令行交互方式运行(开启这个参数才能使用命令行交互)
–name tina_build 参数: 告诉docker把这个容器命名为tina_build(后期运行容器需要使用这个)
–net=host 参数:指定容器的网络模式为host模式(和主机同一个网络)
–privileged 参数:特权模式,Linux环境下才有用,开启后可以访问USB设备
-v /mnt/IoT:/mnt 参数:挂载寄主机的/mnt/IoT目录到容器的/mnt目录(都需要使用绝对路径,文件双方共享,可读写)
walker2048/tina_env 参数: 告诉docker使用哪个镜像来创建容器。

进入容器后,命令行提示内容如下(容器默认使用了powerline-go,简单美化了一下):

1_root_bash.png

此时需要给vuser用户添加密码(只需要执行一次,没有密码不能使用login命令切换用户),在容器的命令行输入

passwd vuser

然后就可以用login命令切换到vuser用户了。切换用户后就可以按Tina SDK的说明下载和编译源码了(为什么要切换用户,因为和寄主机子共享了目录,如果寄主机子是Linux环境,用root用户操作会影响寄主机对目录的读写)。保持良好的用户习惯是个好事儿。一般情况下,Linux环境的常规用户ID是1000开始的。repo程序需要调整用户资料,所以只能跟着全志教程自己来。

五、下载tina源码

5.1 设置repo环境

5.1.1 生成ssh key和配置git选项(建议直接在Ubuntu环境内配置好,然后拷贝到docker容器里,可以一套配置多个容器使用)

# 生成ssh key,一路回车
ssh-keygen -t rsa

# 将生成后的 ~/.ssh/id_rsa.pub拷贝到 https://open.allwinnertech.com/#/sdk/0/key 【公钥管理】

# 设置git
git config --global user.email "you@example.com"
git config --global user.name "YourName"

git配置在$HOME/.gitconfig文件,ssh配置文件在$HOME/.ssh目录

5.1.2 在docker容器中配置和安装repo命令(不同厂家的repo命令未必相同,可直接在容器中安装)

# 安装repo,一路yes
git clone ssh://YourName@sdk.allwinnertech.com/git_repo/repo.git
sed -e -i 's#ssh://username#ssh://YourName#' repo/repo
cp repo/repo /usr/bin/
chmod a+x /usr/bin/repo

5.2 在docker容器中使用repo命令下载源码,编译,打包(请把username替换成自己的用户名)
请下载补丁文件:
D1s_Patch.gz (210.5 KB)

mkdir tina-d1-h
cd tina-d1-h
repo init -u ssh://username@sdk.allwinnertech.com/git_repo/D1_Tina_Open/manifest.git -b master -m tina-d1-h.xml
repo sync
repo start tina-stable-v2.1 --all # 全部下载完成之后,创建分支

# 打补丁
cp /root/d1s-nehza-package.tar.gz /sdk/tina-d1-h/
cd /sdk/tina-d1-h/
tar xvf d1s-nehza-package.tar.gz

# 环境设置
source build/envsetup.sh

# 设置目标板:
lunch

# 选择d1s_nezha_nor-tina,生成的固件,使用 PhoeniSuit 直接烧录DC开发板上

# 编译:
make FORCE_UNSAFE_CONFIGURE=1

# 打包
pack

5.3 常用的repo命令

5.3.1 恢复到当前分支最后提交的状态

rm -rf * && repo sync -l

命令解析:删除当前目录下的所有(除了.开头的目录和文件)目录和文件,然后重新使用本地.repo目录中的缓存重建项目文件。(相当于删除文件后所有的git目录进行git checkout操作)

5.3.2 查看repo文件修改状态

repo status


参考资料

  1. 全志服务平台
  2. 使用 WSL 在 Windows 上安装 Linux
  3. 如何在 Windows 10 上安装 WSL 2
  4. Win10 WSL2 安装Docker
  5. powerline-go
  6. 多仓库协同和代码评审 git repo sync
  7. DongshanPI-D1s开发板使用基础文档
1 Like