系统要求
主机硬件需要支持虚拟化(不会还有不支持硬件虚拟化的电脑吧)。
运行 Windows 10 系统版本 21H2 或者以上版本(我的电脑右键,选择属性查看系统版本号)。
最低的WSL安装要求,官方只要求是 19041 及更高版本,但是为了能体验更完善的USB外设访问功能,建议升级
WSL2的优势
- 彻底重构wls一代,速度比上一代快20%
- 支持原生Docker安装,启动(相当于完整的linux系统)
- win10文件管理器可访问linux系统文件
- 搭配vs code的插件vs remote可以超低延迟、急速开发基于linux系统的开发环境
- 搭配ccache可以超快速完成esp32等常规mcu的编译工作。
- 对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,简单美化了一下):
此时需要给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