xavier交叉编译环境搭建 WSL1+VScode版本
我写下这份文档主要是为了记录下我搭建该平台的整个过程,可能有错误,可能有遗漏。樱花散落的道路写于 2021/6/3
目录
1.使用平台说明
首先说明下我当前使用的平台,是工作用的 Thinkpad T14 Windows10 20H2(19042.985),其实在纯Ubuntu18.04LTS系统上是最理想的选择,也是官方推荐的平台,但为了工作需要,我需要频繁切换系统,非常麻烦,故萌生了搭建WSL1+VScode的开发环境的想法。
2.WSL1配置
该段落可以参考官方文档 注意由于我使用的是WSL1请不要参照WSL2的部分
1)启用适用于 Linux 的 Windows 子系统
需要先启用“适用于 Linux 的 Windows 子系统”可选功能,然后才能在 Windows 上安装 Linux 分发。
方法1:使用PowerShell
以管理员身份打开 PowerShell 并运行:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
方法2:在Windows功能中启用
如下图所示:
2)打开开发人员模式
如下图所示
2)安装Ubuntu18.04LTS的Linux分发
安装时有两种方案,方案1较为简单,但是安装位置无法更改,只能安装在系统所在的盘区,如果你有足够的系统分区空间可以选择,否则请选择方案2
方法1:使用MIcrosoft store 进行安装
方法2:手动下载适用于 Linux 的 Windows 子系统发行版包
直接下载链接: https://aka.ms/wsl-ubuntu-1804
下载完成后将该文件后缀改为zip格式,在合适的位置解压(建议在全英文目录下),双击ubuntu1804.exe进行安装并设置好 用户名 和 密码 即可,可参考文档
tips:忘记密码,可参考文档
如果忘记了 Linux 分发版的密码:
请打开 PowerShell,并使用以下命令进入默认 WSL 分发版的根目录:
wsl -u root
如果需要在非默认分发版中更新忘记的密码,请使用命令:
wsl -d Debian -u root
,并将Debian
替换为目标分发版的名称。在 PowerShell 内的根级别打开 WSL 发行版后,可使用此命令更新密码:
passwd <WSLUsername>
,其中<WSLUsername>
是 DISTRO 中帐户的用户名,而你忘记了它的密码。系统将提示你输入新的 UNIX 密码,然后确认该密码。 在被告知密码已成功更新后,请使用以下命令在 PowerShell 内关闭 WSL:
exit
2.在WSL中配置交叉编译环境
该段落可以参照文档及相关博客资料:
2.Jetson Linux Driver Package Toolchain
4.玩转NVIDIA Jetson AGX Xavier(10)— L4T内核kernel编译之Linaro 交叉编译环境搭建
5.玩转NVIDIA Jetson AGX Xavier(13)— L4T内核kernel编译之在x86 PC上交叉编译jetson kernel
1)修改WSL Ubuntu源为清华源,参考
# 修改WSL Ubuntu源为清华源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
# 更新源和软件
sudo apt update
sudo apt dist-upgrade
或者修改WSL Ubuntu源为阿里源,参考
# 修改WSL Ubuntu源为阿里源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo sed -i 's/security.ubuntu/mirrors.aliyun/g' /etc/apt/sources.list
sudo sed -i 's/archive.ubuntu/mirrors.aliyun/g' /etc/apt/sources.list
# 更新源和软件
sudo apt update
sudo apt dist-upgrade
2)安装常用软件
sudo apt install vim screen git tree -y
3)安装gcc编译环境
sudo apt install build-essential bc -y
4)安装 libpython2.7 缺失文件(由经验得出),参考
sudo apt install libpython2.7 libatlas3-base -y
5)下载编译工具链
#创建工具链安装的目录
mkdir l4t-gcc
cd l4t-gcc
#下载编译工具链
wget http://releases.linaro.org/components/toolchain/binaries/7.3-2018.05/aarch64-linux-gnu/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
#解压工具链
tar xf gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu.tar.xz
6)下面设置交叉编译工具链环境变量
export CROSS_COMPILE=$HOME/l4t-gcc/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
到目前为止,交叉编译工具链已经配置完成
3.(可选)安装Windows Terminal
tips:windows terminal 启动目录修改
希望启动后在家目录可将启动目录修改为://wsl$/Ubuntu-18.04/home/用户名
4.安装并配置VScode
该部分可参考如下博客:
1)官方网站下载VScode,并安装(注意,不要使用管理员权限运行)
直接下载链接:https://code.visualstudio.com/sha/download?build=stable&os=win32-x64-user
2)安装三个插件:
① Chinese (Simplified) Language Pack for Visual Studio Code
② Remote - WSL
③ C/C++
④ Remote Development
3)修改launch.json文件,如下所示为我现在的配置,仅供参考
点击**“调试 ”->“打开配置”,然后选择“ C++(GDB/LLDB)”选项,然后会在 .vscode文件夹下生成launch.json**文件
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "gcc - 生成和调试活动文件",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}",
"args": [],
"stopAtEntry": true,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
//"preLaunchTask": "make 生成项目",
"miDebuggerPath": "/home/lrp/l4t-gcc/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gdb",
"miDebuggerServerAddress": "192.168.1.40:2345"
}
]
}
①、name:调试的项目名
②、program:需要调试的应用程序可执行文件路径。
③、cwd:需要调试的应用程序源码路径。
④、miDebuggerPath:此项需要手动添加,用于指定所使用的交叉编译器 gdb路径。
⑤、miDebuggerServerAddress:此项需要手动添加,远程 gdbserver服务器地址,也就是开发板地址
4)在开发板中,启动gdbserver并执行要调试的执行文件
gdbserver 192.168.1.22:2345 gdbtest //启动开发板上的 gdbserver
192.168.1.22 为指定的ubuntu主机ip
2345为要开启调试的端口
gdbtest为调试的可执行文件,一定要带上gdbtest的路径!!注意:生成时要带上 -g
5.自动化发送调试文件并打开调试的脚本
需要先安装 expect:
sudo apt install expect
脚本(示例):
#!/bin/bash
# 用scp命令发送文件到目标开发板
expect -c"
spawn scp -r test nvidia@192.168.1.40:/home/nvidia/linshi/
expect {
\"assword\" {set timeout 20; send \"nvidia\r\";}
\"yes/no\" {set \"yes\r\"; exp_continue;}
}
expect eof"
# 用ssh登录目标开发板并执行gdbserver供远程调试
expect -c"
spawn ssh nvidia@192.168.1.40 \"cd ~/linshi;gdbserver 192.168.1.22:2345 test \"
expect {
\"assword\" {set timeout 20; send \"nvidia\r\";}
\"yes/no\" {set \"yes\r\"; exp_continue;}
}
expect eof"