基于Ubuntu Server编译YTM32 SDK工程

2023-10-22 00:12

本文主要是介绍基于Ubuntu Server编译YTM32 SDK工程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基于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.elftext    data     bss     dec     hex filename6604      84    9324   16012    3e8c FLASH/flash.elf
======================================================================
Build complete!

Bingo。

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

  • END

这篇关于基于Ubuntu Server编译YTM32 SDK工程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/257856

相关文章

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

SQL Server清除日志文件ERRORLOG和删除tempdb.mdf

《SQLServer清除日志文件ERRORLOG和删除tempdb.mdf》数据库再使用一段时间后,日志文件会增大,特别是在磁盘容量不足的情况下,更是需要缩减,以下为缩减方法:如果可以停止SQLSe... 目录缩减 ERRORLOG 文件(停止服务后)停止 SQL Server 服务:找到错误日志文件:删除

Windows Server服务器上配置FileZilla后,FTP连接不上?

《WindowsServer服务器上配置FileZilla后,FTP连接不上?》WindowsServer服务器上配置FileZilla后,FTP连接错误和操作超时的问题,应该如何解决?首先,通过... 目录在Windohttp://www.chinasem.cnws防火墙开启的情况下,遇到的错误如下:无法与

一文详解SQL Server如何跟踪自动统计信息更新

《一文详解SQLServer如何跟踪自动统计信息更新》SQLServer数据库中,我们都清楚统计信息对于优化器来说非常重要,所以本文就来和大家简单聊一聊SQLServer如何跟踪自动统计信息更新吧... SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要。一般情况下,我们会开启"自动更新

Ubuntu中Nginx虚拟主机设置的项目实践

《Ubuntu中Nginx虚拟主机设置的项目实践》通过配置虚拟主机,可以在同一台服务器上运行多个独立的网站,本文主要介绍了Ubuntu中Nginx虚拟主机设置的项目实践,具有一定的参考价值,感兴趣的可... 目录简介安装 Nginx创建虚拟主机1. 创建网站目录2. 创建默认索引文件3. 配置 Nginx4

JAVA虚拟机中 -D, -X, -XX ,-server参数使用

《JAVA虚拟机中-D,-X,-XX,-server参数使用》本文主要介绍了JAVA虚拟机中-D,-X,-XX,-server参数使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录一、-D参数二、-X参数三、-XX参数总结:在Java开发过程中,对Java虚拟机(JVM)的启动参数进

Windows server服务器使用blat命令行发送邮件

《Windowsserver服务器使用blat命令行发送邮件》在linux平台的命令行下可以使用mail命令来发送邮件,windows平台没有内置的命令,但可以使用开源的blat,其官方主页为ht... 目录下载blatBAT命令行示例备注总结在linux平台的命令行下可以使用mail命令来发送邮件,Win

Ubuntu 22.04 服务器安装部署(nginx+postgresql)

《Ubuntu22.04服务器安装部署(nginx+postgresql)》Ubuntu22.04LTS是迄今为止最好的Ubuntu版本之一,很多linux的应用服务器都是选择的这个版本... 目录是什么让 Ubuntu 22.04 LTS 变得安全?更新了安全包linux 内核改进一、部署环境二、安装系统