基于Ubuntu Server编译YTM32 SDK工程

news2024/12/24 8:40:49

基于Ubuntu Server编译YTM32 SDK工程

文章目录

  • 基于Ubuntu Server编译YTM32 SDK工程
    • 需求
    • 下载软件包
    • 安装与配置
      • 配置虚拟机联网模式
      • 启用ssh连接
      • 启用ftp连接
      • 安装armgcc编译工具链
      • 确认make工具
    • 验证

需求

在Linux系统环境下搭建SDK的编译环境:

  • 方便加入到持续集成工具链
  • Linux系统中运行armgcc的速度更快,适合较为频繁的CI验证过程
  • 服务器上多使用Linux系统,比较容易找到装Linux系统的服务器,用旧电脑、虚拟机或者云服务均可
  • 一些客户需要,要么规避工具链的商业付费授权,要么习惯使用Linux系统(欧美开发者)

下载软件包

  • VirtualBox - Virtual Machine: https://download.virtualbox.org/virtualbox/7.0.12/VirtualBox-7.0.12-159484-Win.exe
  • Ubuntu 18.04 Server ISO Image: https://releases.ubuntu.com/18.04/ubuntu-18.04.6-live-server-amd64.iso
  • Tera Term - Remote Access Terminal:
  • WinSCP - FTP/SFTP Client on Windows: https://winscp.net/eng/download.php
  • gcc-arm-none-eabi for Linux: https://developer.arm.com/downloads/-/gnu-rm

安装与配置

配置虚拟机联网模式

VirtualBox网络模式,默认是NAT,可改为桥接模式。

在桥接模式下,虚拟主机同物理主机相互独立,通过物理主机连接的路由器组网(在Wifi网络中不需要再输入无线路由密码),在同一个局域网网段。桥接模式下的虚拟主机,同在局域网中加入一个物理主机服务器最接近。

为了验证虚拟主机系统已经联网成功,可通过ifconfig命令查看Linux主机的ip地址:

在这里插入图片描述

图x 查看远程服务器ip地址

前期的一些关于网络的配置工作,仍需要在虚拟机界面下完成。例如,先要安装并启用SSH服务,使得本地主机可以通过SSH连接到远程主机。

启用ssh连接

sudo apt install openssh-server # 安装ssh server
sudo service ssh start  # 启动ssh服务
sudo ufw allow 22 # 更新防火墙规则,开放22号端口

为了方便在本地主机(物理主机)系统中操作服务器,接下来将在本地主机使用SSH终端访问远程主机(虚拟主机)系统。
在这里插入图片描述

图x 使用Tera Term建立同远程主机的SSH连接

登录后,接下来的配置工作就都可以在Tera Term终端中进行了。如图x所示。

在这里插入图片描述

图x 使用Tera Term建立同远程主机的SSH连接2

启用ftp连接

通过FTP连接,本机主机可以向远程主机传送文件和下载文件。如此,可以在本地主机下载好必要的软件包,例如armgcc的工具链软件包。

在远程主机安装并启用FTP服务:

sudo apt-get install vsftpd # 安装vsftpd
sudo systemctl start vsftpd # 启用vsftpd服务
sudo systemctl enable vsftpd

配置vsfptd,启用读写访问权限:

sudo nano /etc/vsftpd.conf # 修改配置文件

默认仅需要开启写使能即可:

write_enable=YES

保存修改配置后,重启服务:

sudo systemctl restart vsftpd

在本地主机的Windows系统上,可以使用WinSCP作为FTP客户端。如图x所示。

在这里插入图片描述

图x 使用FTP向远程主机传文件

安装armgcc编译工具链

Ubuntu 18.04的软件源中,gcc-arm-none-eabi工具集的版本比较老,通常要使用较新版的编译器,可以通过直接解压压缩包的方式安装到远程主机的Linux系统中。

在Arm的官网(https://developer.arm.com/downloads/-/gnu-rm)下载Linux版本的gcc-arm-none-eabi工具集,如图x所示。

在这里插入图片描述

图x 下载Linux版本的gcc-arm-none-eabi工具集

使用WinSCP将下载好的gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2文件,上传至远程主机的目录/home/andrew/ytm32-mcu/tools中,再解压:

tar -jxvf gcc-arm-none-eabi-10.3-2021.10-x86_64-linux.tar.bz2

最后,将编译器程序所在的目录添加到Linux的环境变量中。

sudo nano /etc/profile

在文件结尾处添加:

export PATH="$PATH:/home/andrew/ytm32-mcu/tools/gcc-arm-none-eabi-10.3-2021.10/bin"

保存.bashrc文件后,重新激活:

source /etc/profile

此时,在bash中试用arm-none-eabi-gcc命令,可以看到,bash已经可以检索到armgcc的编译器:

andrew@andrew-pc:~/ytm32-mcu$ arm-none-eabi-gcc --version
arm-none-eabi-gcc (GNU Arm Embedded Toolchain 10.3-2021.10) 10.3.1 20210824 (release)
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

andrew@andrew-pc:~/ytm32-mcu$

确认make工具

YTM32的SDK使用Makefile组织源码工程。

PS:Ninja对Windows的支持似乎要好于Linux,因此YTM32的SDK在Windows系统中搭建免费的开发环境,就选用了Ninja。Make在Windows系统上没有专门的软件包,不能在Windows原生的命令行环境中直接调用,只得通过mingw环境套用一个兼容性的make工具。但是,Make在Linux系统环境下是天然被支持的,因此在Linux系统环境下,YTM32的SDK优先使用Make工具。

在bash中,试着运行make命令,确认是否已经安装。

andrew@andrew-pc:~/ytm32-mcu$ make --version
GNU Make 4.1
Built for x86_64-pc-linux-gnu
Copyright (C) 1988-2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
andrew@andrew-pc:~/ytm32-mcu$

确认过眼神,是对的人。

验证

通过WinSCP将SDK的软件包传送至远程主机,解压软件包:

andrew@andrew-pc:~/ytm32-mcu$ unzip YTM32Bx_SDK_RTM_1.1.0.zip

然后以hello_world工程为例,切换至hello_world工程的Makefile文件所在目录,试着编译一下:

andrew@andrew-pc:~/ytm32-mcu/YTM32Bx_SDK_RTM_1.1.0/sdk/demos/YTM32B1MD1/hello_world/GCC$ make
======================================================================
Checked for uname, found: Linux
Assuming Unix like environment
======================================================================
Creating directory for object files
======================================================================
Compiling FLASH/flash/YTM32B1MD1_startup_gcc.o
======================================================================
Compiling FLASH/flash/dma_driver.o
======================================================================
Compiling FLASH/flash/dma_hw_access.o
======================================================================
Compiling FLASH/flash/dma_irq.o
======================================================================
Compiling FLASH/flash/interrupt_manager.o
======================================================================
Compiling FLASH/flash/pins_driver.o
======================================================================
Compiling FLASH/flash/pins_port_hw_access.o
======================================================================
Compiling FLASH/flash/linflexd_uart_driver.o
======================================================================
Compiling FLASH/flash/linflexd_uart_irq.o
======================================================================
Compiling FLASH/flash/clock_YTM32B1Mx.o
======================================================================
Compiling FLASH/flash/osif_baremetal.o
======================================================================
Compiling FLASH/flash/printf.o
======================================================================
Compiling FLASH/flash/startup.o
======================================================================
Compiling FLASH/flash/system_YTM32B1MD1.o
======================================================================
Compiling FLASH/flash/clock_config.o
======================================================================
Compiling FLASH/flash/peripherals_config.o
======================================================================
Compiling FLASH/flash/pin_mux.o
======================================================================
Compiling FLASH/flash/main.o
======================================================================
Linking to FLASH/flash.elf
   text    data     bss     dec     hex filename
   6604      84    9324   16012    3e8c FLASH/flash.elf
======================================================================
Build complete!

Bingo。

鉴于大多数在服务器上做CI(持续集成,Continuous Integration)只是编译,不做下载和调试,本文暂不继续介绍下载可执行文件的操作。实际上,编译之后的可执行文件,例如flash.elf,可以通过WinSCP取回到本地主机,在Windows系统下通过各种下载器(例如JLink或者DAPLink)下载到芯片上,或者通过Bootloader的方式更新固件,用户可以根据需要选用合适的操作方式。

  • END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1119088.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

16.The Tensor Product:Vector/Covector combinations

本节将概括目前为止所学的张量积知识。并讨论一般张量&#xff0c;它可以由任意数量的向量和协向量的任意组合来生成。 同样&#xff0c;也是使用的非标准的符号。 (2&#xff0c;0)阶张量&#xff0c; 由两个向量生成的。 &#xff08;1&#xff0c;2&#xff09;阶张…

C++学习之多态详解

目录 多态的实现 例题 重载 重写 重定义的区别 抽象类 多态实现原理 多态的实现 C中的多态是指&#xff0c;当类之间存在层次结构&#xff0c;并且类之间是通过继承关联时&#xff0c;就会用到多态。多态意味着调用成员函数时&#xff0c;会根据调用函数的对象的类型来执…

Spring IOC之@ComponentScan

博主介绍&#xff1a;✌全网粉丝4W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

[SWPUCTF 2023 秋季新生赛] web题解

文章目录 colorful_snakeNSS_HTTP_CHEKER一键连接!ez_talkPingpingpingUnS3rialize查查needRCE-PLUSbackup colorful_snake 打开题目&#xff0c;查看js源码 直接搜flag 把那三行代码复制到控制器&#xff0c;得到flag NSS_HTTP_CHEKER 都是http请求基本知识 抓包按照要求来&…

企业知识库管理系统怎么做?

21世纪&#xff0c;一个全新的信息化时代&#xff0c;从最初的传统办公到现在的信息化办公&#xff0c;一个世纪的跨越造就了各种大数据的诞生。 知识库系统 在这个数据横行的时代&#xff0c;文档管理产品市场逐渐兴盛起来&#xff0c;企业知识库管理系统作为企业的智慧信息的…

计算机组成原理new15 磁盘

文章目录 磁盘的结构磁盘的性能指标磁盘阵列固态硬盘SSD关于机械硬盘和固态硬盘的地址 这里计算传输时间和数据传输率是难点 磁盘的结构 注&#xff1a;磁盘的基本读取单位是扇区&#xff0c;但是每次只能读取1bit&#xff0c;这里我们应该理解为磁盘每次的读写操作至少要持续…

初始 c++(1)

目录: 目录 1: 命名空间的详解 2:c的输入与输出关键字及理解 3:详细讲解第一个c程序(每段代码的意思) 4:缺省参数的理解 5:函数重载 引言&#xff1a;从今天开始我们就开始学习c了&#xff0c;让我们一起开始新的知识吧&#xff01; 1&#xff1a;命名空间 所谓的命名空间…

深度学习学习笔记-模型的修改和CRUD

目录 1.打印模型,理解模型结构2.模型保存与加载3.模型的模块CRUD和模块的层的CRUD 1.打印模型,理解模型结构 import torchclass MyModel(torch.nn.Module):def __init__(self):super().__init__()self.layer1 torch.nn.Sequential(torch.nn.Linear(3, 4),torch.nn.Linear(4, …

云计算——网络虚拟化简介

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 目录 前期回顾 前言 一.网络虚拟化 二.网络虚拟化介绍 三.为什么要网络虚拟化 四,网络…

STM32+2.9inch微雪墨水屏(电子纸)实现显示

本篇文章从硬件原理以及嵌入式编程等角度完整的介绍了墨水屏驱动过程&#xff0c;本例涉及的墨水屏为2.9inch e-Paper V2,它采用的是“微胶囊电泳显示”技术进行图像显示&#xff0c;其基本原理是悬浮在液体中的带电纳米粒子受到电场作用而产生迁移&#xff0c;从而改变显示屏各…

【C++初阶】小白入门C++

目录 前言&#xff1a;1、C关键字2、命名空间2.1命名空间是什么2.2为什么要有命名空间2.3命名空间怎么使用2.3.1命名空间的写法2.3.2命名空间是可以嵌套的2.3.3使用命名空间的三种方式 3、C输入和输出3.1初识cout和cin3.2C的输入输出可以自动识别变量类型 4、缺省参数4.1缺省参…

Linux:用户和权限

Linux&#xff1a;用户和权限 1. 认知root用户1.1 root用户&#xff08;超级管理员&#xff09;1.2 su和exit命令1.3 sudo命令1.3.1 为普通用户配置sudo认证 2. 用户、用户组管理2.1 用户组管理2.2 用户管理2.3 getent命令 3. 查看权限控制3.1 认知权限信息3.1.1 案例 4. 修改权…

react 实战- 玩转 react 全家桶(进阶)学习

一个命令是怎么运行起来的? Shell运行一个命令,实际上是运行一个脚本 环境变量 装了node以后,node的路径,就被注册到了环境变量里. 一个js的东西,可以注册? bin Webpack配置 构建 import A from A , const Arequire(A) 为什么可以这么写?为哈都行?本质上,是构建工…

人人自媒体的时候,Ai绘画还值得踏入吗?

前言 先说结论&#xff0c;如果你不打算涉足自媒体&#xff0c;平时也从不上网发什么内容去展示自己的话&#xff0c;其实AI绘画对你来说意义不大。但如果你对自媒体感兴趣&#xff0c;会涉及发作品&#xff0c;发内容&#xff0c;甚至去设计图片&#xff0c;那么AI绘画值得你…

【【萌新的SOC学习之自定义IP核的学习与设计】】

萌新的SOC学习之自定义IP核的学习与设计 本章为了更加深入的了解FPGA的自定义IP和IP封装测试等问题 参考了正点原子 第六讲自定义IP核呼吸灯实验 和 第十九章 IP封装与接口定义实验 为了更好的理解自定义IP核 我们先介绍一个带AXI主从接口的IP核 我们可以展开AXI从接口 下…

Vue--》简易资金管理系统后台项目实战(后端)

今天开始使用 node vue3 ts搭建一个简易资金管理系统的前后端分离项目&#xff0c;因为前后端分离所以会分两个专栏分别讲解前端与后端的实现&#xff0c;后端项目文章讲解可参考&#xff1a;前端链接&#xff0c;我会在前后端的两类专栏的最后一篇文章中会将项目代码开源到我…

转行做程序员,多晚都不晚

大家好啊&#xff0c;我是董董灿。 最近有不少小伙伴加我微信咨询一些问题&#xff0c;有同学想了解AI行业的现状&#xff0c;想着转行的&#xff0c;也有在校生想了解毕业后工作方向的&#xff0c;当然也有想学习编程知识的。 诚惶诚恐&#xff0c;没想到之前写的文章&#…

【CHI】CHI协议,transaction事务汇总

前言 CHI协议最难的是什么&#xff0c;就是那一堆各种各样的事务&#xff0c;你不知道什么场景应该使用什么合适的事务&#xff0c;收到X事务又该回复什么事务。相当于CHI给你制定了很多种&#xff08;尽可能覆盖完全&#xff09;场景及事务&#xff0c;你需要去了解&#xff0…

英语——分享篇——每日200词——2401-2600

2401——moisture——[mɔɪstʃə(r)]——n.潮气&#xff0c;湿气&#xff0c;水分——moisture——moist潮湿的(熟词)ur你的(编码your)e鹅(编码)——潮湿的地方你的鹅一身潮气——Moisture in the atmosphere condensed into dew during the night.——大气中的水分在夜间凝结…

二阶系统时域响应

二阶系统微分方程 二阶系统传递函数 二阶系统单位阶跃响应 过阻尼系统 临界阻尼系统 欠阻尼系统 无阻尼系统 二阶系统阶跃响应仿真 在Matlab中进行仿真&#xff0c;设置不同阻尼比2、1、0.5和0&#xff0c;可以得到结论&#xff1a; 阻尼比越小&#xff0c;系统响应速度越快&…