使用WSL搭建嵌入式开发环境

使用WSL搭建嵌入式开发环境

一、启用虚拟机平台和 Linux 子系统功能

Windows 10 的1903版本以上支持WSL(windows下的Linux子系统)

方法一:先在设置(设置->更新和安全->开发者选项)中开启开发人员模式,然后在控制面板中(控制面板->程序和功能->启动或关闭Windows功能)启用适用于 Windows 的 Linux 子系统功能

<img src="C:\Users\22920\Desktop\linux嵌入式\img\Snipaste_2020-01-03_12-38-36.png" style="zoom:50%;"

方法二:以管理员权限启动 PowerShell,然后输入以下命令启用虚拟机平台

Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

在以上每一步命令执行完之后,PowerShell 中可能会提示你重新启动计算机。按“Y”可以重新启动。

二、安装一个 Linux 发行版

打开微软商店应用,在搜索框中输入“Linux”然后搜索,你可以看到搜索结果中有很多的 Linux 发行版可以选择。选择一个你喜欢的 Linux 发行版本然后安装:

搜索:
安装

安装
选择ubuntu:

选择ubuntu

注意:在商店中的安装并没有实际上完成 Linux 子系统的安装,你还需要运行一次已安装的 Linux 发行版以执行真正的安装操作。

运行安装

查看系统信息

# 安装screenfetch
sudo apt install screenfetch
# 启动sceenfetch
screenfetch

三、配置ubuntu开发环境

(1) 更改软件包源为阿里云

# 解决访问国外源失败的问题
sudo sed -i "s/archive\.ubuntu\./mirrors\.aliyun\./g" /etc/apt/sources.list
sudo apt update

(2)安装交叉编译的工具链:

交叉编译

​ 交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台(X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放到ARM CPU平台上才能运行,虽然两个平台用的都是Linux系统。

何为交叉编译环境

​ 搭建交叉编译环境,即安装、配置交叉编译工具链。在Ubuntu环境下编译出嵌入式Linux系统所需的操作系统、应用程序等,然后再上传到目标机上。

​ 交叉编译工具链是为了编译、链接、处理和调试跨平台体系结构的程序代码。对于交叉开发的工具链来说,在文件名称上加了一个前缀,用来区别本地的工具链。例如,arm-linux-表示是对arm的交叉编译工具链,arm-linux-gcc表示是使用gcc的编译器。除了体系结构相关的编译选项以外,其使用方法与Linux主机上的gcc相同,所以Linux编程技术对于嵌入式同样适用。不过,并不是任何一个版本拿来都能用,各种软件包往往存在版本匹配问题。例如,编译内核时需要使用arm-linux-gcc-4.3.3版本的交叉编译工具链,而使用arm-linux-gcc-3.4.1的交叉编译工具链,则会导致编译失败。

gcc和arm-linux-gcc的区别就是gcc是linux下的C语言编译器,编译出来的程序在本地执行,而arm-linux-gcc用来在linux下跨平台的C语言编译器,编译出来的程序在目标机(如ARM平台)上执行,嵌入式开发应使用嵌入式交叉编译工具链。

注意:工具是32位的,系统是64位的,需要安装32位的库

(3)安装32位的库和宿主的工具

# 宿主开发环境
sudo apt install -y build-essential
# 32位库
sudo apt install -y lib32ncurses5 lib32z1
sudo apt install -y lib32stdc++6

(4)安装编译器:

# 安装gcc
sudo apt install gcc
# 安装arm-linux-gcc
sudo apt-get install gcc-arm-linux-gnueabihf
# 安装arm-linux-g++
sudo apt-get install g++-arm-linux-gnueabihf

如果需要安装老版本的,也可以手动下载压缩包安装,这里不介绍,请自行解决。

如果需要卸载编译器:

# 卸载gcc
sudo apt-get remove gcc
# 卸载arm-linux-gcc
sudo apt-get remove gcc-arm-linux-gnueabihf
# 卸载arm-linux-g++
sudo apt-get remove g++-arm-linux-gnueabihf

如果出现

E:Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

那么可以运行以下代码修复依赖

sudo apt-get update  --fix-missing 

(5)检查安装是否完成

# 查看gcc版本
gcc -v
# 查看arm-linux-gcc版本
arm-linux-gnueabihf-gcc -v
# 查看arm-linux-g++版本
arm-linux-gnueabihf-g++ -v

(6)为Ubuntu开启32位支持

sudo dpkg --add-architecture i386

退出所有的WSL的bash生效

(7)使用VS code编辑代码

使用VS code编译一个C文件,在工作台打开终端窗口(①ALT+F12查看->终端

使用一下命令进入WSL,再进入C文件目录

wsl
cd /mnt/c/Users/22920/Desktop/Hello/C/   # 更改为你的目录

将C文件用gcc编译并在本机运行

gcc hello.c -o hello
./hello

将C文件用arm-linux-gnueabihf-gcc编译并在嵌入式上运行(本机无法运行)

vscode

(8)将文件传送到嵌入式上运行

可以使用MobaXterm软件连接板子,然后把文件传送过去(直接拉过去就ok啦)

在新版本中微软提供了新的WSL2,但是比较 WSL 2 和 WSL 1,WSL2的跨 OS 文件系统的性能没有WSL好,这里又经常需要交叉编译,所以建议还是使用WSL。

参考资料

[1] 使用Windows的Linux子系统搭建嵌入式开发环境

​ https://www.cnblogs.com/Johness/p/use-wsl-build-cross-compile-environment.html

[2] WSL 和 WSL2 简单对比

​ https://www.v2ex.com/amp/t/587642/2

[3] 如何在 Windows 10 中安装 WSL2 的 Linux 子系统

​ https://blog.csdn.net/WPwalter/article/details/101508601Ubuntu

[4] 安装arm-linux-gcc编译器

​ https://blog.csdn.net/Utotao/article/details/86604733

[5] Ubuntu系统下arm-linux-gcc交叉编译环境搭建过程

​ https://blog.csdn.net/gsh_hello_world/article/details/70237123

[6] ARM交叉编译工具链分类说明

​ https://blog.csdn.net/qq_16149777/article/details/82349868

[7] 3分钟看懂gcc、arm-Linux-gcc和arm-elf-gcc的组成及区别

​ https://blog.csdn.net/eagle11235/article/details/54620203

[8] 微软官方文档:适用于 Linux 的 Windows 子系统文档
https://docs.microsoft.com/zh-cn/windows/wsl

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值