当前位置: 首页 > news >正文

Windows11 WSL安装Ubntu22.04,交叉编译C语言应用程序

Windows11 WSL安装Ubntu22.04,交叉编译C语言应用程序

    • 前言
    • 一、使用WSL安装ubuntu22.04
      • windows相关设置
      • 使用Microsoft Store安装ubuntu22.04
      • 一些其他设置
        • 将ubuntu22.04文件系统迁移到其他盘
        • 使用Powershell切换ubuntu终端
    • 二、使用交叉编译工具链交叉编译C语言程序
      • 交叉编译工具链
      • 编写C语言程序
      • 上传到开发板上运行
    • 总结
    • 参考连接

前言

WSL可以直接在Windows上使用Linux环境,具有完整的Linux内核,支持更好的文件系统和兼容性。这个的好处是不用安装虚拟机,直接在Windows系统中使用Linux系统。

本篇文章来教大家,如何在windows上安装WSL,交叉编译C语言应用程序。

一、使用WSL安装ubuntu22.04

windows相关设置

第一步,搜索栏搜索启动或关闭windows功能

第二步,点进去,选择Hpyer-VWindows虚拟机监控程序平台适用于Linux的Windows子系统虚拟机平台

勾选后,重新启动完成修改。

使用Microsoft Store安装ubuntu22.04

在微软商店中,搜索ubuntu22.04,

直接获取安装,等待安装完成。

下载完成后,直接打开。

打开后,报以下错误。

在控制台中,输入wsl --update安装适用于Linux的Windows子系统

wsl --update

再次打开ubuntu22.04,输入用户名和密码,此时就进入了wsl创建的ubuntu22.04。此时可以看到ubuntu版本为22.04,Linux内核为6.6。

此时就完成了基本的使用WSL安装Ubuntu22.04。我们就可以直接在windows上直接使用ubuntu22.04了。免去了繁琐的虚拟机Vmware安装ubuntu,开发难度较低。

常用的wsl命令

wsl -l --all -v 		#查看所有WSLwsl -d Ubuntu-22.04		#使用wsl启动ubuntuwsl --shutdown		#停止正在运行的WSL

一些其他设置

将ubuntu22.04文件系统迁移到其他盘

按以下步骤进行即可。

wsl --shutdown			#停止正在运行的WSLwsl -l --all -v				#查看所有WSLwsl --export Ubuntu-22.04 F:\WSL-Ubuntu22.04\Ubuntu-22.04.tar			# 导出到F盘wsl --unregister Ubuntu-22.04		# 注销原来的Ubuntu22.04# 导入ubuntu22.04 到F盘,这个可以自己定义
wsl --import Ubuntu-22.04 F:\WSL-Ubuntu22.04\Ubuntu22.04 F:\WSL-Ubuntu22.04\Ubuntu-22.04.tar --version 2
使用Powershell切换ubuntu终端

使用Windows 启动的终端,和我们日常使用Linux不一样,看着有点别扭。

Windows Powershell 可以切换Ubuntu终端,这样使用起来就和ubuntu一样了。 然后我们还可以看到windows文件夹,出现了我们安装的Ubuntu-22.04,我们可以直接简单拖文件的方式把文件放到Ubuntu22.04系统中。

二、使用交叉编译工具链交叉编译C语言程序

交叉编译工具链

我们需要把交叉编译工具链放到我们使用WSL安装的Ubuntu22.04系统中。下面介绍一种简单的方式,windows和ubuntu22.04互传文件。

安装MobaXterm,打开设置。

导入WSL,建立SSH,即进入ubuntu22.04。

选择安装的Ubuntu22.04,用户名我这里选择使用root,直接以root权限登录,点击ok,进入即可。

这样我们就进入了Ubuntu终端。但是这里要注意的是,和windows终端进入ubuntu不同,使用Mobaxterm连接WSL进入ubuntu,这个相当于ssh连接ubuntu。

我们可以直接通过sftp协议,Mobaxterm中已经集成,直接通过那个红色的小地球,把交叉编译工具链放到自己建的目录中。我这里放到了/root/tools目录。

使用以下命令解压。

tar -zxvf arm-buildroot-linux-gnueabihf_sdk-buildroot.tar.gz		#解压交叉编译工具链

解压完成后,编写脚本设置环境变量,每次打开终端,编写应用程序前,都要运行一次脚本。指定交叉编译工具链的位置。

export PATH=/root/tools/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin:$PATHexport CC="arm-buildroot-linux-gnueabihf-gcc"
export CXX="arm-buildroot-linux-gnueabihf-g++"
export ARCH="arm"
export CROSS_COMPILE="arm-buildroot-linux-gnueabihf-"
export TARGET_PREFIX="arm-buildroot-linux-gnueabihf-"

查看交叉编译工具链的版本,出现下图所示,即为设置成功。

编写C语言程序

编写一个简单的C语言程序。打印hellowrold。

#include<stdio.h>int main()
{printf("hello world !");return 0;
}

使用以下命令编译。

root@itrunk:~/hello_world# arm-buildroot-linux-gnueabihf-gcc hello.c -o hello
root@itrunk:~/hello_world# ls
hello  hello.c
root@itrunk:~/hello_world# file hello
hello: ELF 32-bit LSB pie executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, not stripped

这个编译好的hello就是通过交叉编译工具链编译出来的可执行文件,我们可以放到开发板上,运行。

上传到开发板上运行

我们经过上节已经成功通过交叉编译工具链进行编译C语言程序,生成了可执行文件。我们就可以把可执行文件放到开发板上运行。

我们把开发板连接网口,自动获取IP。

查看IP,要求开发板和PC在同一个网段。

通过SFTP,直接把编译好的可执行程序,上传到开发板。以下是Ubuntu端命令。

root@itrunk:~/hello_world# sftp root@192.168.20.109
The authenticity of host '192.168.20.109 (192.168.20.109)' can't be established.
ED25519 key fingerprint is SHA256:V+7gXjtKHMNUDlsHZJQ/619JvcDaIBvOpYBoPwwCnI4.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.20.109' (ED25519) to the list of known hosts.
root@192.168.20.109's password:
Connected to 192.168.20.109.
sftp> put hello /oem/
Uploading hello to /oem/hello

在开发板上,给执行权限,执行hello可执行文件。运行如下图。

总结

至此,本文完成了WSL安装Ubuntu22.04的介绍、交叉编译C语言程序、SFTP上传至开发板的整个流程等内容。如有错误,欢迎指出。

参考连接

使用Windows11自带的WSL安装Ubuntu Linux系统教程
win11安装WSL2并配置Ubuntu环境

http://www.dtcms.com/a/309965.html

相关文章:

  • Java集合框架:LinkedList
  • 【Jetson orin-nx】使用Tensorrt并发推理四个Yolo模型 (python版)
  • tensorflow目标分类:分绍(二)
  • 树莓派硬件介绍
  • 提示+掩膜+注意力=Mamba三连击,跨模态任务全面超越
  • 安检机危险品识别准确率↑23.7%:陌讯多模态融合算法实战解析
  • Python爬虫库性能与选型实战指南:从需求到落地的全链路解析
  • 神经网络的基础
  • 工业级蓝光三维扫描仪:汽车零部件高精度检测的利器
  • 研华PCI-1622C 使用RS-422通讯1主多从通讯中断
  • 【QT开发手册】对象模型(对象树) 窗⼝坐标体系
  • EXE加密软件(EXE一机一码加密大师) 最新版1.6.0更新 (附2025最新版本CSDN下载地址)
  • windows mamba-ssm环境配置指南
  • 网络层协议IP
  • 运维端口管理闭环:从暴露面测绘到自动化封禁!
  • 【AI问答记录】grafana接收query请求中未携带step参数,后端基于intervalMs和maxDataPoints等参数计算step的逻辑
  • AcWing 897:最长公共子序列 ← 子序列问题(n≤1e3)
  • “数据管理” 一场高风险的游戏
  • 民航领域数据分类分级怎么做?|《民航领域数据分类分级要求》标准解读
  • 第13届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2022年3月13日真题
  • ip去重小脚本
  • uniapp基础 (一)
  • git pull和git fetch的区别
  • Python爬虫实战:研究OpenCV技术构建图像数据处理系统
  • (转)mybatis和hibernate的 缓存区别?
  • (一)React +Ts(vite创建项目)
  • Flask 路由系统:URL 到 Python 函数的映射
  • 嵌入式学习笔记-MCU阶段-DAY10ESP8266模块
  • 第11届蓝桥杯Python青少组中/高级组选拔赛(STEMA)2020年5月30日真题
  • 嵌入式软件 (SW) 设计文件